原生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/6901089743665102855
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

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

  1. html五子棋悔棋,原生 JS + Canvas 实现五子棋游戏

    原标题:原生 JS + Canvas 实现五子棋游戏 || 一.功能模块 先看下现在做完的效果: 线上体验: https://wj704.github.io/five_game.html 主要功能模块 ...

  2. java五子棋人机对战_实现简单的人机对战五子棋(实践)

    五子棋人机对战实践项目 总的任务和目标 完成一个人机对战的五子棋项目,基本效果如下: 第一部分 Java绘图原理 1.   基本概念 像素,坐标 2.   组件自定义绘图原理 3.   Graphic ...

  3. 图片五子棋PHP接口,原生JS+Canvas实现五子棋游戏实例

    一.功能模块 先看下现在做完的效果: 主要功能模块为: 1.人机对战功能 2.悔棋功能 3.撤销悔棋功能 二.代码详解 2.1 人机对战功能实现 从效果图可以看到,棋盘的横竖可以放的位置为15*15, ...

  4. html五子棋游戏制作原理,原生JS+Canvas实现五子棋游戏

    功能模块 先看下现在做完的效果: 代码详解 人机对战功能实现 从效果图可以看到,棋盘的横竖可以放的位置为15*15,通过canvas画棋盘: //绘画棋盘 var drawChessBoard = f ...

  5. c语言五子棋人机对弈算法_从零开始编写C语言五子棋程序1

    从零开始编写C语言五子棋程序 C语言程序是国科大计算机系本科生必修课程,我选修的是武成岗老师的C语言课程.除了课上回答问题,实验课competitive programming的成绩之外,最终的大作业 ...

  6. 使用原生JS+Canvas实现五子棋游戏

    布局+样式部分代码 : <style type='text/css'>canvas {display: block;margin: 50px auto;box-shadow: -2px - ...

  7. java心电图_使用原生js+canvas实现模拟心电图

    从2016年2月转行进入IT行业,到现在也有将近两年的时间了,从最开始的java到现在的前端,前进的路上一直靠自己摸索,一路走到现在,前端大神是绝对谈不上的,最多算一只刚入门的菜鸟. 从最开始的懵懵懂 ...

  8. C语言 AI智能,五子棋 人机对战,人人对战

    C语言五子棋,人机对战,人人对战 chunli@Linux:~$ cat main.c # include<stdio.h> # include<string.h> # inc ...

  9. C#实现五子棋人机对战的思路与源码分享

    前言 业余闲暇时,基于.netframework使用C#语言开发了一个五子棋人机对战的游戏,在此做些整理和分享,先上图. winform版 UI虽然很简洁,却花了些功夫,图形元素全动态生成,毕竟不是美 ...

最新文章

  1. jQuery.width()和jQuery.css('width')的区别
  2. PostgreSQL client's startup packet different between logical and normal stream replication
  3. 嵌入式中主动触发hardfault
  4. 修改IIS7并发连接数目限制
  5. 左神算法:最大值减去最小值小于或等于num的子数组的数量(Java版)
  6. 是什么职位_为什么说,质量工程师岗位变成了 “寡妇职位”?
  7. 浅谈SQL注入风险 - 一个Login拿下Server(转)
  8. 小米们要“造反”,开撕三大运营商
  9. android让图片旋转动画,利用RotateAnimation旋转图片的问题 - 移动平台 / Android
  10. 关于selenium关闭chrome密码登录时弹出的密码提示框
  11. 如何将交换功能写成函数?
  12. Oracle查看IP操作,Oracle VM VirtualBox虚拟机ip addr命令查看ip不显示以及静态IP设置
  13. 网络安全之uRPF技术
  14. react兼容safari9_react项目兼容ie浏览器配置
  15. 地震后的重建!——AD灾难恢复!
  16. 李一男2003年在港湾给开发人员培训时的语录
  17. CAE-仿真案例学习
  18. mysql查询雇员地址和电话_数据库的查询(结合YGGL.sql)
  19. 别再鼓吹神通广大的黑客了 只有务实才能让高管和董事会加大网络安全投入
  20. VC++设置文件最后修改时间(附源码)

热门文章

  1. 使用setup函数替代beforeEach函数进行Angular单元测试
  2. 在SAP Data Intelligence Modeler里创建新的pipeline
  3. SAP Fiori Elements - object detail batch roundtrip triggered by binding property in embedded xml vie
  4. Account mobile phone in CRM and C4C
  5. 一步步使用SAP云平台的WebIDE开发SAP UI5应用
  6. how is __metadata.media_src generated in backend
  7. 使用dom breakpoint找到修改属性的javascript代码
  8. Jerry制作的软件工程里Design for Change的培训材料
  9. 如何从WebSocket服务器收到的数据判断出有哪些客户端需要广播
  10. IPRO_DOCXCC_FILLIN_SIMPLEVARS