参考:

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. 【BZOJ】3404: [Usaco2009 Open]Cow Digit Game又见数字游戏(博弈论)

    http://www.lydsy.com/JudgeOnline/problem.php?id=3404 写挫好几次.... 裸的博弈论即可.. #include <cstdio> #in ...

  2. redhat ent6.5使用centos yum

    转载自:http://blog.csdn.net/zhngjan/article/details/20843465 搜狐镜像库:mirrors.sohu.com 163镜像库:mirrors.163. ...

  3. secureCRT连接不上linux的当中一个最大的原因

    之前secureCRT一直连接不上linux(我的linux版本号是Ubuntu14.04.2.用的是VirtualBox).在网上找了各种办法.但是都解决不了我的问题! 网上的解决的方法不是说没有开 ...

  4. 【ARIMA】Autoregressive Integrated Moving Average Model

    [理论部分] ARIMA包含两部分,自回归AR和移动平均MA: AR:Y(t)-a=b(1){Y(t-1)-a}+u(t)   其中a是y的均值, u(t)是均值为零,恒定方差的不相关随机误差项(噪声 ...

  5. 【分享】Collecting all the cheat sheets

    http://overapi.com/   这个网站可以查询到所有与编程相关的各种技术,并给出详细的知识点(干货).

  6. hdu 2167(状压dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2167 思路:经典的状压dp题,前后,上下,对角8个位置不能取,状态压缩枚举即可所有情况,递推关系是为d ...

  7. ObjectTools反射实例

    ObjectTools反射实例 package com.shitou.deposit.chinapnr.utils; import org.apache.commons.logging.Log; im ...

  8. LNK2005 _DllMain@12 mfcs100d.lib

    起因是将之前使用 MFC 规则 DLL 的动态库都改为了 MFC 扩展 DLL,在将动态库中从 CWinApp 继承的类替换为 DllMain 函数后,就出现 LNK2005 错误,说 DllMain ...

  9. 【BZOJ4421】[Cerc2015] Digit Division 动态规划

    [BZOJ4421][Cerc2015] Digit Division Description 给出一个数字串,现将其分成一个或多个子串,要求分出来的每个子串能Mod M等于0. 将方案数(mod 1 ...

  10. 获取当前日期和农历的js代码

    来自:http://www.cnblogs.com/Gnepner/archive/2011/09/07/2169822.html 获取当前日期 getToday.js: function GetCu ...