• 发文
  • 评论
  • 微博
  • 空间
  • 微信

用Python做一个井字棋小游戏

易心STEAM编程 2019-05-20 14:30 发文

井字棋是一个经典的小游戏,在九宫格上玩家轮流画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编程

声明:本文为OFweek维科号作者发布,不代表OFweek维科号立场。如有侵权或其他问题,请及时联系我们举报。
2
评论

评论

    相关阅读

    暂无数据

    易心STEAM编程

    分享STEAM教育课程内容,生态...

    举报文章问题

    ×
    • 营销广告
    • 重复、旧闻
    • 格式问题
    • 低俗
    • 标题夸张
    • 与事实不符
    • 疑似抄袭
    • 我有话要说
    确定 取消

    举报评论问题

    ×
    • 淫秽色情
    • 营销广告
    • 恶意攻击谩骂
    • 我要吐槽
    确定 取消

    用户登录×

    请输入用户名/手机/邮箱

    请输入密码