运用canvas写一个本地五子棋小游戏

  • HTML部分
  • JS 部分
  • CSS 部分
  • 实现效果

HTML部分

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>五子棋小游戏</title><link rel="stylesheet" type="text/css" href="./css/css.css">
</head><body><canvas id="chess" width="450px" height="450px"></canvas><script type="text/javascript" src="./js/script.js"></script>
</body></html>

JS 部分

// 轮流下棋
var me = true;
// 二维数组存储落子情况,不可重复落子
var chessBoard = [];
for (var i = 0; i < 15; i++) {chessBoard[i] = [];for (j = 0; j < 15; j++) {// 0为没有落子chessBoard[i][j] = 0;}
}
var chess = document.getElementById('chess');
var context = chess.getContext('2d');
// 变颜色
context.strokeStyle = "#BFBFBF";
// 画背景图
var logo = new Image();
logo.src = "./img/logo.jpg";
// 图片加载完之后调用方法才能显示
logo.onload = function () {context.drawImage(logo, 0, 0, 450, 450);drawChessBoard();
}var drawChessBoard = function () {//画布是450*450  15个交叉点,14个间隔 每个间隔30像素两边留白15像素for (var i = 0; i < 15; i++) {// 竖线context.moveTo(15 + i * 30, 15);context.lineTo(15 + i * 30, 435);context.stroke();// 横线context.moveTo(15, 15 + i * 30);context.lineTo(435, 15 + i * 30);context.stroke();}
}
// ij是棋盘索引 me是白棋黑棋
var oneStep = function (i, j, me) {// 画棋子、画圆context.beginPath() context.closePath();context.beginPath();// arc画扇形 参数,起始位置 半径13 扇形弧度 0 2πcontext.arc(15 + i * 30, 15 + j * 30, 13, 0, 2 * Math.PI);// stroke描边context.stroke();context.closePath();// 设置黑子渐变 createRadialGradient参数 第一个圆原线性坐标 半径13 和第二个圆  黑旗颜色0A0A0A黑色var gradient = context.createRadialGradient(15 + i * 30 + 2, 15 + j * 30 - 2, 13, 15 + i * 30 + 2, 15 + j * 30 - 2, 0);if (me) {gradient.addColorStop(0, "#0A0A0A");gradient.addColorStop(1, "#636766");} else {gradient.addColorStop(0, "#D1D1D1");gradient.addColorStop(1, "#F9F9F9");}context.fillStyle = gradient;// 填充圆的颜色context.fill();
}
// 落棋设置
chess.onclick = function (e) {// 相对于左上角来设置坐标和索引var x = e.offsetX;var y = e.offsetY;// 向下取整var i = Math.floor(x / 30);var j = Math.floor(y / 30);// 判断不可重复落子if (chessBoard[i][j] == 0) {oneStep(i, j, me);// 黑棋为1,白棋为2if (me) {chessBoard[i][j] = 1;} else {chessBoard[i][j] = 2;}// 交替颜色me = !me;}}// 对角线
// context.moveTo(0, 0);
// context.lineTo(450, 450);
// context.stroke();

CSS 部分

canvas{display: block;margin:50px auto;box-shadow: -2px -2px 2px #EFEFEF, 5px 5px 5px #bb99bb;
}

实现效果

前端实现五子棋小游戏1(本地双人对战)相关推荐

  1. 前端实现五子棋小游戏2(AI实现人机对战)

    通过一个简单的算法,来实现AI智能对弈的五子棋小游戏 AI难点解析 赢法数组 赢法的统计数组 判断胜负 计算机的落子规则 代码实现 赢法数组 赢法种类的索引 横线赢法 竖线赢法 横线赢法 斜线赢法 反 ...

  2. 用javascript+jquery编写的小游戏-贪吃蛇(双人对战版)

    前言 这是我在多年前初学jquery, 并结合javascript, 编写的一个小游戏.那洋洋洒洒几千行的js代码时刻提醒着我"不忘初心!". 效果演示 代码 引入文件 由于用到了 ...

  3. 【Verilog】基于FPGA的五子棋小游戏(VGA显示、双人对战、胜负判别、附完整代码)

    基于FPGA的五子棋小游戏 有一些说明: 1.本文是基于VGA的显示小游戏,主要为VGA显示的拓展应用: 2.为适应不同显示屏的分辨率,棋盘确定为10X10的黑线白底的方格: 3.下棋主要用棋格颜色变 ...

  4. C语言---简单五子棋小游戏

    效果图如下: 设计思路: 棋盘设计为15×15格,初始状态光标在棋盘的中央,白棋先走,轮流落子,当一方连成五子或下满棋盘时,游戏结束(连成五子的一方获胜,下满棋盘为和棋).当游戏一方胜利后显示胜利信息 ...

  5. C++实现五子棋小游戏(源代码)

    >求关注,求点赞,求评论< Thanks♪(・ω・)ノ 这次发个简单的 废话不多说 下为代码☟☟☟ #include <iostream> #include <conio ...

  6. AI版的五子棋小游戏

    AI版的五子棋小游戏 内容简介 本项目实现的五子棋博弈游戏是基于AI的五子棋游戏.游戏模式可以分为人机对弈和双人对弈两种模式.本程序采用基于启发式max/min算法的alpha-beta剪枝技术来选择 ...

  7. 基于flask的五子棋小游戏

    基于flask的五子棋小游戏 前言 ​ 首先说明一下,本人方向是java后端,只因老师布置了一个作业,要用flask来做一个五子棋,没办法被逼上梁山,程序不太美观,但是应付作业还是够了的. ​ 废话不 ...

  8. Python:五子棋小游戏

    临近期末考试,班主任把所有的不参与考试的副科课程全都停了,天天语数外历史物理,实在是无聊,同学们便在课间互相约战五子棋,棋盘便是平时写作业用的玛丽大号写字本,棋子就是xo,不到两个星期,我就成功地用完 ...

  9. 面向对象程序设计(Java)课程设计——五子棋小游戏

    目录 一.团队成员及任务 二.项目简介 三.功能设计图 四.运行结果截图 五.核心源码 六.课程设计感想与展望 一.团队成员及任务 队长:管俊杰  计科(智能)22-1 202203200037 负责 ...

最新文章

  1. hdu 4605 Magic Ball Game (在线主席树/离线树状数组)
  2. vba单元格批量赋值,EXCEL——VBA对文件夹下所有表格的特定单元格赋值
  3. 【转】shell pipe与输入输出重定向的区别
  4. action无法传参数给html页面,HTML 解决form表单提交时,action url中参数无效问题
  5. VS Code HtmlFindClass 插件介绍
  6. java编写sql语句,java实现简单的给sql语句赋值的示例
  7. XSS的盲打以及实验的演示
  8. Word页眉本来有但不可见 前后相连时
  9. Directional Light,Ambient,Specular,光照感性认识...
  10. cad解除块的快捷命令_47个快捷键50个CAD技巧,快收藏起来
  11. SosoApi使用手册
  12. 杨东援:交通管控,从智能走向智慧
  13. 编写函数:字符串的小写转大写(Append Code)
  14. 想深入学习计算机需要看哪些经典书籍?
  15. latex里图片大小如何调整_如何使Latex中的图片放大依然清晰
  16. 伪造邮件***,看我如何给网易邮箱APP发送垃圾邮件【二】
  17. 海外社交媒体平台如何选择
  18. 8.22镭速云传上线,这些精彩都安排上了!
  19. 预测2018年世界杯决赛_2018年5个电子商务预测
  20. 记录一次糟心的appium启动篇

热门文章

  1. 如果是你阿里云轻量服务器和ECS共享型n4你怎么选?
  2. SEP客户端C盘空间被xfer目录占满
  3. python3 对字典去重
  4. cie规定的标准光源_标准施照体与标准光源_应用光学与光学设
  5. Java从零开始系列01:Java入门
  6. (七)JVM成神路之GC分代篇:分代GC器、CMS收集器及YoungGC、FullGC日志剖析
  7. 0.91寸 SSD1306 OLED介绍(一) --- 整体介绍/IIC时序介绍
  8. 【手把手】教你安装最新IDEA绿色版开发工具(以2021.1.2版本为例)
  9. Hibernate 什么梗
  10. socket数据传输过程中如何准确的接收消息