我怎样才能找到Python Tic Tac Toe游戏的赢家?

use*_*071 2 python graphics tic-tac-toe python-2.7

到目前为止,我有一个程序,其中2个玩家可以点击以轮流放置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()
Run Code Online (Sandbox Code Playgroud)

Cub*_*bic 6

保持数据和数据表示的分离.这就是如何.现在你只是绘制东西,而不是你应该生成一些游戏场的表示(例如,盒子及其状态的列表,如p1检查,p2检查,或未选中),然后在需要时使用它来绘制.优势应该是显而易见的 - 如果你知道游戏的状态,确定是否有胜利者(以及它是谁)是微不足道的.

  • @ user1871071问题是,现在你根本就没有实现井字游戏 - 相反,你正在画出一些像tic-tac-toe那样_looks_但实际上并非如此.你现在要做的就是我们所说的_abstraction_ - 绘制出游戏的基本要素.例如 - tic-tac-toe使用十字架和圆圈是否很重要?对于绘图,是的.对于您的数据?不是.盒子的布局也不是 - 它们是二维绘制的,但这并不意味着你的表示必须是二维的. (2认同)