首页 > 编程语言 >用 Python 对计算机编程 Tictactoe

用 Python 对计算机编程 Tictactoe

时间:2022-09-18 10:25:53浏览次数:113  
标签:位置 符号 Python 编程 玩家 Tictactoe 列表 获胜

用 Python 对计算机编程 Tictactoe

让我们通过一个有趣的游戏来学习 python 编程概念。

Photo by 马修戴维斯 on 不飞溅

会发生什么?

请阅读我之前关于 Python 中的 Hangman 游戏的博客 这里 .

现在是时候尝试另一个更复杂的游戏程序,并进一步挑战您的 Python 技能。

我将用这段代码探索一些关键点 -

  1. 单独或作为模块执行脚本
  2. Python 类、方法和变量
  3. 使用 Python “set” 数据类型来执行列表之间的比较
  4. 从列表中选择一个随机元素
  5. 迭代——For、While 循环
  6. 三元条件

井字游戏是什么?

您已经知道如何玩井字游戏。

它由两个玩家玩。将有一个由 9 (3x3) 个正方形组成的网格。两名玩家将依次在其中一个方格中放置“X”或“O”符号。

谁在一条线上做出三个符号的序列,谁就赢得了比赛。

让我们计划一下工作

您将创建一个由人类玩家对抗计算机的游戏。

在开始设计和编码之前,让我们清楚地了解需求。

涉及用户交互

  1. 用户应该能够在“X”和“O”之间选择偏好符号。
  2. 应清楚地显示板,说明符号的放置位置和空白方块。
  3. 用户应该能够指示放置符号的位置。
  4. 计算机应该能够阻止用户获胜。
  5. 计算机应该能够检测并放置获胜的棋子。
  6. 游戏结束后,应显示一条明确的消息,说明谁赢了。
  7. 在任何时候,用户都应该能够放弃游戏。

涉及支持用户交互的重要处理

  1. 保持棋盘状态——位置编号和位置符号。
  2. 保持玩家和计算机的状态——选择的符号、填充的位置和下一个获胜动作。
  3. 处理用户输入——验证错误输入,接受并处理有效输入。
  4. 检查玩家是否做出了获胜的举动。
  5. 根据可用的位置和获胜/阻止机会来决定计算机的下一步动作。
  6. 再次检查计算机是否做出了获胜的举动。
  7. 每次使用退出键检查用户是否结束或放弃比赛。

高层次的设计思维

现在您可以计划所需的方法和属性。

  1. 在里面() — 这是 python 构造函数。您将为在比赛开始前所需的类变量设置初始值,例如网格位置和获胜顺序。
  2. get_symbol_at_place() — 此方法将位置编号作为输入并提供该位置的符号。
  3. set_symbol_at_place() — 此方法将使用位置编号和符号作为输入。它会将符号设置在该位置。它将使用新位置更新玩家的位置列表。
  4. 画板() — 每当需要打印当前板时,都会调用此方法。它只会打印电路板而无需任何处理。
  5. check_for_winning_places() ——这个方法很重要。它将包括用于计算可能获胜位置的中央逻辑。用一个小例子来解释一下,在下图中,如果位置 1 和 5 已经被“X”填充,则此方法将记录 9 作为“X”的获胜位置。
    1 | 2 | 3
    — — —
    4 | 5 | 6
    — — —
    7 | 8 | 9
    正如您所理解的,此方法将利用当前棋盘位置作为符号,并根据预定义的获胜顺序列表检查 - 以查找具有相同符号的两个位置旁边的空位置。
  6. 选择下一个放置() — 此方法将放置计算机的符号。它将读取获胜位置并按以下优先顺序采取行动 -
    — 为电脑选择一个获胜位置(如果有)
    - 为玩家选择一个获胜位置(如果有),阻止玩家获胜
    — 如果没有获胜位置,则随机选择一个空白位置
  7. check_winner() — 此方法将通过根据预定义的获胜序列列表检查玩家和计算机的填充位置编号来检查是否有获胜者。如果没有获胜者,它将检测比赛是否平局,否则继续。
  8. 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

结论

在此博客中,我希望您对以下内容有更多了解-

  1. 单独或作为模块执行脚本
  2. Python 类、方法和变量
  3. 使用 Python “set” 数据类型来执行列表之间的比较
  4. 从列表中选择一个随机元素
  5. 迭代——For、While 循环
  6. 三元条件

在我的下一篇博客中,我将探索另一个程序并了解更多概念。

如果您对此计划有任何疑问,请随时发表您的意见。

请点赞、评论和关注我!保持学习!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明

本文链接:https://www.qanswer.top/37520/09441810

标签:位置,符号,Python,编程,玩家,Tictactoe,列表,获胜
From: https://www.cnblogs.com/amboke/p/16704289.html

相关文章

  • 面向对象编程 (OOP):您需要知道的一切
    面向对象编程(OOP):您需要知道的一切面向对象编程(OOP),编程中最有趣的话题之一,它有很多优势程序化编程。我们还将讨论OOP中的一些重要方法,它们是封装、继承、多态、抽......
  • 《UNIX环境高级编程》系统函数open read write lseek stat等
    linux下文件权限设置中的数字表示:https://blog.csdn.net/u013063153/article/details/53113979chmodABCfile其中A、B、C各为一个数字,分别表示User、Group、及Other......
  • 可编程 USB 转串口适配器开发板如何使用S2STool工具
    河北稳控科技可编程USB转串口适配器开发板如何使用S2STool工具可编程USB转UART/I2C/SMBusS/SPI/CAN/1-Wire适配器USB2S专用工具S2STool介绍S2STool是为S2S......
  • python常用魔术方法 (repr str call)
    repr和str的区别https://blog.csdn.net/LIFENG0402/article/details/121567390 classPeople:#类名Person后面加不加(Object)效果是一样的,都表示继承自Object类......
  • 如何在基础镜像中安装指定python版本
    背景由于规范要求要使用指定的镜像版本,但是由于该镜像中的python与我使用的版本有差异,怕引起一些不必要的兼容问题,所以我需要自己按基础镜像基础上安装对应版本的python。......
  • 安全巡检 python HTML报告
    1.报表模板[root@yinliao-yanshireport_jinja2]#catxunjian_table.html<html><head><metahttp-equiv="Content-Type"content="text/html;charset=utf-8"><titl......
  • python调用第三方接口
    为什么要用python调用第三方接口?以往总是会想当然的认为,调用第三方接口只能是前端的工作,但最近在做一个程序时发现,这项工作完全可以使用python来解决,挺惊喜的,毕竟这样就可......
  • python re包 正则表达式
    Python正则表达式正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。在python中提供了一个使用正则的模块re。re模块使Python语言......
  • 【Python小工具】文件解压
    文件解压#-*-coding:utf-8-*-importosimportsysimporttimeimportshutilimportfiletypeimportgzipimporttarfileimportzipfileclassFileUtils:......
  • ARM仿真下载调试器 SWD编程器 Jlink OB下载器 超STLINK 代替V8
    传统JLINK体积大、引脚多,而且我们用的非官方版本,经常掉固件,诸多问题一直困扰着我,经过一番折腾,终于找到了正解:jlinkob,一个只有三条线的调试器,除了不能检测目标板电压(也没啥......