参考:

1、image onload事件:http://www.runoob.com/jsref/event-img-onload.html(赞)

2、canvas的drawImage无法显示图像:https://segmentfault.com/q/1010000002877796

(尝试setInterval(render, 10);就会发现图片显示出来了。)

3、addeventlistener的捕获与冒泡:https://my.oschina.net/u/867090/blog/387380

4、取整方案:http://www.cnblogs.com/pigtail/archive/2012/03/28/2421614.html

5、二维数组:http://www.cnblogs.com/ymwangel/p/5875081.html

5、发现网上已经有很多人写了:http://www.qdfuns.com/notes/13275/a66ea9c091c5cc4d0007abaf83d223ca:storey-21

6、随机迷宫算法:随机迷宫算法http://bbs.9ria.com/thread-156150-1-1.html

mytest.js

// Create the canvas
var canvas = document.createElement("canvas");
var ctx = canvas.getContext("2d");
canvas.width = 800;
canvas.height = 550; canvas.style.position = "absolute";
canvas.style.left = "calc(50% - 350px)";
canvas.style.top = "calc(50% - 275px)"; document.body.appendChild(canvas); // load images
var bgImage = new Image();
bgImage.src = "images/background.png"; var heroImage = new Image();
heroImage.src = "images/hero.png"; var wallImage = new Image();
wallImage.src = "images/wall.png"; // Game data
var hero = {
x: 0,
y: 0
}; var aa = new Array(); //定义一维数组
for(i = -1; i <= 14; i++) {
aa[i] = new Array(); //将每一个子元素又定义为数组
for(j = -1; j <= 13; j++) {
aa[i][j] = false;
}
} var x2 = 0;
var y2 = 0;
var notWall = function(x , y) {
return !aa[x][y];
} // random labyrinth // Game data init
var reset = function() {
// hero init
hero.x = 100;
hero.y = 100; // wall init
for(i = 0; i <= 13; i++) {
for(j = 0; j <= 12; j++) {
aa[i][j] = Math.random() > 0.5 ? true : false;
}
}
} // Game expression
var render = function() {
// draw background
ctx.drawImage(bgImage, 0, 0, 800, 550); // draw hero
ctx.drawImage(heroImage, hero.x, hero.y); // draw wall
for (m = 0; m <= 13; ++m)
for (n = 0; n <= 12; ++n)
if (aa[m][n]) ctx.drawImage(wallImage, 50*m+60, 36.5*n+40);
ctx.fillText("hero positon: x=" + hero.x + ",y=" + hero.y, 100, 100);
} var speed = 4;
addEventListener("keydown", function (e) {
x2 = Math.floor((hero.x-44)/50);
y2 = Math.floor((hero.y-32)/34.9);
if (e.key == "ArrowUp" && hero.y > 32 && notWall(x2 , y2-1)) {
hero.y -= speed;
}
if (e.key == "ArrowDown" && hero.y < canvas.height - 73 && notWall(x2 , y2+1)) {
hero.y += speed;
}
if (e.key == "ArrowLeft" && hero.x > 44 && notWall(x2-1 , y2)) {
hero.x -= speed;
}
if (e.key == "ArrowRight" && hero.x < canvas.width - 73 && notWall(x2+1 , y2)) {
hero.x += speed;
}
}, false); var testGame = function() {
reset();
setInterval(render, 13);
} testGame();

