2017-10-19 87 views
2

我已經完成了TicTacToe遊戲的主要遊戲機制;然而,我不知道一種方法來編碼最終比賽的勝利條件,即如何找到某人勝利/領帶。如何在python的TicTacToe遊戲中編碼win/tie條件

我試過使用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'的座標。 整數
rdicty值之間導航和董事會的行之間導航。 詞典
player是播放器。 字符串 players是玩家('X' and 'O'
win當一名球員贏得了爲真列表 /遊戲已經追平。 布爾

win變量是什麼需要的答案改變對這個問題,我只需要對如何編寫它的代碼,或者至少一個想法(因爲我沒有任何的!)。
在此先感謝!

回答

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):