2016-02-28 3 views
0

Я пытаюсь создать соединение с четырьмя играми, но я не могу понять, как печатать шашки на доске. Мне нужно, чтобы он напечатал X в самом нижнем доступном месте в столбце, который вводил пользователь. Каждый раз, когда я запускаю программу, я получаю ту же самую пустую плату 6 на 7. Пожалуйста помоги. Спасибо!Python Connect 4 Game- Print X on Board

#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]) антишаблоном и вместо того, чтобы с помощью питона стиль итерации: for item in mylist: do_something(item).

Я бы переписал строки 29-35. Но прежде чем вы это сделаете, спросите себя, что именно должны делать эти строки. Если я правильно понимаю задачу, вам нужен только один цикл for.

Ninja edit: Кроме того, как только это работает, не забудьте обработать случай, когда игрок ввел действительный номер столбца, но этот столбец полностью заполнен, и в этом случае вы, вероятно, захотите спросить тот же игрок выбрать новый столбец.