如何在python中的TicTacToe游戏中编写win / tie条件

时间:2017-10-19 16:53:01

标签: python-3.x list conditional-statements tic-tac-toe

我已经制作了TicTacToe游戏的主要游戏机制;但是,我不知道如何编写最终比赛胜利条件,即如何找到某人获胜/领带。

我尝试使用all()函数,但要么这不起作用,要么我使用不正确(可能是后者)。

这是完整的代码,以及代码的变量列表(因为没有注释):

def get_grid():
    r1 = ['-','-','-']
    r2 = ['-','-','-']
    r3 = ['-','-','-']
    return r1, r2, r3

def get_coords():
    x = 0
    y = 0
    while True:
        try:
            x = int(input("x coord : "))
            y = int(input("y coord : "))
        except ValueError:
            print("Must be an integer")
        if x < 0 or x > 3 or y < 0 or y > 3:
            print('Both values must be in the grid!')
        else:
            break
    return x, y

def pgrid(x, y, r1, r2, r3, player):
    rdict = {1:r1, 2:r2, 3:r3}
    if x != 0 and y != 0:
        while True:
            if rdict[y][x-1] == '-':
                rdict[y][x-1] = player
                break
            else:
                print("Invalid Space!")
                x, y = get_coords()
    print('\t1\t2\t3')
    print('  1 |', end = '\t')
    for i in r1:
        print(i, end = '   |   ')
    print()
    print('  2 |', end = '\t')
    for i in r2:
        print(i, end = '   |   ')
    print()
    print('  3 |', end = '\t')
    for i in r3:
        print(i, end = '   |   ')
    print()


def main():
    r1, r2, r3 = get_grid()
    players = ['X', 'O']
    pgrid(0, 0, r1, r2, r3, None)
    win = False
    while win == False:
        for i in players:
            x, y = get_coords()
            pgrid(x, y ,r1 ,r2 , r3, i)

变量
r1, r2 and r3是董事会的第一,第二和第三行。的列表
x and y是放置'X'或'O'的坐标。的整数
rdict在输入的y值和电路板行之间导航。的字典
player是玩家。的字符串 players是玩家的{strong>列表('X' and 'O'
当玩家赢了/游戏已经并列时,win是真的。 布尔

win变量需要在这个问题的答案中改变,我只需要代码或者至少需要一个关于如何编码的想法(因为我没有!)。
提前谢谢!

1 个答案:

答案 0 :(得分:1)

检查行中或列中是否有三个相同的字母,最简单的方法是什么?对于第一列,请r1[0]r2[0]r3[0]检查它们是否包含相同的字母:

if r1[0] == 'X' and r2[0] == 'X' and r3[0] == 'X':
    print('First column meets victory conditions', 'X')

现在对所有行和列以及两个字母执行此操作将会是一个,但幸运的是我们可以让一些for循环为我们工作。

for letter in 'XO':
    for i in range(3):
        if r1[i] == letter and r2[i] == letter and r3[i] == letter:
            print('Column', i, letter)

对于行只是迭代(r1, r2, r3)而不是range(3)并检查:

if row[0] == letter and row[1] == letter ...

当然,你也可以使用all函数和列表推导或生成器表达式来查看所有字母是否相等。

for row in (r1, r2, r3):
    if all(item == letter for item in row):