我正試圖解決基於岩石剪刀的編程挑戰。我的目標是給出一個遊戲移動列表,確定遊戲贏得了什麼舉動。我的問題是檢查遊戲是否獲勝。我有獲勝組合的列表,比方說遊戲電網:如何用數組值列表檢查數組?
1, 2, 3,
4, 5, 6,
6, 7, 8,
然後一個成功的組合將是例如:4, 5, 6
,因爲它是3連勝。
我的問題是我不知道如何有效地檢查所有這些獲獎組合。我嘗試製作一個獲勝組合列表,然後通過遊戲板來檢查獲勝者,這將是非常棒的,只有它不起作用,我不知道如何合理地處理它。
這裏是我的代碼:
def is_winner(grid):
player1_wins = ['X','X','X']
player2_wins = ['O','O','O']
player_win = [player1_wins, player2_wins]
win1 = [0,3,6] #[1,4,7]
win2 = [1,4,7] #[2,5,8]
win3 = [2,5,8] #[3,6,9]
win4 = [0,4,8] #[1,5,9]
win5 = [6,7,8] #[7,8,9]
win6 = [3,4,5] #[4,5,6]
win7 = [0,1,2] #[1,2,3]
win8 = [6,7,8] #[7,8,9]
winning_grids = [win1, win2, win3, win4, win5, win6, win7, win8]
if any(grid[winning_grids]) == any(player_win): # !!!! Broken code here !!!!
return True # Game won
else:
return False
def tic_tac_toe(games):
for game in range(games):
grid = ['1','2','3',
'4','5','6',
'7','8','9']
moves = [int(x) for x in raw_input().split()]
turn = 1
for move in moves:
if turn % 2 != 0:
grid[move-1] = 'X'
elif turn % 2 == 0:
grid[move-1] = 'O'
if is_winner(grid):
print("Game over on turn %d" % turn)
print(grid)
tic_tac_toe(input())
樣品輸入如下所示:
3
7 5 4 1 9 2 8 3 6
5 1 3 7 6 4 2 9 8
5 1 2 8 6 4 7 3 9
如果是3場比賽,球員1先行和玩家2是在每個字符串中的下一個號碼。
答案是:第1場 - 移動7.第2場 - 移動第6場,第3場 - 領帶。 (尚未實施)
我能做些什麼來檢查獲勝的舉動/有沒有人對如何解決我的代碼有任何建議?