简单的帮助
我创建一个管理井字棋游戏,我创建列表简单的帮助
[['', '', ''], ['', '', ''],
['', '', '']]
列表创建游戏网的节目,我想程序停止,当它发现像
[['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你不需要。
注意:在程序中间无意间更改变量的类型通常被认为是不好的风格,因为这会混淆你和其他人。
以上是 简单的帮助 的全部内容, 来源链接: utcz.com/qa/259910.html