原生JS+Canvas实现五子棋游戏
效果图
主要功能模块为: 1.人机对战功能 2.悔棋功能 3.撤销悔棋功能
二、代码详解
2.1 人机对战功能实现
从效果图可以看到,棋盘的横竖可以放的位置为15*15,通过canvas画棋盘:
知道格子数后,我们先看五子棋有多少种赢法:
根据赢法总数定义分别保存计算机和人赢法的数组:
然后就是人开始下棋:
oneStep() 方法为落子,要在棋盘上画一个棋子:
接着看计算机怎么下棋,具体看computerAI()方法:
根据相应的权重,计算出计算机应该落子的位置。
2.2 悔棋功能
要提的是,这里暂时只能悔一步棋。悔棋功能主要关键点是:1、销毁刚刚下的棋子;2、将之前不可能赢的状态还原;看下具体的代码:
minusStep()为销毁棋子的方法,我们看下是怎么销毁的。
首先通过clearRect()擦掉该圆,然后再重新画该圆周围的格子,注意相应的位置,这里花了些时间折腾。
2.3 撤销悔棋功能
悔棋过后,再撤销,相当于还原悔棋之前的状态。代码比较简单:
至此,比较简单的完成了这三个功能。
三、总结
五子棋游戏的核心关键点是:1、弄清楚有多少种赢法;2、怎么判断是否已经赢了;3、计算机下棋算法。这里巧妙地运用数组存储赢法,判断是否赢了,通过权重比较,计算出计算机该下棋的位置。 过程中用到canvas,之前有学习过,虽然很久没用,查了些资料,复习了怎么画线,画圆,学会了怎么如何清除一个圆等。 然后要注意的是,用原生Js怎么为元素添加、删除class。
作者:颉旺飞
链接: https:// juejin.cn/post/69010897 43665102855
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。