前段时间,写了一款js小游戏--经典炸弹人,因为这是第一次写游戏,对很多东西都不是很熟悉。于是,疯狂的上网找资料,结果发现,关于经典炸弹人的js资料少的可怜。所以,很是头疼了一段时间。在写完经典炸弹人大概逻辑后,觉得有必要分享出来,方便更多的小伙伴学习。

首先,想必这款游戏大家都不陌生,玩家通过相应按键实现上下左右移动,这里我是使用的是W、A、S、D四个键控制玩家方向,空格键放置炸弹,接下来,我们来说说它的业务逻辑:

1、Canvas实现地图

2、实现玩家的上下移动

3、实现空格放炸弹

4、敌人的移动

5、障碍物判断

6、实现爆炸效果

总的来说,目前我也只是实现了大概的功能,像分数以及其他关卡及地图动画,有兴趣的话可以自行添加。

接下来,就是绘制地图了,话不多说,先来看看绘制出来的地图效果

那么,这又是怎么实现的呢?其实,这张地图就是通过下面图片的一小部分,用canvas画布画出来的

好了,接下来进入主题了,我们先来假设一下,要画出这个平面地图,我们需要哪些东西?如何将地图数据读取成我们所需要的图片,最后显示在浏览器上。

在这里我新建了两个js,map.js存储地图数据,cell.js根据传入的地图参数绘制图片。

很显然,我们需要用到一个二维数组存储我们的地图数据,就如:

var mapData=[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,1,1,1,1,1,2,1,2,2,2,1,2,2,2,1,0],[0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0],[0,2,1,1,1,1,1,1,1,1,1,2,1,1,1,2,0],[0,1,0,1,0,1,0,1,0,1,0,2,0,1,0,1,0],[0,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,0],[0,1,0,1,0,1,0,1,0,2,0,1,0,1,0,1,0],[0,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,0],[0,1,0,1,0,1,0,1,0,2,0,1,0,1,0,1,0],[0,1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,0],[0,1,0,2,0,1,0,1,0,1,0,1,0,1,0,2,0],[0,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]];

其中0表示的实心墙,1表示的是草地,2表示的是可以被炸毁的墙,所有数据和地图上的数据一一对应。

接下来就是创建二维数组,初始化地图,并将地图的数据传入到cell.js中

