到目前为止,我有一个程序,其中两个玩家可以点击放置一个X和一个O依次。我不知道怎样才能让这个节目认出赢家/平局。如果你们能帮我做一个函数,在屏幕上以任何方式显示一个胜利/抽签,我将永远爱你们。谢谢。

from graphics import *

import sys


def player_o(win, center):
'''
Parameters:
- win: the window
'''
    outline_width = 5
    circle = Circle(center, boxsize/2)
    circle.setOutline('red')
    circle.setWidth(outline_width)
    circle.draw(win)


def player_x(win, p1x, p1y):
'''
Parameters:
- win: the window
'''
for i in range(2):
    deltaX = (-1) ** i * (boxsize / 2)
    deltaY = (boxsize / 2)
    line = Line(Point(p1x - deltaX, p1y - deltaY),
             Point(p1x + deltaX, p1y + deltaY))
    line.setFill('red')
    line.setWidth(5)
    line.draw(win)



def game():


global win
global boxsize

    try:
        winsize = int(input("How large would you like the window? (Between 100 and 3000): "))
        if winsize < 100 or winsize > 3000:
            print("Invalid window size")
            quit()

    squares = int(input("How many squares per row? (Between 3 and 10):"))
    boxsize = winsize/ squares
    if squares < 3 or squares > winsize / 10:
        print("Invalid number")
        quit()
    except ValueError:
        sys.exit("Not a valid number")

    win = GraphWin("Tic Tac Toe", winsize, winsize)

    for i in range(squares - 1):
        hline = Line(Point(0, (winsize/squares) * (i + 1)), Point(winsize,  (winsize/squares) * (i + 1)))
        hline.draw(win)
        vline = Line(Point((winsize/squares) * (i + 1), 0), Point((winsize/squares) * (i + 1), winsize))
        vline.draw(win)




for i in range((squares ** 2) // 2):

    print("X, click a square.")
    p1mouse = win.getMouse()
    p1x = p1mouse.getX()
    p1y = p1mouse.getY()
    player_x(win, p1x, p1y)

    print("O, click a square.")
    p2mouse = win.getMouse()
    p2x = p2mouse.getX()
    p2y = p2mouse.getY()
    player_o(win, Point(p2x, p2y))

if squares % 2 == 1:
    print("X, click a square.")
    p1mouse = win.getMouse()
    p1x = p1mouse.getX()
    ply = p1mouse.getY()
    player_x(win, p1x, p1y)

game()

最佳答案

保持数据和数据表示分离。就这样。现在你只是在画一些东西,而不是你应该生成一些游戏场的表示(例如,一个框的列表和它们的状态,如in,checked by p1,checked by p2,或unchecked),然后在需要时使用它来绘制。优势应该是显而易见的——如果你知道游戏的状态,确定是否有赢家(以及赢家是谁)是微不足道的。

07-26 01:45