视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
使用Python编写一个简单的tic-tac-toe游戏的教程
2020-11-27 14:39:44 责编:小采
文档


这个教程,我们将展示如何用python创建一个井字游戏。 其中我们将使用函数、数组、if条件语句、while循环语句和错误捕获等。

首先我们需要创建两个函数,第一个函数用来显示游戏板:

def print_board():
 for i in range(0,3):
 for j in range(0,3):
 print map[2-i][j],
 if j != 2:
 print "|",
 print ""

这我们使用两个for循环来遍历map,该map是一个包含了位置信息的二维数组。

游戏板看起来是这样的:

| | 
| | 
| |
 
X | X | 
O | X | O
 | O | X
 
X | X | X
X | X | X
X | X | X


下面我们需要一个函数check_done()来检查游戏是否结束。如果结束,则返回True并打印消息。

def check_done():
 for i in range(0,3):
 if map[i][0] == map[i][1] == map[i][2] != " " 
 or map[0][i] == map[1][i] == map[2][i] != " ":
 print turn, "won!!!"
 return True
 
 if map[0][0] == map[1][1] == map[2][2] != " " 
 or map[0][2] == map[1][1] == map[2][0] != " ":
 print turn, "won!!!"
 return True
 
 if " " not in map[0] and " " not in map[1] and " " not in map[2]:
 print "Draw"
 return True
 
 return False

有几个地方需要检查,首先检查水平和垂直方向,是否有一行或一列不为空且包含有三个相同的符号,然后我们再检查斜方向。如果上面有一个方向满足,游戏结束并打印“Won!!!”。请注意检查变量改变,它用来标记当前是哪一位玩家。

同时我们需要检查当前游戏板是否被填满且没有人获胜,游戏平局。

有了上面的两个函数,下面我们创建3个变量:

turn = "X"
map = [[" "," "," "],
 [" "," "," "],
 [" "," "," "]]
done = False

turn : 轮到谁
map : 游戏板
done : 游戏是否结束

现在启动游戏:

while done != True:
 print_board()
 
 print turn, "'s turn"
 print
 
 moved = False
 while moved != True:

这里使用了while循环直到游戏结束并返回true.在这个循环里面,使用了另外一个while循环来检查玩家是否移动,如果玩家没有移动,则程序会跳到下一次循环。

下一步告诉玩家怎么玩:

print "Please select position by typing in a number between 1 and 9, see below for which number that is which position..."
 print "7|8|9"
 print "4|5|6"
 print "1|2|3"
 print
 
try:
 pos = input("Select: ")
 if pos <=9 and pos >=1:

我们期望玩家输入一个数字,检查该数字是否是在1到9之间。另外,我们这里需要一段错误处理逻辑,我们还需要需要检查玩家是否能移动到一个位置:

Y = pos/3
 X = pos%3
 if X != 0:
 X -=1
 else:
 X = 2
 Y -=1

以下是全部的代码:

def print_board():
 for i in range(0,3):
 for j in range(0,3):
 print map[2-i][j],
 if j != 2:
 print "|",
 print ""
 
 
def check_done():
 for i in range(0,3):
 if map[i][0] == map[i][1] == map[i][2] != " " 
 or map[0][i] == map[1][i] == map[2][i] != " ":
 print turn, "won!!!"
 return True
 
 if map[0][0] == map[1][1] == map[2][2] != " " 
 or map[0][2] == map[1][1] == map[2][0] != " ":
 print turn, "won!!!"
 return True
 
 if " " not in map[0] and " " not in map[1] and " " not in map[2]:
 print "Draw"
 return True
 
 
 return False
 
 
 
 
 
turn = "X"
map = [[" "," "," "],
 [" "," "," "],
 [" "," "," "]]
done = False
 
 
while done != True:
 print_board()
 
 print turn, "'s turn"
 print
 
 moved = False
 while moved != True:
 print "Please select position by typing in a number between 1 and 9,
 see below for which number that is which position..."
 print "7|8|9"
 print "4|5|6"
 print "1|2|3"
 print
 
 try:
 pos = input("Select: ")
 if pos <=9 and pos >=1:
 Y = pos/3
 X = pos%3
 if X != 0:
 X -=1
 else:
 X = 2
 Y -=1
 
 if map[Y][X] == " ":
 map[Y][X] = turn
 moved = True
 done = check_done()
 
 if done == False:
 if turn == "X":
 turn = "O"
 else:
 turn = "X"
 
 
 except:
 print "You need to add a numeric value"

下载本文
显示全文
专题