五子棋人机对战_原生JS+Canvas实现五子棋游戏

108ac5af3c68befd7c105394da8cde07.png

原生JS+Canvas实现五子棋游戏

效果图

b6bea710d51f9d22b615fcd37a77f0b7.png

主要功能模块为: 1.人机对战功能 2.悔棋功能 3.撤销悔棋功能

二、代码详解

2.1 人机对战功能实现

从效果图可以看到,棋盘的横竖可以放的位置为15*15,通过canvas画棋盘:

1973883d2195d48cc8d41f6ddb38c065.png

知道格子数后,我们先看五子棋有多少种赢法:

f689e5873c9805f39a5c6bf896c877fc.png

根据赢法总数定义分别保存计算机和人赢法的数组:

f154c8b3a93a3c087ab1b575d8b77a5c.png

然后就是人开始下棋:

7eb2e38626b9740ce099ef0157976316.png

oneStep() 方法为落子,要在棋盘上画一个棋子:

11d16e6b7882961854f7f3ae96e46330.png

接着看计算机怎么下棋,具体看computerAI()方法:

efddbe8d8bd625f110e3827e30c968d4.png

根据相应的权重,计算出计算机应该落子的位置。

2.2 悔棋功能

要提的是,这里暂时只能悔一步棋。悔棋功能主要关键点是:1、销毁刚刚下的棋子;2、将之前不可能赢的状态还原;看下具体的代码:

cf97308cf8b4f7eda1cffdbcc44e82d7.png

minusStep()为销毁棋子的方法,我们看下是怎么销毁的。

b41bc21a3026ebf4866551d67c8f3562.png

首先通过clearRect()擦掉该圆,然后再重新画该圆周围的格子,注意相应的位置,这里花了些时间折腾。

2.3 撤销悔棋功能

悔棋过后,再撤销,相当于还原悔棋之前的状态。代码比较简单:

188f8ba9edfda6e16dfa4802361a97dc.png

至此,比较简单的完成了这三个功能。

三、总结

五子棋游戏的核心关键点是:1、弄清楚有多少种赢法;2、怎么判断是否已经赢了;3、计算机下棋算法。这里巧妙地运用数组存储赢法,判断是否赢了,通过权重比较,计算出计算机该下棋的位置。 过程中用到canvas,之前有学习过,虽然很久没用,查了些资料,复习了怎么画线,画圆,学会了怎么如何清除一个圆等。 然后要注意的是,用原生Js怎么为元素添加、删除class。

作者:颉旺飞
链接: https:// juejin.cn/post/69010897 43665102855
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值