【JavaScript】canvas实现一个小游戏的更多相关文章

  1. 使用PixiJS做一个小游戏

    PixiJS PixiJS使用WebGL,是一个超快的HTML5 2D渲染引擎.作为一个Javascript的2D渲染器,Pixi.js的目标是提供一个快速的.轻量级而且是兼任所有设备的2D库. 官方 ...

  2. 用javascript实现2048的小游戏

    前段时间,看了一个视频,用javascript实现的2048小游戏,发现不难,都是一些基出的语法和简单逻辑. 整个2048游戏没有很多的数据,所有,实现起来还是很有成就感的. 先上图,简直就和原版游戏 ...

  3. js实现一个小游戏(飞翔的jj)

    js实现一个小游戏(飞翔的jj) 源代码+素材图片在我的仓库 <!DOCTYPE html> <html lang="en"> <head> & ...

  4. 10分钟,利用canvas画一个小的loading界面

    首先利用定义下canvas得样式 <canvas width="1024" height="720" id="canvas" styl ...

  5. Pygame:编写一个小游戏 标签: pythonpygame游戏 2017-06-20 15:06 103人阅读 评论(0)

    大学最后的考试终于结束了,迎来了暑假和大四的漫长的"自由"假期.当然要自己好好"玩玩"了. 我最近在学习Python,本意是在机器学习深度学习上使用Python ...

  6. DirectX游戏开发——从一个小游戏開始

    本系列文章由birdlove1987编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhurui_idea/article/details/26364129 写在前面:自 ...

  7. 从零开始手把手教你使用javascript+canvas开发一个塔防游戏01地图创建

    项目演示 项目演示地址: 体验一下 项目源码: 项目源码 代码结构 本节做完效果 游戏主页面 index.html <!DOCTYPE html PUBLIC "-//W3C//DTD ...

  8. JavaScript+HTML5 实现打地鼠小游戏

    一.游戏简介 打地鼠这个游戏相信大家都不陌生,也是童年时候一款经典的游戏.本次游戏的编写是以html文件形式完成的,并且使用HBulider软件进行编写,使用谷歌浏览器展示效果,游戏将会采用JavaS ...

  9. 使用JavaScript实现简单的小游戏-贪吃蛇

    最近初学JavaScript,在这里分享贪吃蛇小游戏的实现过程, 希望能看到的前辈们能指出这个程序的不足之处. 大致思路 首先要解决的问题 随着蛇头的前进,尾巴也要前进. 用键盘控制蛇的运动方向. 初 ...

随机推荐

  1. ORB特征提取与匹配

    ORB特征是目前最优秀的特征提取与匹配算法之一,下面具体讲解一下: 特征点的检测 图像的特征点可以简单的理解为图像中比较显著显著的点,如轮廓点,较暗区域中的亮点,较亮区域中的暗点等.ORB采用FAST ...

  2. AWS系列-磁盘扩容

    1 磁盘扩容 1.1 卷介绍 aws磁盘扩容有两个方式 1.购买新的磁盘,挂载到相应的目录 2.原来磁盘做快照,购买新的磁盘,选择恢复快照到硬盘上,这样相当于,从一块硬盘上50G升级到100G 说到a ...

  3. Android无线测试之—UiAutomator UiScrollable API介绍二

    快速滑动 一.快速滑动相关概念 1.步长:从一点滑动到另一点所用的时间 2.扫动次数:例如列表,要滑动多少次才能到底部,这个滑动次数就是扫动次数 二.相关API 返回值 API 描述 boolean ...

  4. Android 中替代 sharedpreferences 工具类的实现

    Android 中替代 sharedpreferences 工具类的实现 背景 想必大家一定用过 sharedpreferences 吧!就我个人而言,特别讨厌每次 put 完数据还要 commit. ...

  5. MVC 发布程序 HTTP 错误 403.14 - Forbidden 及 HTTP 错误 404.2 - Not Found

    新建立的MVC项目发布程序后会浏览网站可能会有问题 这时不要去按照系统提示打开“目录浏览”,而是应该去做一些配置 具体步骤: 1:配置web.Config <system.webServer&g ...

  6. Java日志记录工具SLF4J介绍

    SLF4J是什么 SLF4J是一个包装类,典型的facade模式的工具,对用户呈现统一的操作方式,兼容各种主流的日志记录框架,典型的有log4j/jdk logging/nop/simple/jaka ...

  7. visual studio 下 C++生成dump文件

    1 lib配置 项目-->属性-->配置属性-->链接器-->输入-->附加依赖项 增加dbghelp.lib 2 头文件 #include <imagehlp.h ...

  8. 【转】spring和springMVC的面试问题总结

    1.Spring中AOP的应用场景.Aop原理.好处? 答:AOP--Aspect Oriented Programming面向切面编程:用来封装横切关注点,具体可以在下面的场景中使用: Authen ...

  9. 编译Elasticsearch源码

    1.从github上clone  es的源码 git clone https://github.com/elastic/elasticsearch.git 2.如果没有安装gradle的话,需要安装g ...

  10. mysql乐观锁总结和实践(转)

    原文:mysql乐观锁总结和实践 上一篇文章<MySQL悲观锁总结和实践>谈到了MySQL悲观锁,但是悲观锁并不是适用于任何场景,它也有它存在的一些不足,因为悲观锁大多数情况下依靠数据库的 ...