1 回答

TA貢獻1806條經驗 獲得超5個贊
您正在將新的X或O分配給tablero['algo']。如果游戲沒有在這里結束,您可以將 的內容分配tablero給ari、等,但僅在下arc一個循環開始時才分配。
因此,如果游戲在該移動之后結束,您將打印舊的ari、arc等,這些尚未更新以反映最新的移動。
當然,還有許多其他問題需要修復(可以避免大量重復),但游戲確實可以正常運行。
一些建議:
我會使用一個簡單的列表來處理董事會。tablero = [" "] * 9創建一個包含九個空格字符的列表。這允許很多簡化。例如,要打印電路板,您可以簡單地執行以下操作
print('|{6}|{7}|{8}|\n- - - -\n|{3}|{4}|{5}|\n- - - -\n|{0}|{1}|{2}|'.format(*tablero))
請注意,列表的第一個元素由 索引0,因此我們需要考慮到這一點。
完成此操作后,您可以創建另一個列表來處理快捷方式:
casillas = ["abi", "abc", "abd", "cei", "cec", "ced", "ari", "arc", "ard"]
現在處理輸入要容易得多,因為您可以重用相同的代碼而不是大量if/elif語句:
jugada = input('?Donde queres poner la {}?: '.format(player)) # input() already returns a str
try: # let's see if player entered a whole number
casilla = int(jugada) - 1 # remember, field 1 is numbered internally as 0
except ValueError: # apparently not
try: # let's see if player entered a valid shortcut
casilla = casillas.index(jugada)
except ValueError: # apparently not
casilla = 9 # let's choose an invalid value, we'll detect that later
現在我們在 中有一個數字casilla,讓我們看看它是否在范圍內,如果是的話,讓我們填充棋盤(如果可以的話):
if 0 <= casilla <= 8:
if tablero[casilla] == ' ':
tablero[casilla] = player
else:
print('Este posición ya fue ocupada, por favor elegi otra')
continue
else:
print('Jugada invalida, por favor realice una jugada valida')
continue
獲勝條件也可以簡化:
if tablero[0] == tablero[1] == tablero[2] != " " or \
tablero[3] == tablero[4] == tablero[4] != " " or \
tablero[6] == tablero[7] == tablero[8] != " " or \
... etc. ...:
juego_terminado = True
通過理解,這可以進一步縮短:
if any(tablero[i] == tablero[j] == tablero[k] != " "
for i,j,k in ((0,1,2), (3,4,5), (6,7,8), (0,3,6), (1,4,7), (2,5,8), (0,4,8), (2,4,6))):
juego_terminado = True
我還沒有實際測試過,所以如果您遇到問題,請告訴我。
- 1 回答
- 0 關注
- 160 瀏覽
添加回答
舉報