井字棋是一个经典的小游戏,在九宫格上玩家轮流画OXO,当每列或每行或是两个对角成一线时便是获胜。

今天就用Python编写一个井字棋小游戏,与电脑对战。

程序执行画面如下图所示:

程序提供了两种人工智能选择,一个是强人工智能另一个是弱人工智能,选择强人工智能,如果计算机先下,玩家可以说是没有赢的可能,因此特地弄出一个弱人工智能选项,一来增加游戏的趣味,一来可以比较这两者在程序设计上的差异。选择弱人工智能,玩家通常可以简单的获胜。

游戏一开始还须得选择O或X,然后会随机选择玩家先下或是计算机先下。

整个程序最主要的核心在于如何决定计算机如何落子,也就是人工智能实现的部分,这部分的程序落在底下程序,function:getComputerMove(self,board) 是实现强人工智能的方法。他有几个判断步骤,首先:

第一步骤:程序代码165~170 ,先判断该次落子"计算机"是否有获胜的可能,用循环寻访所有

可落子地方,若有可获胜的可能则在该地方落子

第二步骤:程序代码172~178 ,先判断该次落子"玩家"是否有获胜的可能,用循环寻访所有

可落子地方,若"玩家"有可获胜的可能则在该地方落子,目的是为了阻止玩家获胜

若上述两个动作都不成立,则接着判断以下步骤落子

第三步骤:程序代码180~183,[1,3,7,9]代表着在九宫格的四个角的编号,此段程序在此四个角落随机选择一地方下子

第四步骤:程序代码185~187,[5]代表着在九宫格的中间位置的编号,此段程序判断中间位置是否可落子

第五步骤:程序代码189~190,[2,4,6,8]代表着在九宫格的四个边的编号,此段程序在此四个边落随机选择一地方下子

透过判断以上五个步骤的落子选择ˊ,可以让计算机无论是先手或是后手都可以处于不败之地。

底下程序,function:getComputerMove_2(self,board) 则是实现弱人工智能的方法,其实也就是改变上述强人工智能的方法,只保留第一步骤规则,其余落子则是随机选择。

另一个重要的程序片段如下266~276,用来判断是否胜出,也就是判断每列或每行或是对角线是否有相同的O或X即可获胜。

这是一个小游戏的范例,或许也称不上人工智能,主要是拿来练习Python程序的应用。

作者:Ashing Tsai

更多精彩文章请关注微信公众号‍易心Microbit编程

python井字棋游戏人机对战_用Python做一个井字棋小游戏相关推荐

  1. 做一个简单的java小游戏--单机版五子棋

    做一个简单的java小游戏–单机版五子棋 学了java有一段时间了,今天就来搞一个简单的单机版五子棋游戏. 实现功能:那必须能进行基础的输赢判断.还有重新开始的功能,悔棋的功能,先手设置的功能和退出的 ...

  2. 做一个简单的java小游戏--贪吃蛇

    做一个简单的java小游戏–贪吃蛇 贪吃蛇游戏博客链接:(方法一样,语言不一样) c++贪吃蛇:https://blog.csdn.net/weixin_46791942/article/detail ...

  3. 手把手教你做一个Java贪吃蛇小游戏

    大家好,我是孙不坚1208,这篇博客给大家分享一下:如何做一个贪吃蛇小游戏(Java版)的exe应用程序,希望能给需要帮助的朋友带来方便. 手把手教你做一个Java贪吃蛇小游戏的exe应用程序 一.J ...

  4. 用Python做一个超简单的小游戏(一听就懂)

    前言 有的人可能学过一点Python基础,但不知道干什么好.今天就教大家做一个简单的小游戏 未经允许,禁止转载 文章目录 前言 写它会用到 源码先抛出来 知识讲解 random 介绍 语法 方法参数表 ...

  5. 手把手教你!100行代码,用Python做一个“消灭病毒”的小游戏

    公众号关注 "菜鸟学Python" 设为 "星标",重磅干货,第一时间送达! 烟花三月下扬州,我想3月能下楼.虽然很多地方都已经开始慢慢的开放了,但是我怀念的胡 ...

  6. Python做一个中秋节嫦娥投食小游戏

    山河远阔,烟火人间,又一年,千里婵娟~ 今天给大家带来的是给玉兔投喂月饼的小游戏.八月十五中秋夜晚,让我们对着月亮许愿:希望我们在意和在意我们的人,诸邪避退.百事无忌.平安喜乐.万事胜意.提前祝大家中 ...

  7. java猜数游戏图形界面_Java做一个猜数的小游戏

    @Author : By Runsen 效果展现 猜数字游戏是一个简单,有趣的小游戏.游戏者通过输入一个指定区间的数字,与系统产生的随机数进行对比,然后输出相应的结果. 游戏运行时产生一个0-10之间 ...

  8. 用所学JS的知识做一个简单的坦克小游戏

    代码如下: <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF- ...

  9. 开发者实践:做一个双人视频社交小游戏,“甩头”才能玩

    在 RTC 2020 编程挑战赛春季赛中.我们还有一个获奖团队,思路新颖,开发了一款基于双人视频聊天场景的小游戏--"拿头玩".在视频聊天过程中即可开启游戏.通过人脸识别算法识别转 ...

最新文章

  1. jpanel把原本内容覆盖掉_A5:APP关键词覆盖你该了解哪些
  2. C 标准库 —— stdio.h
  3. 开课吧Java课堂:StringBuffer全解,非常详细
  4. BZOJ2795: [Poi2012]A Horrible Poem
  5. 航天有关的计算机知识,这些关于神舟十二上的电脑硬核小知识,你知道吗?
  6. java 线程池扩容_106. 生产环境中的线程池自动扩容与缩容的动态资源分配经验...
  7. java全栈(java全栈开发工程师)
  8. XTU (湘潭大学) 2011 新生练习赛(第一场)/ Problem B N! Last non zero
  9. android刷机包基带,手机刷机有必要刷底包基带吗?刷安卓机中基带/底包/固件详解...
  10. 通过对抗网络实现具有身份和姿态鲁棒性的表情识别
  11. 有效学习的6个方法学习方法
  12. 线性回归中的最小二乘法和梯度下降法比较
  13. java 开发安卓im_Android端IM应用中的@人功能实现:仿微博、QQ、微信,零入侵、高可扩展...
  14. 关于短网址短链接生成的算法问题
  15. 抖音直播带货复盘数据怎么分析?3个小技巧快速掌握直播复盘
  16. 让你分分钟学会qt视频播放器
  17. 【推荐】VEX FUNCTIONS
  18. python绘图时,取消坐标轴的科学计数法显示python绘图模板总结
  19. android vivavideo_vivavideo官网版
  20. 关于如何设计动态表情的分享

热门文章

  1. Windows平台真实时毫秒级4K H264/H265直播技术方案探讨
  2. MySQL左关联、右关联、内关联查询
  3. Python数据结构与算法(三)--数据结构的概念
  4. Spring事务配置实例
  5. JSON中的JSON.parseArray()方法、JSON.parseObject()方法和JSON.tojsonString()方法
  6. Java –什么是瞬态字段?
  7. keyProperty=“id“ 和useGeneratedKeys=“true“作用
  8. html 表格行排序,用客户端HTML表格排序对行进行分组
  9. 本地更新github项目_GitHub开源项目2019-03-29更新精选
  10. 计算机桌面打标签,在电脑桌面上添加便签的方法步骤详解(2)