在 Python 初学者中创建井字游戏
我们都有和朋友一起玩井字游戏的有趣回忆,不是吗?这是在任何地方玩的最有趣和最有趣的游戏,您只需要一支笔和一张纸。只需应用一些核心概念,我们就可以使用 python 编程创建这样的井字游戏。我们将像传统方法一样创建一个 3x3 网格。然后我们将要求用户在任何网格上放置“X”,并通过在其余位置放置“O”来做出相应的回应。此外,我们将尝试在程序中输入“O”来创建垂直线、水平线或对角线,因为先做到这一点的人将赢得游戏并显示消息。这里我们将使用的python概念是用户定义的函数、条件语句、循环、列表、变量、范围等。
Tic-Tac-Toe 的 python 代码如下所示:
板= ['' **为了** X **在** 范围( **10** )]
**定义** **插入信** (字母,位置):
board[pos] = 字母
**定义** **空间是免费的** (位置):
**返回** 板[位置] == ''
**定义** **印刷板** (木板):
**打印** ('||')
**打印** (' ' + 板子[ **1** ] + ' | ' + 板[ **2** ] + ' | ' + 板[ **3** ])
**打印** ('||')
**打印** ('------------')
**打印** ('||')
**打印** (' ' + 板子[ **4** ] + ' | ' + 板[ **5** ] + ' | ' + 板[ **6** ])
**打印** ('||')
**打印** ('------------')
**打印** ('||')
**打印** (' ' + 板子[ **7** ] + ' | ' + 板[ **8** ] + ' | ' + 板[ **9** ])
**打印** ('||')
**定义** **isBoardFull** (木板):
**如果** board.count(' ') > **1** :
**返回** 错误的
**别的** :
**返回** 真的
**定义** **是赢家** (b,l):
**返回** (((乙[ **1** ] == l **和** 乙[ **2** ] == l **和** 乙[ **3** ] == l) **或者**
(乙[ **4** ] == l **和** 乙[ **5** ] == l **和** 乙[ **6** ] == l) **或者**
(乙[ **7** ] == l **和** 乙[ **8** ] == l **和** 乙[ **9** ] == l) **或者**
(乙[ **1** ] == l **和** 乙[ **4** ] == l **和** 乙[ **7** ] == l) **或者**
(乙[ **2** ] == l **和** 乙[ **5** ] == l **和** 乙[ **8** ] == l) **或者**
(乙[ **3** ] == l **和** 乙[ **6** ] == l **和** 乙[ **9** ] == l) **或者**
(乙[ **1** ] == l **和** 乙[ **5** ] == l **和** 乙[ **9** ] == l) **或者**
(乙[ **3** ] == l **和** 乙[ **5** ] == l **和** 乙[ **7** ] == l))
**定义** **玩家移动** ():
运行=真
**尽管** 跑:
move = input("请在 1 到 9 之间选择输入 X 的位置")
**尝试** :
移动 = int(移动)
**如果** 移动 > **0** **和** 移动 **10** :
**如果** 空间自由(移动):
运行 = 假
insertLetter('X' , 移动)
**别的** :
**打印** ('对不起,这个空间被占用')
**别的** :
**打印** ('请输入一个介于 1 和 9 之间的数字')
**除了** :
**打印** ('请输入一个数字')
**定义** **电脑移动** ():
可能的移动 = [x **为了** x , 字母 **在** 枚举(板) **如果** 字母 == ' ' **和** x != **0** ]
移动 = **0**
**为了** 让 **在** ['O','X']:
**为了** 一世 **在** 可能的动作:
boardcopy = board[:]
boardcopy[i] = 让
**如果** IsWinner(boardcopy, let):
移动 = 我
**返回** 移动
角落打开 = []
**为了** 一世 **在** 可能的动作:
**如果** 一世 **在** [ **1** , **3** , **7** , **9** ]:
角打开.append(i)
**如果** len(cornersOpen) > **0** :
move = selectRandom(cornersOpen)
**返回** 移动
**如果** **5** **在** 可能的动作:
移动 = **5**
**返回** 移动
边缘打开 = []
**为了** 一世 **在** 可能的动作:
**如果** 一世 **在** [ **2** , **4** , **6** , **8** ]:
edgeOpen.append(i)
**如果** len(edgesOpen) > **0** :
移动 = 选择随机(edgesOpen)
**返回** 移动
**定义** **随机选择** (李):
**进口** **随机的**
ln = len(li)
r = 随机.randrange( **0** ,ln)
**返回** 李[r]
**定义** **主要的** ():
**打印** (“欢迎来到游戏!”)
印刷板(板)
**尽管** **不是** (isBoardFull(板)):
**如果** **不是** (IsWinner(板,'O')):
播放器移动()
印刷板(板)
**别的** :
**打印** (“对不起,你松了!”)
**休息**
**如果** **不是** (IsWinner(板,'X')):
移动 = 计算机移动()
**如果** 移动== **0** :
**打印** ("")
**别的** :
insertLetter('O' , 移动)
**打印** ('计算机放置了一个 o 位置' , move , ':')
印刷板(板)
**别的** :
**打印** (“你赢了!”)
**休息**
**如果** isBoardFull(板):
**打印** (“平局”)
**尽管** 真的:
x = input("你想再玩一次吗?(y/n)")
**如果** x.lower() == 'y':
板= ['' **为了** X **在** 范围( **10** )]
**打印** ('--------------------')
主要的()
**别的** :
**休息**
上述代码的输出是:
o 你想再玩一次吗? (y/n)y
— — — — — — — — — —
欢迎来到游戏!
| |
| |
| |
— — — — — —
| |
| |
| |
— — — — — —
| |
| |
| |
请选择一个位置输入 1 到 9 之间的 X 1
| |
X | |
| |
— — — — — —
| |
| |
| |
— — — — — —
| |
| |
| |
计算机在位置 9 上放置了一个 o:
| |
X | |
| |
— — — — — —
| |
| |
| |
— — — — — —
| |
| | ○
| |
请选择一个位置输入 1 到 9 之间的 X 3
| |
X | | X
| |
— — — — — —
| |
| |
| |
— — — — — —
| |
| | ○
| |
计算机在位置 2 上放置了一个 o:
| |
X | ○ | X
| |
— — — — — —
| |
| |
| |
— — — — — —
| |
| | ○
| |
请选择一个位置以输入 1 到 9 之间的 X 4
| |
X | ○ | X
| |
— — — — — —
| |
X | |
| |
— — — — — —
| |
| | ○
| |
计算机在位置 7 上放置了一个 o:
| |
X | ○ | X
| |
— — — — — —
| |
X | |
| |
— — — — — —
| |
该| | ○
| |
请选择一个位置输入 1 到 9 之间的 X 5
| |
X | ○ | X
| |
— — — — — —
| |
X | X |
| |
— — — — — —
| |
该| | ○
| |
计算机在位置 8 上放置了一个 o:
| |
X | ○ | X
| |
— — — — — —
| |
X | X |
| |
— — — — — —
| |
该|该| ○
| |
对不起,你松了!
谢谢阅读
查看我的其他文章
在 Python 中创建石头剪刀布: https://codersland.medium.com/create-rock-paper-scissors-in-python-c331fe074bbe
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明
本文链接:https://www.qanswer.top/39270/42492512
标签:返回,位置,定义,Python,井字,打印,初学者,移动,游戏 From: https://www.cnblogs.com/amboke/p/16727658.html