当前位置: 首页 > news >正文

canvas 五子棋游戏

效果

--_055

代码

<!DOCTYPE html>
<html lang="zh_CN">
<head>
    <meta charset="UTF-8">
    <title>五子棋</title>
    <script src="https://code.jquery.com/jquery-3.3.1.js"></script>
</head>
<body>
<canvas id="canvas" width="400" height="400"></canvas>
<script>
    (function () {    // 画布绘制
        let canvas = document.getElementById("canvas");
        let context = canvas.getContext("2d");
        context.beginPath();
        for (let i = 0; i < 19; i++) {
            // 竖线绘制
            context.moveTo(10 + i * 20, 10);
            context.lineTo(10 + i * 20, 370);
            // 横线绘制
            context.moveTo(10, 10 + i * 20);
            context.lineTo(370, 10 + i * 20);
        }
        context.stroke();
    })();
    // 鼠标单击
    let blorwh = 0;
    // 定义用于判断落子的二维数组
    let matrix = new Array(19);
    // 进行赋值
    for(let i = 0; i < 19; i++){
        matrix[i] = new Array(19);
        for(let j = 0; j < 19; j++){
            matrix[i][j] = 0;
        }
    }
    $("#canvas").click((event) => {
        // 每次落子的时候取反
        blorwh = !blorwh;
        console.log(event.offsetX);
        let canvas = document.getElementById("canvas");
        let context = canvas.getContext("2d");
        // 保存要落子的坐标
        let arcPosX, arcPosY;
        // 保存棋子在数组中的位置
        let mtxPosX, mtxPosY;
        // 和每一条线进行比较,如果相差10个像素以内,即,靠近
        for(let x = 0; x < 19; x++){
            if(Math.abs(event.offsetX - (10 + x * 20)) < 10){
                // 获得需要骡子的x
                arcPosX = 10 + x * 20;
                mtxPosX = x;
            }
            if(Math.abs(event.offsetY - (10 + x * 20)) < 10){
                // 获得需要的y
                arcPosY = 10 + x * 20;
                mtxPosY = x;
            }
        }
        // 画出棋子
        // 落子为空,进行绘制,反之不绘制
        if(matrix[mtxPosX][mtxPosY] == 0) {
            context.beginPath();
            if (blorwh) {
                context.fillStyle = "white";
                context.arc(arcPosX, arcPosY, 10, 0, Math.PI * 2, false);
                context.stroke();
                // 白子为1
                matrix[mtxPosX][mtxPosY] = 1;
            } else {
                context.fillStyle = "black";
                context.arc(arcPosX, arcPosY, 10, 0, Math.PI * 2, false);
                // 黑子为2
                matrix[mtxPosX][mtxPosY] = 2;
            }
            context.fill();
        }
        // 获胜检测
        if(matrix[mtxPosX - 1][mtxPosY] == matrix[mtxPosX][mtxPosY] &&
            matrix[mtxPosX - 2][mtxPosY] == matrix[mtxPosX][mtxPosY]  &&
                matrix[mtxPosX -3][mtxPosY] == matrix[mtxPosX][mtxPosY]  &&
                    matrix[mtxPosY - 4][mtxPosY] == matrix[mtxPosX][mtxPosY]){
            if(matrix[mtxPosX][mtxPosY] == 1){
                alert("白方获胜");
            }else{
                alert("黑方获胜");
            }
        }
    })
</script>
</body>
</html>

思路

创建数组用于保存五子棋的位置即可。
输赢判断使用遍历即可
重复落棋用判断保存的数组的位置是否已经有棋子即可
落在交叉线和附近的点判断,如果相差小于一定数值进行落棋。

图片描述

相关文章:

  • 12-dm-permissions.rules
  • 我的建站经历(一)
  • IDEA常用插件整理
  • 个推开发者服务进阶之路
  • 安卓用户当心啦 这个App可能会偷走你的比特币
  • SpringMvc环境搭建(配置文件)
  • 51信用卡 Android自动埋点实践
  • redis发布订阅Java代码实现
  • 批量截取pdf文件
  • 怎么把视频里的音乐提取出来
  • 【BZOJ3097】 Hash Killer I
  • 从微服务迁移到工作流的经验之谈
  • ElasticSearch之Windows下安装
  • springboot学习之授权Spring Security
  • RSA
  • 2017 前端面试准备 - 收藏集 - 掘金
  • 2017-08-04 前端日报
  • github指令
  • Java 多线程编程之:notify 和 wait 用法
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • JavaScript设计模式系列一:工厂模式
  • JAVA多线程机制解析-volatilesynchronized
  • Java小白进阶笔记(3)-初级面向对象
  • JS 面试题总结
  • Linux下的乱码问题
  • Median of Two Sorted Arrays
  • mysql 数据库四种事务隔离级别
  • Solarized Scheme
  • vue-cli3搭建项目
  • 测试开发系类之接口自动化测试
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 检测对象或数组
  • 来,膜拜下android roadmap,强大的执行力
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 买一台 iPhone X,还是创建一家未来的独角兽?
  • 面试遇到的一些题
  • 微信开放平台全网发布【失败】的几点排查方法
  • 系统认识JavaScript正则表达式
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • AI算硅基生命吗,为什么?
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • $.ajax,axios,fetch三种ajax请求的区别
  • (1)(1.8) MSP(MultiWii 串行协议)(4.1 版)
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (译) 函数式 JS #1:简介
  • (转)Windows2003安全设置/维护
  • ****** 二十三 ******、软设笔记【数据库】-数据操作-常用关系操作、关系运算
  • .Net - 类的介绍
  • .NET 反射 Reflect
  • .NET开发不可不知、不可不用的辅助类(一)
  • .NET下的多线程编程—1-线程机制概述
  • .Net中ListT 泛型转成DataTable、DataSet
  • .Net转Java自学之路—SpringMVC框架篇六(异常处理)