2013-10-15 35 views
1

我想弄清楚一個for循環以及if語句是否會在python中檢查一個tic tac toe遊戲的獲勝者。我需要這個,因爲我有一個連接4遊戲,我打算使用相同的僞代碼。在Python上的井字棋

這是我到目前爲止有:

col_size = 3 
     row_size = 3 
     ttt = list() 
     for n in range(col_size): 
      rows = input(msg[n]+ ":") 
      ttt.append(rows) 
     print(ttt) 
     row_ttt= list() 
     for i in range(row_size): 
      one_row = list() 
      for j in range(col_size): 
       one_row+= ttt[i][j] 
      row_ttt.append(one_row) 
     diagonal_ttt= list() 
     for j in range(col_size): 
      one_diagonal= "" 
      for i in range(row_size): 
       one_diagonal+= ttt[i][j+1:2] 
      diagonal_ttt.append(one_diagonal) 
     print(row_ttt) 
     valid_symbols = ['x','X','o','O','.'] 

      for j in range(col_size): 
       for i in range(row_size): 
        if row_ttt[i][j]== row_ttt[i:i+1][j] == row_ttt[i:i+2][j]: 
         #print(row_ttt[i][j]) to check the element 
         #print(row_ttt[i:i+1][j]) to check element 
         #print(row_ttt[i:i+2][j]) to check element 
         valid = True 
       print("valid board - " + ttt[i][j] + " is the winner") 
       break 

我把它寫出來的手工這裏,但我希望有一個更短的代碼:

  if ttt[0][0] == ttt[1][1] == ttt[2][2]: 
       print("valid board " + ttt[0][0] + " is the winner") 
       break 
      if ttt[0][2] == ttt[1][1] == ttt[2][0]: 
       print("valid board " + ttt[2][0] + " is the winner") 
       break 
      if ttt[0][0] == ttt[0][1] == ttt[0][2]: 
       print("valid board " + ttt[0][0] + " is the winner") 
       break 
      if ttt[1][0] == ttt[1][1] == ttt[1][2]: 
       print("valid board " + ttt[0][0] + " is the winner") 
       break 
      if ttt[2][0] == ttt[2][1] == ttt[2][2]: 
       print("valid board " + ttt[0][0] + " is the winner") 
       break 
      if ttt[0][0] == ttt[1][1] == ttt[2][2]: 
       print("valid board " + ttt[0][0] + " is the winner") 
       break 
      if ttt[0][0] == ttt[1][0] == ttt[2][0]: 
       print("valid board " + ttt[0][0] + " is the winner") 
       break 
      if ttt[0][1] == ttt[1][1] == ttt[2][1]: 
       print("valid board " + ttt[0][1] + " is the winner") 
       break 
      if ttt[0][2] == ttt[1][2] == ttt[2][2]: 
       print("valid board " + ttt[0][2] + " is the winner") 
       break 

回答

1

這是我想出了一個抽動的解決方案-tac-toe我最近做的遊戲。改編爲你:

win = False 
rowsBoard = ttt 

colsBoard = [[board[i][j] for i in range(3)] for j in range(3)] 
diagsBoard = [[board[i][i] for i in range(3)],[board[i][2-i] for i in range(3)]] 
boards = [rowsBoard, colsBoard, diagsBoard] 

for board in boards: 
    for row in b: 
     if row[0] == row[1] == row[2] != "": 
      print("valid board "+ row[0] + " is the winner") 
      win = True 

if "" not in rowsBoard[0] and "" not in rowsBoard[1] and "" not in rowsBoard[2] and not win: 
    print("game is a draw!") 
+0

我得到這個消息時,我測試了: 如果行[0] ==行[1] ==行[2] =無: ^ TabError:不一致地使用縮進中的製表符和空格 – user300

+0

那麼這似乎是一個直接的錯誤來解決。 在vim中,你可以用:%> |%< – aestrivex

+0

更新 - 取決於你用什麼來表示棋盤上沒有棋子。我認爲這只是「」?現在試試我的代碼... – mbdavis

1
>>> import numpy 
>>> game_board = [[0,0,0],[0,1,2],[1,2,1]] 
>>> #let 1 be X's and 2 be O's .... 0 is empty 
>>> def check_win(board,player): 
...  b= numpy.array(board) 
...  x= b == player 
...  return numpy.hstack([x.all(0),x.all(1),numpy.diag(x).all(),numpy.diag(x[:,::-1]).all()]).any() 
... 
>>> print check_win(game_board,1) #check for X win 
>>> print check_win(game_board,2) # check for O win 
+0

反正我可以使用for循環和if語句來檢查它們? @Joran Beasley – user300