Последний случай для l oop ничего не отображает в графическом окне - PullRequest
0 голосов
/ 02 апреля 2020

Я пытаюсь сделать игру ti c -ta c -toe, и код работает просто отлично, но в последнем случае, когда игрок или компьютер выигрывает, он не рисует «X» или «О» и ни одна из линий разреза, которая должна быть проведена, когда кто-то из них выиграет. Также окно сообщения curr_status в функции main() не обновляется и продолжает отображать Player 1 Chance

Вот весь код на случай, если кто-то захочет его увидеть

main ()

def main():

global win
global boxsize
entries = [[None] * 3, [None] * 3, [None] * 3]

windowsize = 400
boxsize = 100

win = GraphWin("Tic Tac Toe", windowsize, windowsize, autoflush=False)
win.setBackground("grey")

grid_img = Image(Point(200, 200), "grid.png")
grid_img.draw(win)

win1_message = 'Player 1 wins!'
win2_message = 'Player 2 wins!'
delay_message = 'Thinking....'
draw_message = "It's a draw"
p1_chance_message = 'Player 1 Chance'

curr_status = Text(Point(200, 380), "TIC TAC TOE GAME")
curr_status.setSize(20)
curr_status.setTextColor("blue")
curr_status.setStyle("bold italic")
curr_status.draw(win)

for i in range(1, 10):

    curr_status.setText(p1_chance_message)
    p1mouse = win.getMouse()
    p1x = p1mouse.getX()
    p1y = p1mouse.getY()
    player_move(entries, win, p1x, p1y)
    if check(entries) is True:
        curr_status.setText(win1_message)
        break
    elif check(entries) is False:
        curr_status.setText(draw_message)
        break

    curr_status.setText(delay_message)

    computer_move(entries, win)

    if check(entries) is True:
        curr_status.setText(win2_message)
        break
    elif check(entries) is False:
        curr_status.setText(draw_message)
        break

    curr_status.setText(p1_chance_message)

print("Enter 1 to play again, 0 to Exit : ")
x = int(input())
if (x == 1):
    win.close()
    main()
else:
    sys.exit()

check() функция, которая проверяет, выиграл ли кто-либо или сыграл вничью, и др aws линия разреза, если требуется

def check(entries):
    if (entries[0][0] == 'x' and entries[0][1] == 'x' and entries[0][2] == 'x'):
        line = Line(Point(100, 50), Point(100, 350))
        line.setFill('red')
        line.setWidth(5)
        line.draw(win)
        return True
    elif (entries[1][0] == 'x' and entries[1][1] == 'x' and entries[1][2] == 'x'):
        line = Line(Point(200, 50), Point(200, 350))
        line.setFill('red')
        line.setWidth(5)
        line.draw(win)
        return True
    elif (entries[2][0] == 'x' and entries[2][1] == 'x' and entries[2][2] == 'x'):
        line = Line(Point(300, 50), Point(300, 350))
        line.setFill('red')
        line.setWidth(5)
        line.draw(win)
        return True
    elif (entries[0][0] == 'x' and entries[1][0] == 'x' and entries[2][0] == 'x'):
        line = Line(Point(50, 100), Point(350, 100))
        line.setFill('red')
        line.setWidth(5)
        line.draw(win)
        return True
    elif (entries[0][1] == 'x' and entries[1][1] == 'x' and entries[2][1] == 'x'):
        line = Line(Point(50, 200), Point(350, 200))
        line.setFill('red')
        line.setWidth(5)
        line.draw(win)
        return True
    elif (entries[0][2] == 'x' and entries[1][2] == 'x' and entries[2][2] == 'x'):
        line = Line(Point(50, 300), Point(350, 300))
        line.setFill('red')
        line.setWidth(5)
        line.draw(win)
        return True
    elif (entries[0][0] == 'x' and entries[1][1] == 'x' and entries[2][2] == 'x'):
        line = Line(Point(50, 50), Point(350, 350))
        line.setFill('red')
        line.setWidth(5)
        line.draw(win)
        return True
    elif (entries[0][2] == 'x' and entries[1][1] == 'x' and entries[2][0] == 'x'):
        line = Line(Point(50, 350), Point(350, 50))
        line.setFill('red')
        line.setWidth(5)
        line.draw(win)
        return True

    elif (entries[0][0] == 'o' and entries[0][1] == 'o' and entries[0][2] == 'o'):
        line = Line(Point(100, 50), Point(100, 350))
        line.setFill('green')
        line.setWidth(5)
        line.draw(win)
        return True
    elif (entries[1][0] == 'o' and entries[1][1] == 'o' and entries[1][2] == 'o'):
        line = Line(Point(200, 50), Point(200, 350))
        line.setFill('green')
        line.setWidth(5)
        line.draw(win)
        return True
    elif (entries[2][0] == 'o' and entries[2][1] == 'o' and entries[2][2] == 'o'):
        line = Line(Point(300, 50), Point(300, 350))
        line.setFill('green')
        line.setWidth(5)
        line.draw(win)
        return True
    elif (entries[0][0] == 'o' and entries[1][0] == 'o' and entries[2][0] == 'o'):
        line = Line(Point(50, 100), Point(350, 100))
        line.setFill('green')
        line.setWidth(5)
        line.draw(win)
        return True
    elif (entries[0][1] == 'o' and entries[1][1] == 'o' and entries[2][1] == 'o'):
        line = Line(Point(50, 200), Point(350, 200))
        line.setFill('green')
        line.setWidth(5)
        line.draw(win)
        return True
    elif (entries[0][2] == 'o' and entries[1][2] == 'o' and entries[2][2] == 'o'):
        line = Line(Point(50, 300), Point(350, 300))
        line.setFill('green')
        line.setWidth(5)
        line.draw(win)
        return True
    elif (entries[0][0] == 'o' and entries[1][1] == 'o' and entries[2][2] == 'o'):
        line = Line(Point(50, 50), Point(350, 350))
        line.setFill('green')
        line.setWidth(5)
        line.draw(win)
        return True
    elif (entries[0][2] == 'o' and entries[1][1] == 'o' and entries[2][0] == 'o'):
        line = Line(Point(50, 350), Point(350, 50))
        line.setFill('green')
        line.setWidth(5)
        line.draw(win)
        return True
    elif (all([all(row) for row in entries])):
        return False
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...