参考:

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. Oracle体系机构

    Oracle 体系结构1.文件:数据库组成和实例文件;2.系统全局区:SGA内存结构,SGA PGA UGA关,也研究SGA和java池,共享池和大部分的池;3.物理进程和线程 server进程 ba ...

  2. svn管理的项目迁移到tfs

    1.将.vs  .svn文件夹删除 2.连接tfs,签入代码

  3. Wex5循环某个div节点下的所有img标签,替换其src属性值

    Model.prototype.newsDetailAfterRefresh = function(event){ var newsDiv = this.getElementByXid("n ...

  4. C语言数据类型大小

    数据类型大小是由操作系统和编译器共同决定的,但必须满足: short和int至少为16bit:long至少为32bit: short不能超过int,int不能超过long. 在主流编译器中,32位机和 ...

  5. hdu 4055(经典问题)

    总是不能正确的将一个大问题变成子问题,而且又找不到状态转移方程. 直接导致这题想了5个小时最后还是无果... 谨记! Number String Time Limit: 10000/5000 MS ( ...

  6. [转]python-元类

    转载于:刘羽冲 两句话掌握python最难知识点——元类 千万不要被所谓“元类是99%的python程序员不会用到的特性”这类的说辞吓住.因为每个中国人,都是天生的元类使用者 学懂元类,你只需要知道两 ...

  7. 170227、java分布式系统开关功能设计(服务升降级)

    首先讲一下开关的由来,例如东京在6月18日做店庆促销活动,在交易下单环节,可能需要调用A.B.C三个接口来完成,但是其实A和B是必须的,C只是附加的功能(例如在下单的时候做一下推荐),可有可无,在平时 ...

  8. 【IDEA】重装基本设置+插件安装

    基本配置:2.1 显示:2.1.1.选中展示Toolbar2.1.2.显示内存占用:2.1.3.显示行号和方法线:2.1.4.代码软分行:2.2.修改快捷键:2.2.1 修改Ctrl + D 快捷键: ...

  9. 如何cancel掉慢查询

    百度Elasticsearch-产品描述-介绍-百度云 https://cloud.baidu.com/doc/BES/FAQ.html#.E5.A6.82.E4.BD.95cancel.E6.8E. ...

  10. gunicorn

    https://blog.csdn.net/jailman/article/details/78496522 gunicorn工作原理 Gunicorn“绿色独角兽”是一个被广泛使用的高性能的Pyth ...