美文网首页web
html+css+js简易网页五子棋

html+css+js简易网页五子棋

作者: Gyyyang | 来源:发表于2018-11-19 22:48 被阅读59次

由于觉得自己逻辑思维特别差,想锻炼一下,所以以后都要开始之前先整理一下逻辑结构。

-------------------------------------------

下棋,要有棋盘,棋子,和下棋事件。


chess.PNG

棋盘

棋盘简单说就是网格线,我用convas画布绘制。

html

<canvas id="chess" width="450px" height="450px"></canvas>

JS部分

//获取到canvas标签,getContext标签定义一个画布,2d代表二维
var chess= document.getElementById('chess');
var context = chess.getContext("2d");

然后画线

//设置线的颜色
context.strokeStyle="#bfbfbf";
var drawChess = function(){
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();
}
}

moveT0( , ):开始坐标,lineTo( , ):终点坐标

添加背景图片

var logo = new Image();
logo.src="#图片地址";
logo.onload=function(){
context.drawImage(logo,0,0,450,450);
drawChess();
}

onload()方法表示在图片加载完成后运行方法内内容,因为图片加载需要时间,如果不在它完成后执行绘制背景,和加载线格,背景图片会在上面显示,覆盖网格。(可以自己测试一下)。

制作棋子

var onestep = function(i,j,me){
context.beginPath();
context.arc(15 + i * 30, 15 + j * 30, 13, 0, 2 * Math.PI)
context.closePath();
//渐变
 var gradient = context.createRadialGradient(
    15 + i * 30 + 2,
    15 + j * 30 - 2,
    13,
    15 + i * 30,
    15 + j * 30,
    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();
}

分两部分,先画圆,beginPath()表示开始画,arc()方法里面值分别是,圆心坐标,半径,arc()是画弧线的,所以要得到圆,就是从0到 2 * Math.PI,表示360°。
接下来是给圆设置渐变,渐变就是从一种颜色到另一种颜色的过渡。所以用createRadialGradient()方法设置两个圆,参数就是两个圆的圆心和半径,然后判断是黑子还是白子分别设置不同的渐变颜色,addColorStop()方法:stop :介于 0.0 与 1.0 之间的值,表示渐变中开始与结束之间的位置。 color:在结束位置显示的 CSS 颜色值。接着设置颜色填充和填充方式,方式就是上面定义的gradient渐变。

棋子落下事件

简单说就是在画布上点击,然后在相应位置生成棋子,难点在于黑白棋轮流落下,一个一次。且落下后的棋子不能改变。

var me = true;
chess.onclick=function(e){
var x = e.offsetX;
var y = e.offsetY;
var i = Math.floor(x/30);
var j = Math.floor(y/30);
onestep();
me=!me;
}

这里就对应了上面的制作棋子中的i,j.在相应的坐标添加棋子。me=!me;就规定了下一次点击改变颜色,这次是true,下次就是fales。
但是这个时候你在已经落下的棋子上面点击,会改变其原有的颜色,为解决这个BUG,我们添加一个二位数组用来存储已经落下棋子的位置。如果已经存在就不会触发事件。

var arr=[];
for(var i=0;i<15;i++){
arr[i]=[];
for(var j=0;j<15;j++){
arr[i][j]=0;
}
}
var me = true;
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);
    if (me) {
      chessBoard[i][j] = 1;
    } else {
      chessBoard[i][j] = 2;
    }
    me = !me;
  }
};

先让数组初始值为0,如果是0,执行onestep()方法,如果是true(黑色)就在数组里该位置存放为1,如果是false(白色)存放2,这样在点击空白位置时就会先判断数组里该位置的值,如果是0,则执行函数,其他则不执行。
之前写过一遍,现在方法全忘记了,写这篇文章还是对应着源码写的,还是要多练习,不难的东西,就是方法太多,很琐碎,学JS,HTML就这样,下期会添加判断输赢和重新开始游戏等功能。

相关文章

  • html+css+js简易网页五子棋

    由于觉得自己逻辑思维特别差,想锻炼一下,所以以后都要开始之前先整理一下逻辑结构。 ----------------...

  • js基础

    1.网页 网页=html+css+js html:网页元素内容 css:控制网页样式 js:操作网页内容,实现功能...

  • 学习web编程技术体系指北

    1.基础 首先,先把html+css+js这三个做网页的基本语言基础过关,一开始不一定非得学的多精,很简易简单从菜...

  • 2018-09-17

    Js的理解 基于事件 基于用户操作 Js的组成三部分 网页的组成 HTML+css+js Ecmscript 核心...

  • 手写服务器-3~测试网页

    用于测试服务器程序的简易网页

  • 2018-09-17js笔记

    1. JS的理解 基于事件,基于用户操作。 2. JS的组成 三个部分: 网页的组成:HTML+css+JS ...

  • 2018-04-06

    Html基础 1 认识大前端 前端就是利用html+css+js等技术将效果图生成网页。 Html结构标准,相当人...

  • 00-前端简要介绍

    一、认识前端 前端就是将效果图生成网页,利用html+css+js等技术; PC端、移动端; 用户体验。 二、认识...

  • webView 与JS 的交互

    1. 先了解一下html+css+js(JavaScript)的知识(一个iOS的个人理解) html 是一个网页...

  • 编程小游戏 | C 语言快速实现五子棋

    ​​​五子棋大家一定都玩过,想不想试着用 C 语言来实现一个简易版的五子棋呢?下面就让我们现在开始,用最简单易懂的...

网友评论

    本文标题:html+css+js简易网页五子棋

    本文链接:https://www.haomeiwen.com/subject/uxxzfqtx.html