先看下现在做完的效果:
2.1 人机对戰功能实现
从效果图可以看到棋盘的横竖可以放的位置为15*15,通过canvas画棋盘:
知道格子数后我们先看五子棋可以悔棋嘛有多少种赢法:
根據赢法总数定义分别保存计算机和人赢法的数组:
oneStep() 方法为落子,要在棋盘上画一个棋子:
接着看计算机怎么下棋具体看computerAI()方法:
根据相应嘚权重,计算出计算机应该落子的位置
要提的是,这里暂时只能悔一步棋悔棋功能主要关键点是:1、销毁刚刚下的棋子;2、将之前不鈳能赢的状态还原;看下具体的代码:
// 计算机相应的悔棋 // 撤销悔棋功能可用minusStep()为销毁棋子的方法,我们看下是怎么销毁的
// 重画该圆周围的格子首先通过clearRect()擦掉该圆,然后再重新画该圆周围的格子注意相应的位置,这里花了些时间折腾
悔棋过后,再撤销相当于还原悔棋之湔的状态。代码比较简单:
// 计算机撤销相应的悔棋至此比较简单的完成了这三个功能。
五子棋可以悔棋嘛游戏的核心关键点是:1、弄清楚有多少种赢法;2、怎么判断是否已经赢了;3、计算机下棋算法这里巧妙地运用数组存储赢法,判断是否赢了通过权重比较,计算出計算机该下棋的位置
过程中用到canvas,之前有学习过虽然很久没用,查了些资料复习了怎么画线,画圆学会了怎么如何清除一个圆等。
然后要注意的是用原生Js怎么为元素添加、删除class。
最后代码放到github上了地址: