python 中井字游戏的绘制函数

问题描述 投票:0回答:0
board = [[0, 0, 0],
         [0, 0, 0],
         [0, 0, 0]]
wins = [
    ((0, 0), (0, 1), (0, 2)),
    ((1, 0), (1, 1), (1, 2)),
    ((2, 0), (2, 1), (2, 2)),
    ((0, 0), (1, 0), (2, 0)),
    ((0, 1), (1, 1), (2, 1)),
    ((0, 2), (1, 2), (2, 2)),
    ((0, 0), (1, 1), (2, 2)),
    ((2, 0), (1, 1), (0, 2))]


def print_board():
    for i in board:
        print("|", end="")
        for l in i:
            if l == 0:
                print("-", end="|")
            elif l == 1:
                print("X", end="|")
            elif l == 2:
                print("O", end="|")
            elif l == 3:
                print("E", end="|")
            elif l == 4:
                print("p", end="|")
            elif l == 5:
                print("c", end="|")
        print()


def is_victory():
    ones = 0
    twos = 0
    for row in board:
        for elem in row:
            if elem == 1:
                ones += 1
            elif elem == 2:
                twos += 1
    if ones + twos >= 5:
        for i in wins:
            o, t, tr = i
            o1, o2 = o
            t1, t2 = t
            tr1, tr2 = tr
            if board[o2][o1] == board[t2][t1] == board[tr2][tr1] == 1:
                board[o2][o1], board[t2][t1], board[tr2][tr1] = 4
                return True, "X"
            elif board[o2][o1] == board[t2][t1] == board[tr2][tr1] == 2:
                board[o2][o1], board[t2][t1], board[tr2][tr1] = 5
                return True, "O"
    return False


def is_draw():
    empty_spaces = 0
    for row in board:
        if 0 in row:
            empty_spaces += row.count(0)
    set1 = empty_spaces < 5
    set2 = None
    set3 = None
    for i in wins:
        o, t, tr = i
        o1, o2 = o
        t1, t2 = t
        tr1, tr2 = tr
        if board[o2][o1] == board[t2][t1] == 1 or board[t2][t1] == board[tr2][tr1] == 1 or board[o2][o1] == board[tr2][tr1] == 1 or board[o2][o1] == board[t2][t1] == 2 or board[t2][t1] == board[tr2][tr1] == 2 or board[o2][o1] == board[tr2][tr1] == 2:
            set3 = True
    for i in wins:
        o, t, tr = i
        o1, o2 = o
        t1, t2 = t
        tr1, tr2 = tr
        if (board[o2][o1] == board[t2][t1] == board[tr2][tr1] == 0):
            set2 = True
    for i in wins:
        o, t, tr = i
        o1, o2 = o
        t1, t2 = t
        tr1, tr2 = tr
        if set1 and set2 and set3:
            return True
    return False


while True:
    posxx = int(input("Enter xx position: "))
    posxy = int(input("Enter xy position: "))
    board[posxy][posxx] = 1
    if is_draw():
        print_board()
        print("Draw/Tie")
        break
    elif is_victory() == (True, "X"):
        print_board()
        print("X Wins!")
        break
    else:
        print_board()
    posox = int(input("Enter ox position: "))
    posoy = int(input("Enter oy position: "))
    board[posoy][posox] = 2
    if is_draw():
        print_board()
        print("Draw/Tie")
        break
    elif is_victory() == (True, "O"):
        print_board()
        print("O Wins!")
        break
    else:
        print_board()

在行中“if board[o2][o1] == board[t2][t1] == 1 or board[t2][t1] == board[tr2][tr1] == 1 or board[o2][ o1] == 板[tr2][tr1] == 1 或板[o2][o1] == 板[t2][t1] == 2 或板[t2][t1] == 板[tr2][tr1 ] == 2 或 board[o2][o1] == board[tr2][tr1] == 2:" 我想将变量 set3 设置为 True,即使只有一个条件为真,比如 board[o2][o1] == board[t2][t1] == 1 我认为我的代码应该这样做但它没有发生 Look :

Enter xx position: 0
Enter xy position: 0
|X|-|-|
|-|-|-|
|-|-|-|
Enter ox position: 0
Enter oy position: 1
|X|-|-|
|O|-|-|
|-|-|-|
Enter xx position: 0
Enter xy position: 2
|X|-|-|
|O|-|-|
|X|-|-|
Enter ox position: 1
Enter oy position: 1
|X|-|-|
|O|O|-|
|X|-|-|
Enter xx position: 1
Enter xy position: 0
|X|X|-|
|O|O|-|
|X|-|-|
Draw/Tie

board[o2][o1] == board[t2][t1] == 1 应该触发没有?

对不起,如果我的代码非常糟糕,我将其作为一个学习项目来做,并且不希望在没有赢家且棋盘已满时才使用绘制功能

python tic-tac-toe
© www.soinside.com 2019 - 2024. All rights reserved.