最新消息:

Python课程系列:井字棋小游戏

Python 少儿编程 1994浏览 0评论

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

Python课程系列:井字棋小游戏

 

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

范例代码可由下面连结取得。

https://github.com/Ashing00/tictactoe/tree/master

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

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

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

 

Python课程系列:井字棋小游戏

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

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

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

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

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

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

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

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

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

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

 

Python课程系列:井字棋小游戏

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

 

Python课程系列:井字棋小游戏

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

 

Python课程系列:井字棋小游戏

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

您必须 登录 才能发表评论!