猫史档案馆


【Python作品分享】井字棋【教程贴】

用户:EE剑圣°EE剑圣°查看:0 回复:0 评论:0 创建时间:2021-03-28T10:58:01


【作品展示】

center_image

 

【作品介绍】

阿巴

 

【作品源代码】

#构建棋盘
import os


def buildLine(n):
    line = []
    for i in range(2*n+1):
        line.append('-')
    return line


def buildBlanks(n):
    blanks = []
    for i in range(n):
        blanks.append('|')
        blanks.append(' ')
    blanks.append('|')
    return blanks


def buildPlate(n):
    plate = []
    for i in range(n):
        plate.append(buildLine(n))
        plate.append(buildBlanks(n))
    plate.append(buildLine(n))
    return plate


def show(plate):
    for row in plate:
        print(''.join(row))
#落子


def dropPiece(plate, row, col, piece):
    row = 2*row-1
    col = col*2-1
    plate[row][col] = piece
#判断胜负


def judge(plate):
    #判断是否有落子的空位,如果没有,则返回
    #判断每一行字符都相同,有则返回该字符,从而判断胜负
    n = len(plate)
    for i in range(1, n-1, 2):
        isEqua = True
        first = plate[i][1]
        for j in range(1, n-1, 2):
            if plate[i][j] != first:
                isEqua = False
                break
        if isEqua:
            return first
#判断每一列的字符都相同,有则返回该字符
    for i in range(1, n-1, 2):
        isEqua = True
        first = plate[1][i]
        for j in range(1, n-1, 2):
            if plate[j][i] != first:
                isEqua = False
                break
        if isEqua:
            return first
#判断对角线的字符都相同,有则返回该字符
    isEqua = True
    for i in range(1, n-1, 2):
        first = plate[1][1]
        if plate[i][i] != first:
            isEqua = False
            break
    if isEqua:
        return first
    x = n-2
    y = 1
    z = y
    first = plate[x][y]
    while True:
        x -= 2
        y += 2
        if first != plate[x][y]:
            isEqua = True
            break
        if x == z:
            break
    if not isEqua:
        return first
    # first=plate[5][1]
    # if plate[5][1]==plate[3][3]==plate[1][5]:
    #     return first


def main():
    i = 1
    a = int(input("输入棋盘大小:"))
    plate = buildPlate(a)
    show(plate)
    m = len(plate)
    while True:
        piece = 'o'
        if i % 2 == 0:
            piece = 'x'
        x = int(input("enter the location x:"))
        y = int(input("enter the location y:"))
        if not (0 <= x <= a and 0 <= y <= a):
            print("请输入0-"+str(a)+"以内的数")
            continue
        if plate[2*x-1][2*y-1] == ' ':
            dropPiece(plate, x, y, piece)
        else:
            print("此位置已有棋子")
            continue
        i += 1
        show(plate)
        if judge(plate) == 'o' or judge(plate) == 'x':
            print("the winner is "+judge(plate))
            break
        s = 0
        for j in range(1, m - 1, 2):
            for k in range(1, m - 1, 2):
                if plate[j][k] == ' ':
                    s = s + 1
        if s == 0:
            print("平局")
            break
        windows: os.system('cls')


main()

 

【提示】

部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:

https://python.codemao.cn


回复

上一页1 页 / 共 0下一页