2017-05-11 48 views
1

嗨,我是新來的蟒蛇,我正在創建一個連接4遊戲,我在最後一點,允許玩遊戲的播放功能。該問題似乎是我的while循環,它運行一次,詢問用戶列並在該列中輸入計數器,但是之後它只是繼續詢問要選擇哪一列而不更改電路板:Python:連接4播放

who = game['who'] 
    while who != 'computer': 
     x = int(input("Which column to select? ")) 
     game['board'] = board2 
     l = getValidMoves(game['board']) 
     if x in l: 
      game['board'] = makeMove(board2, x, who) 
      printBoard(game['board'])    
      board = game['board'] 
      if hasWon(game['board'], who) == True:       
       print("{who} has won.") 
       sys.exit() 

你可以看到,當我運行這段代碼我得到:

Which column to select? 1 
|1|2|3|4|5|6|7| 
--------------- 
| | | | | | | | 
| | | | | | | | 
| | | | | | | | 
| | | | | | | | 
| | | | | | | | 
| |X| | | | | | 

Which column to select? 2 

Which column to select? 

我認爲這個問題是,while循環是要求選擇什麼樣的列後停止運行。任何幫助,將不勝感激。

我printBoard功能是:

print("|1|2|3|4|5|6|7|") 
    print("---------------")   
    for j in range(6): 
     for i in range(7): 
      if board[j][i] == 1: 
       board[j][i] = "X" 
      elif board[j][i] == 2: 
       board[j][i] = "O" 
      elif board[j][i] == 0: 
       board[j][i] = " "       
    for j in range(6): 
     print("|"+"|".join(str(board[j][i]) for i in range(7))+"|") 
    return None 

我getValidMoves是:

l = list() 
for i in range(7): 
    if board[0][i] == 0: 
     l.append(i) 
return l 
enter code here 

和我makeMove是:

if who == 1: 
    for i in [5,4,3,2,1,0]: 
     if board[i][move] == 0: 
      break 
    board[i][move] = 1 

elif who == 2: 
    for i in [5,4,3,2,1,0]: 
     if board[i][move] == 0: 
      break 
    board[i][move] = 2    
return board 
+0

你的方法返回什麼或'board2'是什麼?你有沒有嘗試打印返回值?特別是'getValidMoves()'。 – Lafexlos

+1

您需要提供更多信息,例如'getValidMoves','makeMove'和'printBoard'函數正確運行或不運行。逐行調試器可以幫助您找出錯誤的位置。您還可以嘗試添加'print'語句,以便知道事情按照預期發生的事情。 –

+0

你可以使用'getValidMoves','makeMove'等函數來製作[MCVE](http://stackoverflow.com/help/mcve)嗎? – Nuageux

回答

2

你的循環繼續只要who不等於「電腦」。但循環內部沒有任何變化who,所以它會從來沒有等於「電腦」,循環將永遠不會完成。

+0

啊對,我可以添加一些東西,如果誰== 1:who2 = 2 elif誰== 2:who2 = 1? – user7996151