简单的帮助

我创建一个管理井字棋游戏,我创建列表简单的帮助

[['', '', ''], 

['', '', ''],

['', '', '']]

列表创建游戏网的节目,我想程序停止,当它发现像

[['x', 'x', 'x'], 

['', '', ''],

[ '', '', '']

在这种情况下,例如一场比赛,我会因此需要能够说,在其他框中有可能是任何字符,“O”,' x',''

我会那python如果网格是一个获胜的网格程序必须停止

回答:

你会做什么来检查“手动”?

  1. 检查第一行,如果这三个位置的球员

    if b[0][0]==code and b[0][1]==code and b[0][2]==code: return True

  2. 检查第二行

  3. 检查第三排
  4. 检查第一列的代码,如果所有三个是玩家的代码

    if b[0][0]==code and b[1][0]==code and b[2][0]==code: return True

  5. 检查第二和第三列太

  6. 检查第一和第二倾斜太

的行列数很容易写一个循环,而不是复制粘贴代码

还有其他方法可以编写较短的代码(使用诸如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

回到顶部