2016-02-28 66 views
0

我想創建一個連接四個遊戲,但我無法弄清楚如何在棋盤上打印跳棋。我需要它在用戶輸入的列中最低的可用點處打印X.每次我運行這個程序,我都會得到同樣的空白6乘7板。請幫忙。謝謝!Python連接4遊戲 - 在板上打印X

#ConnectFour 

numRows=6 
numCols=7 
numPlayers=2 
board=[] 
checkers=['X','O'] 
turn=0 
win = False 

for row in range(numRows): 
    tempList=[] 
    for col in range(numCols): 
      tempList.append('.') 
    board.append(tempList) 

while not win: 
    turn = (turn+1)%numPlayers 

    userCol = input ("Player"+str(turn+1)+"please enter your col: ") 
    while not userCol.isdigit() or not int(userCol) in range(numCols): 
     userCol = input ("Player"+str(turn+1)+"please enter your col: ") 

    for row in range(numRows): 
     for col in range(numCols): 
      print(board[row][col], end='') 
     print() 

    for repeat in range(numRows-2): 
     for row in range(numRows,-1,-1): 
      for col in range(numCols): 
       if board[row][int(userCol)]==".": 
        board[row+1][int(userCol)]="X" 
        print 
      break 


#print board 
for row in range(numRows): 
    for col in range(numCols): 
      print(board[row+1][userCol],end=' ') 
    print() 

print ("Player", checkers[turn],"has won the game.") 

回答

0

這是我注意到:

  • 行24-27:這將打印未修改板玩家滴,檢查後;也許這應該是第29-35行之後呢?
  • 第30行:看起來像是一個錯誤的錯誤,您可能需要range(numRows - 1, -1, -1)reversed(range(numRows))
  • 29行:爲什麼需要重複空格檢查?
  • 第31行:這是做什麼的?它肯定會迭代每列,但爲什麼這是必要的?你已經知道要求什麼專欄,那麼爲什麼要再次翻閱每一欄呢?
  • 第32-33行:似乎讀爲「如果空格爲空,請將檢查器放置在其下面的插槽中」。我想你可能想board[row][int(userCol)] = 'X'而不是
  • 第41行:看起來像另一個錯過的錯誤,row+1應該是row。另外,應該userCol只是col?否則,它只會打印一列而不是整個最終的紙板。

總論:

一般來說,你可以通過避免for i in range(x): do_something(mylist[i])反模式,而是使用Python風格的迭代實現更加簡潔易讀的Python代碼:for item in mylist: do_something(item)

我會重寫第29-35行。但在你這樣做之前,問問你自己到底應該做些什麼。如果我正確理解任務,那麼您應該只需要一個for循環。忍者編輯:另外,一旦工作,請不要忘記處理玩家輸入有效列號的情況,但該列已完全填滿,在這種情況下,您可能需要詢問相同的玩家選擇一個新的列。