我創建一個管理井字棋遊戲,我創建列表簡單的幫助
[['', '', ''],
['', '', ''],
['', '', '']]
列表創建遊戲網的節目,我想程序停止,當它發現像
[['x', 'x', 'x'],
['', '', ''],
[ '', '', '']
在這種情況下,例如一場比賽,我會因此需要能夠說,在其他框中有可能是任何字符,「O」,' x',''
我會那python如果網格是一個獲勝的網格程序必須停止
我創建一個管理井字棋遊戲,我創建列表簡單的幫助
[['', '', ''],
['', '', ''],
['', '', '']]
列表創建遊戲網的節目,我想程序停止,當它發現像
[['x', 'x', 'x'],
['', '', ''],
[ '', '', '']
在這種情況下,例如一場比賽,我會因此需要能夠說,在其他框中有可能是任何字符,「O」,' x',''
我會那python如果網格是一個獲勝的網格程序必須停止
你會做什麼來檢查「手動」?
檢查第一行,如果這三個位置的球員
if b[0][0]==code and b[0][1]==code and b[0][2]==code: return True
檢查第二行
檢查第一列的代碼,如果所有三個是玩家的代碼
if b[0][0]==code and b[1][0]==code and b[2][0]==code: return True
檢查第二和第三列太
的行列數很容易寫一個循環,而不是複製粘貼代碼
還有其他方法可以編寫較短的代碼(使用諸如all(b[i][j] == code for j in range(3))
之類的東西)或更快的代碼(使用諸如比特而不是字符和單個整數的所有東西x
s或o
S)。
另一個「技巧」是將電路板保持在一個單一的陣列而不是一個矩陣,並使用佔位符(例如,「 - 」)爲空方塊
board = ['-', '-', '-',
'-', '-', '-',
'-', '-', '-']
,那麼你可以檢查使用正則表達式
s = "".join(board) # change to a single string
if re.match("xxx......", s) return True # first row check
if re.match("...xxx...", s) return True # second row check
if re.match("......xxx", s) return True # third row check
if re.match("x..x..x..", s) return True # first col check
if re.match(".x..x..x.", s) return True # second col check
if re.match("..x..x..x", s) return True # third col check
我會用做位獲獎罷工:董事會是由兩個數字來表示0 .. 0.511:用於x
馬克是其中一個號碼,另一個用於o
馬克是其中:
# board bits are
#
# 1 2 4
# 8 16 32
# 64 128 256
#
Xs = Os = 0 # empty board
win_codes = [1+2+4, 8+16+32, 64+128+256, # rows
1+8+64, 2+16+128, 4+32+256, # cols
1+16+256, 4+16+64] # diags
def wins(pos):
return any((pos & c) == c for c in win_codes)
鑑於位置的總數目也SM所有(512)獲勝者還可以預先計算和存儲在表
win_pos = [wins(pos) for pos in range(512)]
然後檢查僅僅是
if win_pos[Xs]: ... # player X won the game
如果我正確地解釋了你想說的話,你不需要。 Python不是靜態類型 - 也就是說,任何變量都可以包含任何類型。在靜態類型語言中,您需要聲明(或者爲您推斷)您的遊戲網格類型爲list of list of char
或同等類型。因此,您可以將元素設置在任何位置,以滿足您的需求 - 包括像'o'和'x'這樣的字符。
TL; DR你不需要。
注意:在程序中間無意間更改變量的類型通常被認爲是不好的風格,因爲這會混淆你和其他人。
我不知道怎麼跟蟒蛇,在另一種情況可能是任何符號,遊戲必須停止 – MISTERCEC