this.init=function () {//创建二维数组绘制地图var length = rowNum;for(var i=0;i<length;i++){cells[i]= [];var buffer=mapData[i];for(var j=0;j<buffer.length;j++){var cell = new Cell();cell.init(buffer[j],j*cellWidth,i*cellHight);cells[i][j]=cell;}}}

其中,

cell.init(buffer[j],j*cellWidth,i*cellHight);

buffer[j]表示地图中的数值,即0、1、2,后面的两个参数,表示的是横纵坐标。

接下来,看看cell.js需要做什么,其实,你也应该猜到了,我们现在已经获取了里面的数据,现在需要的是把数据用图片形式表示出来。

this.init=function (type1,cellX1,cellY1) {cellX=cellX1;cellY=cellY1;type= type1;//console.log(type);//console.log(cellX,cellY);cell =  new Image();switch(type){case 0:cell.src="./img/wall.png";break;case 1:cell.src="./img/floor.png";break;case 2:cell.src="./img/obstacle.png";break;}}

至此,一切都很清楚明了了,不同数据取得的图片路径不同,这时,只需要调用run方法绘制图片即可:

 this.run=function (paint) {paint.drawImage(cell,cellX,cellY,40,40);}

现在,绘制地图的主要业务逻辑已经出来了,源码已上传至GitHub地址:https://github.com/Violet-coco/Bomber,当然,还有一个es6版本的,有兴趣的小伙伴可以看看。

当然咯,就像我之前所说的,这个小游戏还是有很多需要进一步改进的地方,希望大家可以一起探讨学习!

js小游戏之经典炸弹人(1)--地图实现相关推荐

  1. js小游戏之经典炸弹人(2)--玩家的移动

    在js小游戏之经典炸弹人(1)--地图实现这篇文章中,我们已经实现了地图的绘制,接下来就来谈谈玩家是如何移动的呢? 实现玩家的移动主要依靠的是键盘事件onkeypress,我们要通过操作键盘控制玩家的 ...

  2. 是男人就要坚持30秒:原生JS小游戏

    在继之前完成的数个JavaScript demo后,我发现我还没有写过JS小游戏,这次呢,我就来分享一个,非常经典的"是男人就要坚持30s"的小游戏.当然我肯定 is a man, ...

  3. html5走格子游戏,JS/HTML5游戏常用算法之碰撞检测 地图格子算法实例详解

    JS/HTML5游戏常用算法之碰撞检测 地图格子算法实例详解 发布时间:2020-09-26 20:42:24 来源:脚本之家 阅读:112 作者:krapnik 本文实例讲述了JS/HTML5游戏常 ...

  4. 100行JS代码实现❤坦克大战js小游戏源码 HTML5坦克大战游戏代码(HTML+CSS+JavaScript )

    坦克大战js小游戏源码 HTML5坦克大战游戏代码(HTML+CSS+JavaScript ) HTML5坦克大战网页小游戏,完美还原小霸王学习机效果,以坦克战斗及保卫基地为主题,属于策略型类游戏. ...

  5. js小游戏 (飞行的小鸟--canvas)

    js小游戏 (飞行的小鸟) 这个里面用到的主要是 canvas 绘图 <!DOCTYPE html> <html><head><meta charset=&q ...

  6. js小游戏动物连连看代码

    下载地址 js小游戏动物连连看代码,有多种语言切换,默认是中文.不用部署本地解压即可预览. dd:

  7. 糖果粉碎js小游戏代码

    下载地址 糖果粉碎js小游戏代码,糖果消消乐小游戏源码下载. dd:

  8. 【JavaScript】(一)解读一个js小游戏

    [前言] 离公司近的好处,就在于每天都能利用自己的下班时间,更好地查漏补缺,充实技能. 最近小编做的项目需要写js偏多,而我不擅长写前端js,利用工作之余,开始学习,下面通过一个成型的js小游戏,开始 ...

  9. JS小游戏 - 盖房子

    写这个JS,源于CSDN上看到的一道思考题,挺有趣的一个算法,于是根据规则写了这个JS. < html > < head >      < title > JS小游 ...

最新文章

  1. golang mysql商业用例_完美起航-golang操作mysql用例
  2. 十三、流程控制之if语句
  3. 004-全局应用程序类Global.asax
  4. vue05-REST 请求
  5. 每日Ubuntu小技巧 - 在Ubuntu上面安装VMware Workstation
  6. 计算机点关机无法关闭主机,老司机教你电脑关机关不了怎么办
  7. MAC编译OpenJDK8:error: invalid argument ‘-std=gnu++98‘ not allowed with ‘C‘
  8. 【SDPVRP问题】基于遗传算法求解同时取送货的车辆路径问题含Matlab代码
  9. dirent struct,在struct dirent可以文件名有非标准字符?
  10. 04-fliqlo时钟屏保安装
  11. 阿里专家问答丨人工智能/机器学习技术在电商场景下的应用
  12. 从修身齐家治国平天下谈分布式系统中的限流与熔断
  13. AutoLeaders控制组——51单片机学习笔记(AD/DA、红外遥控)
  14. 治愈系课程教材 第三课
  15. 使用RxJava的retryWhen操作符实现token过期自动刷新
  16. Measurement Studio 2019 for Visual Studio 2019
  17. 计算机专业中agp是什么意思,计算机的主板,cpu,内存,显卡,硬盘的主要用途是什么?它们的单位都是什么意思?...
  18. js:在浏览器中使用原生的 ESM
  19. 美国计算机游戏设计专业排名,2018美国游戏设计留学院校排名
  20. 如何利用网络营销技巧推广中医平台?

热门文章

  1. (Windows) DISM备份还原
  2. Rust写的操作系统-Redox杂记(1)
  3. Web服务器、应用程序服务器、HTTP服务器区别
  4. 致刚入行的前端工程师
  5. Python中字典的基本用法
  6. 【 js中通过键盘上下左右移动图片】
  7. ant-design-vue vue2图标选择器
  8. 西瓜书决策树实现(基于ID3)补充——采用自定义数据结构实现
  9. windows mobile 资源
  10. 手把手教你可转债打新