用 Python 对计算机编程 Tictactoe
让我们通过一个有趣的游戏来学习 python 编程概念。
会发生什么?
请阅读我之前关于 Python 中的 Hangman 游戏的博客 这里 .
现在是时候尝试另一个更复杂的游戏程序,并进一步挑战您的 Python 技能。
我将用这段代码探索一些关键点 -
- 单独或作为模块执行脚本
- Python 类、方法和变量
- 使用 Python “set” 数据类型来执行列表之间的比较
- 从列表中选择一个随机元素
- 迭代——For、While 循环
- 三元条件
井字游戏是什么?
您已经知道如何玩井字游戏。
它由两个玩家玩。将有一个由 9 (3x3) 个正方形组成的网格。两名玩家将依次在其中一个方格中放置“X”或“O”符号。
谁在一条线上做出三个符号的序列,谁就赢得了比赛。
让我们计划一下工作
您将创建一个由人类玩家对抗计算机的游戏。
在开始设计和编码之前,让我们清楚地了解需求。
涉及用户交互
- 用户应该能够在“X”和“O”之间选择偏好符号。
- 应清楚地显示板,说明符号的放置位置和空白方块。
- 用户应该能够指示放置符号的位置。
- 计算机应该能够阻止用户获胜。
- 计算机应该能够检测并放置获胜的棋子。
- 游戏结束后,应显示一条明确的消息,说明谁赢了。
- 在任何时候,用户都应该能够放弃游戏。
涉及支持用户交互的重要处理
- 保持棋盘状态——位置编号和位置符号。
- 保持玩家和计算机的状态——选择的符号、填充的位置和下一个获胜动作。
- 处理用户输入——验证错误输入,接受并处理有效输入。
- 检查玩家是否做出了获胜的举动。
- 根据可用的位置和获胜/阻止机会来决定计算机的下一步动作。
- 再次检查计算机是否做出了获胜的举动。
- 每次使用退出键检查用户是否结束或放弃比赛。
高层次的设计思维
现在您可以计划所需的方法和属性。
- 在里面() — 这是 python 构造函数。您将为在比赛开始前所需的类变量设置初始值,例如网格位置和获胜顺序。
- get_symbol_at_place() — 此方法将位置编号作为输入并提供该位置的符号。
- set_symbol_at_place() — 此方法将使用位置编号和符号作为输入。它会将符号设置在该位置。它将使用新位置更新玩家的位置列表。
- 画板() — 每当需要打印当前板时,都会调用此方法。它只会打印电路板而无需任何处理。
- check_for_winning_places() ——这个方法很重要。它将包括用于计算可能获胜位置的中央逻辑。用一个小例子来解释一下,在下图中,如果位置 1 和 5 已经被“X”填充,则此方法将记录 9 作为“X”的获胜位置。
1 | 2 | 3
— — —
4 | 5 | 6
— — —
7 | 8 | 9
正如您所理解的,此方法将利用当前棋盘位置作为符号,并根据预定义的获胜顺序列表检查 - 以查找具有相同符号的两个位置旁边的空位置。 - 选择下一个放置() — 此方法将放置计算机的符号。它将读取获胜位置并按以下优先顺序采取行动 -
— 为电脑选择一个获胜位置(如果有)
- 为玩家选择一个获胜位置(如果有),阻止玩家获胜
— 如果没有获胜位置,则随机选择一个空白位置 - check_winner() — 此方法将通过根据预定义的获胜序列列表检查玩家和计算机的填充位置编号来检查是否有获胜者。如果没有获胜者,它将检测比赛是否平局,否则继续。
- play_tictactoe() — 由于代码可以从包中调用或独立调用,因此您需要一个方法来启动游戏
— 提示用户在“X”和“O”之间选择一个符号(或“Z”退出)
— 运行一个循环,直到给出有效输入
— 一旦选择了一个符号,它将通过调用 draw_board() 打印初始板。
— 提示用户为可用位置选择位置编号。
— 运行循环,直到给出有效输入。
— 将玩家的符号设置到所选位置。通过调用 check_winner() 检查玩家是否获胜。
— 通过调用 check_for_winning_places() 检查板上可能的获胜位置
— 通过调用 choose_next_placement() 放置计算机的符号。再次,通过调用 check_winner() 检查计算机是否获胜。
— 在出现获胜者或比赛平局之前,系统将提示用户循环输入。
— 当比赛结束或用户选择退出时退出循环。
让我们编码
如您所知,主要方法及其用途,现在让我们开始吧。
您可以按照代码片段中的注释和文档字符串进行操作。
导入和类定义
属性
在里面()
关键 -
— 多维列表发起
— 使用列表理解(在注释部分)
— 使用 range() 函数初始化列表
get_symbol_at_place()
关键点 -
— 嵌套 for 循环
set_symbol_at_place()
关键点 -
— 嵌套 for 循环
— list.append() 函数
— 三元条件
画板()
check_for_winning_places()
关键点 -
— list.clear() 函数
— 使用“集合”数据类型来检测重叠,并在集合之间进行减法运算。
选择下一个放置()
关键点 -
— 从列表中选择随机元素
— 在集合中使用减法运算
check_winner()
关键点 -
— 检查集合之间的完整子集
play_tictactoe()
关键点 -
— 接受用户输入并检查 isnumeric() 函数
— 清除屏幕的操作系统功能
— While 循环
开始/调用游戏
这是在模块(“tictactoe.py”文件)中编写的,但在类之外。
注意检查“if name == 'main':”。这是为了让模块仅在“python tictactoe.py”命令直接运行时才执行。
如果你想为游戏制作一个包,上面的代码将进入包中的“main.py”文件。
这就是所有的编码。现在是时候玩了!
运行游戏
“python tictactoe.py”之后的第一个屏幕 -
用户选择符号后的空白板 -
经过几次位置编号的选择 -
玩家打败电脑后:) -
编码快乐!!
下载
GitHub—— https://github.com/SaurabhGhosh/tictactoe.git
结论
在此博客中,我希望您对以下内容有更多了解-
- 单独或作为模块执行脚本
- Python 类、方法和变量
- 使用 Python “set” 数据类型来执行列表之间的比较
- 从列表中选择一个随机元素
- 迭代——For、While 循环
- 三元条件
在我的下一篇博客中,我将探索另一个程序并了解更多概念。
如果您对此计划有任何疑问,请随时发表您的意见。
请点赞、评论和关注我!保持学习!
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明
本文链接:https://www.qanswer.top/37520/09441810
标签:位置,符号,Python,编程,玩家,Tictactoe,列表,获胜 From: https://www.cnblogs.com/amboke/p/16704289.html