目录

五子棋-单机游戏-微信小游戏项目开发入门

五子棋-单机游戏-微信小游戏项目开发入门

关于这个文章能看懂的条件,需要读者具备如下三个条件:

  1. 熟悉 HTML
  2. 熟悉 HTML 中的 Canvas
  3. JavaScript基础 以及ES5以上

这是一个五子棋游戏的实现方案,在微信小程序上运行,如有需要可参考此学习,实现逻辑不是很复杂,且代码数量不多,很适合新手入门学习哦。

首先,请打开电脑中的微信小程序开发工具,选择小游戏,然后新建,如下图,

若要做小程序的,请在文章底部查看

https://i-blog.csdnimg.cn/blog_migrate/6507a00fd3947975f261d44b1d9525a0.png#pic_center

新建的小游戏项目大致如下,笔者这里是精简过的,会看到有个 game.js 文件,这个是小游戏执行的入口,将 game.js 文件打开,如果有代码内容,那就全部清空吧,下面开始从这个文件中写代码。

https://i-blog.csdnimg.cn/blog_migrate/543536a4584c307d41914a59a3ae5798.png#pic_center

PS: 笔者猜到很多读者可能是新手,其心里可能会想:新建的小游戏项目是个打飞机的游戏例子,而项目文件太多了,对新手入门来说,会不会觉得眼花,那有很多不相关的文件就删除吧,只保留下图中的项目文件一样就可以了,精简后整个干净了

注意,游戏主要逻辑都写到 ./js/main.js 里的,这个先不看,后面用到时会使用这一行导入游戏逻辑

import Main from './js/main.js';

在写游戏逻辑准备前,需要先从wx接口API中拿到画布 Canvas ,如下

const canvas = wx.createCanvas();

接着,定义好一个用于渲染的配置

const render = {
  ctx: canvas.getContext('2d'),//2d context 绘制画布的是ctx
  width: canvas.width,//画布宽度
  height: canvas.height,//画布高度
  top: 80,//距离上边距
};

接着,定义游戏相关的配置

const config = {
  cols: 20, //自己设置,每一行铺满的棋子数
};

接着,定义个方法,用于监听游戏产生的事件

function listener(event) {
  switch (event) {
    case 'end': //游戏结束事件
      //...
    default:
      console.log('other event', event);
  }
}

接下来是用到游戏逻辑对象类 Main ,项目结构如下图,通过 import ./js/main.js 导入过来就可以用了,在开始写的地方有写了import …

https://i-blog.csdnimg.cn/blog_migrate/fccacd2ded52f19664d9c9b98306254b.png#pic_center

然后,写初始化游戏实例 game ,将上面定义好的 render, config, listener 都以参数形式传进去,

var game = new Main(render, config, listener);

再定义一个方法,处理触摸事件

function touchHandler(event) {
//...
}
//处理触摸开始的方法添加到画布canvas中
canvas.addEventListener('touchstart', touchHandler);

以下是游戏的其它功能,如游戏截图的方法

function saveToImage() {
//...
}

最后,就是重点写游戏逻辑 Main 的实现了, 稍微复杂一些,打开笔者项目中的 ./js/main.js ,会看到笔者写好的代码大致如下,

'use strict';

//定义个性化颜色常量
const Colors = {
  BgColor: '#FFFFFF',//页面背景色
  BorderColor: '#000000',//网格线框色
  BgColor2: '#DDC58D',//棋盘背景色
}
//定义游戏的事件常量
const GameEvent = {
  onEnd: 'end'
}
//canvas font 字体的单位常量
const FontUnit = 'px sans-serif';
/**
* 五子棋游戏主要逻辑
*/
export default class Main {
	//构造方法,需要传入三个参数,上面有讲了
  constructor(render,config,listener){
    //初始化游戏布局
    const initLayout = () => {
      const { ctx, width, height, top } = this.render;
      const { cols } = this.config;
      ctx.fillStyle = Colors.BgColor;
      ctx.strokeStyle = Colors.BorderColor;
      ctx.fillRect(0,0,width,height);
      ctx.fillStyle = Colors.BgColor2;
      //游戏的棋子集合
      const grids = [];
      //...
      for(let i=0; i<cols; i++){
        for(let j=0; j<cols; j++){
          //...
          grids.push(g);
        }
      }
      
      //...开始游戏
      gameStart();
    };

    //画棋子,白棋或黑棋
    this.showFlag = (gs) => {
      //...
      if (isMyFlag) {
        ctx.fillStyle = '#ffffff';//白棋
      } else {
        ctx.fillStyle = '#000000';//黑棋
      }
      //...
      this.isMyFlag = !isMyFlag;
    };
    //扫描棋子数
    this.scan = (gs,offset) => {
      //...
    };
	//游戏结束处理
    this.gameEnd = () => {
      //...
    };

	//游戏开始,刷新的
    const gameStart = () => {
      //...
      ctx.fillStyle = '#000000';//字体色
      ctx.font = fontSize + 'px ' + FontUnit;
      //...
    };

    initLayout();
	//定时器,可当作是游戏的时钟
    this.timer = setInterval(() => {
      gameStart();
      //...
    }, 1100);
  }
	//处理触摸的方法
  touchStart(touch){
    //...
    this.showFlag(gs);
    let count = this.scan(gs, { a: 1, b: 0 });
    //...
    // 如果一方棋子排列达到5个(超出4个)就会判断胜利(游戏结束)
    if (count >= 4) this.gameEnd();
  }
	//销毁用,退出游戏并关闭定时器
  destory(){
    if (this.timer) {
      clearInterval(this.timer);
    }
  }

}

就写到这了,大致实现步骤已说明了,具体实现方法建议自己构思来写,如需要看详细的代码请在评 去下载,遇到有问题请留言,笔者会抽空查看并回复的,感谢耐心看完!

下面是笔者小游戏运行后的效果截图,五子棋随便下,等哪天遇到对手,来个五子棋PK~,

第一个是小游戏项目截图,第二个是小程序项目截图

https://i-blog.csdnimg.cn/blog_migrate/34db3b23fa55aceaa1c146548eeeb78c.png#pic_center

https://i-blog.csdnimg.cn/blog_migrate/56e840d9d4909a324eca75c38c6ab2fe.jpeg#pic_center

项目基础

在此项目基础修改的另一个项目是 围棋游戏,与上面运行效果一样,只是玩法不同,

还有一个项目是 井字棋游戏,相信在座的各位读者小时候都玩过,那么运行效果如下

https://i-blog.csdnimg.cn/blog_migrate/ad3c3859d24e3432e0ab33e5dbeb0447.gif#pic_center

以上项目源码都有的, ,在资源一栏下去找(手机上可能找不到资源一栏,请用电脑浏览器查看),请放心下载,感谢支持与信任!