使用Python编写一个简单的tic-tac-toe游戏的教程
这个教程,我们将展示如何用python创建一个井字游戏。其中我们将使用函数、数组、if条件语句、while循环语句和错误捕获等。
首先我们需要创建两个函数,第一个函数用来显示游戏板:
defprint_board(): foriinrange(0,3): forjinrange(0,3): printmap[2-i][j], ifj!=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并打印消息。
defcheck_done(): foriinrange(0,3): ifmap[i][0]==map[i][1]==map[i][2]!=""\ ormap[0][i]==map[1][i]==map[2][i]!="": printturn,"won!!!" returnTrue ifmap[0][0]==map[1][1]==map[2][2]!=""\ ormap[0][2]==map[1][1]==map[2][0]!="": printturn,"won!!!" returnTrue if""notinmap[0]and""notinmap[1]and""notinmap[2]: print"Draw" returnTrue returnFalse
有几个地方需要检查,首先检查水平和垂直方向,是否有一行或一列不为空且包含有三个相同的符号,然后我们再检查斜方向。如果上面有一个方向满足,游戏结束并打印“Won!!!”。请注意检查变量改变,它用来标记当前是哪一位玩家。
同时我们需要检查当前游戏板是否被填满且没有人获胜,游戏平局。
有了上面的两个函数,下面我们创建3个变量:
turn="X" map=[["","",""], ["","",""], ["","",""]] done=False
turn:轮到谁
map:游戏板
done:游戏是否结束
现在启动游戏:
whiledone!=True: print_board() printturn,"'sturn" print moved=False whilemoved!=True:
这里使用了while循环直到游戏结束并返回true.在这个循环里面,使用了另外一个while循环来检查玩家是否移动,如果玩家没有移动,则程序会跳到下一次循环。
下一步告诉玩家怎么玩:
print"Pleaseselectpositionbytypinginanumberbetween1and9,seebelowforwhichnumberthatiswhichposition..." print"7|8|9" print"4|5|6" print"1|2|3" print try: pos=input("Select:") ifpos<=9andpos>=1:
我们期望玩家输入一个数字,检查该数字是否是在1到9之间。另外,我们这里需要一段错误处理逻辑,我们还需要需要检查玩家是否能移动到一个位置:
Y=pos/3 X=pos%3 ifX!=0: X-=1 else: X=2 Y-=1
以下是全部的代码:
defprint_board(): foriinrange(0,3): forjinrange(0,3): printmap[2-i][j], ifj!=2: print"|", print"" defcheck_done(): foriinrange(0,3): ifmap[i][0]==map[i][1]==map[i][2]!=""\ ormap[0][i]==map[1][i]==map[2][i]!="": printturn,"won!!!" returnTrue ifmap[0][0]==map[1][1]==map[2][2]!=""\ ormap[0][2]==map[1][1]==map[2][0]!="": printturn,"won!!!" returnTrue if""notinmap[0]and""notinmap[1]and""notinmap[2]: print"Draw" returnTrue returnFalse turn="X" map=[["","",""], ["","",""], ["","",""]] done=False whiledone!=True: print_board() printturn,"'sturn" print moved=False whilemoved!=True: print"Pleaseselectpositionbytypinginanumberbetween1and9,\ seebelowforwhichnumberthatiswhichposition..." print"7|8|9" print"4|5|6" print"1|2|3" print try: pos=input("Select:") ifpos<=9andpos>=1: Y=pos/3 X=pos%3 ifX!=0: X-=1 else: X=2 Y-=1 ifmap[Y][X]=="": map[Y][X]=turn moved=True done=check_done() ifdone==False: ifturn=="X": turn="O" else: turn="X" except: print"Youneedtoaddanumericvalue"