JS小游戏:贪吃蛇(附源码)
javascript小游戏:贪吃蛇
此小游戏采用的是面向对象的思想,将蛇,食物,和游戏引擎分为3个对象来写的。
为方便下载,我把js写在了html中,
源码中暂时没有注释,等有空我在添加点注释吧。
游戏玩法:直接打开html文件即可开始游戏,用键盘的上下左右键控制蛇的移动。
代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>贪吃蛇</title>
<style type="text/css">
*{
margin:0; padding:0;
}
#tab{
margin:50px auto;
border:1px solid #000;
border-collapse:collapse;
}
#tab td{
width:20px; height:20px;
border:1px solid #555;
}
.cover{
background:#000;
}
.food{
background:#f00;
}
</style>
<script src="../js/common.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
window.onload = function(){ var tab = document.getElementById('tab'); for(var i = 0;i<20;i++){
var temptr = document.createElement('tr');
for(var j = 0;j<20;j++){
var temptd = document.createElement('td');
temptr.appendChild(temptd);
}
tab.appendChild(temptr);
} new Game().start();
} function Game(){ if(Game.instance) {
return Game.instance;
} var self = this;
this.flag = true;
this.keyJudge = true;
this.body = $('#tab');
this.start = function(){ this.flag = true;
new food().show();
this.snk = new snake().print().move();
this.listener(); }
this.stop = function(){ this.flag = false;
alert("Game Over!"); } this.getDom = function(pos){ return this.body.children[pos.row].children[pos.col];
} this.listener = function(){ document.addEventListener("keydown",function(e){
if(self.keyJudge == true){ switch(e.keyCode){ case 37: self.snk.dir = self.snk.dir ==3? 3:1; break;
case 38: self.snk.dir = self.snk.dir ==4? 4:2; break;
case 39: self.snk.dir = self.snk.dir ==1? 1:3; break;
case 40: self.snk.dir = self.snk.dir ==2? 2:4; break; }
self.keyJudge = false; } }); } Game.instance = this; } function snake(){ var self = this;
this.body = [{row:randomInt(0,19),col:randomInt(0,19)}];
this.dir = randomInt(1,4); this.print = function(){ this.body.forEach(function(pos){ new Game().getDom(pos).className = "cover"; }); return this; } this.step = function(){ switch(this.dir){ case 1: this.next = {col:this.body[0].col-1,row:this.body[0].row}; break;
case 2: this.next = {col:this.body[0].col, row:this.body[0].row-1}; break;
case 3: this.next = {col:this.body[0].col+1, row:this.body[0].row}; break;
case 4: this.next = {col:this.body[0].col, row: this.body[0].row+1}; break; } if(this.next.col<0||this.next.col>19||this.next.row<0||this.next.row>19){ new Game().stop(); }else if(new Game().getDom(this.next).className == "food"){ this.body.unshift(this.next);
new food().show(); }else if(new Game().getDom(this.next).className == "cover"){ new Game().stop(); }else{ this.body.unshift(this.next);
var del = this.body.pop();
new Game().body.children[del.row].children[del.col].className = ""; } this.print(); return this;
} this.move = function(){ this.speed = 300;
setTimeout(function(){ switch(self.body.length){ case 5: self.speed = 250; break;
case 10: self.speed = 200; break;
case 15: self.speed = 150; break;
case 20: self.speed = 100; break;
case 30: self.speed = 70; } if(new Game().flag ){
self.step();
new Game().keyJudge = true;
setTimeout(arguments.callee,self.speed);
} }.bind(this),self.speed) return this;
} } function food(){ this.show = function(){ this.body = {row:randomInt(0,19),col:randomInt(0,19)}; while(new Game().getDom(this.body).className == "cover"){
this.body = {row:randomInt(0,19),col:randomInt(0,19)};
} new Game().getDom(this.body).className = "food"; return this; } } </script>
</head>
<body>
<table id = "tab" >
</table>
</body>
</html>
JS小游戏:贪吃蛇(附源码)的更多相关文章
- Ruby for Sketchup 贪吃蛇演示源码(naive_snake)
sketchup是非常简单易用的三维建模软件,可以利用ruby 做二次开发, api文档 http://www.rbc321.cn/api 今天在su中做了一款小游戏 贪吃蛇,说一下步骤 展示 主要思 ...
- JS/Jquery版本的俄罗斯方块(附源码分析)
转载于http://blog.csdn.net/unionline/article/details/63250597 且后续更新于此 1.前言 写这个jQuery版本的小游戏的缘由在于我想通过从零到有 ...
- JavaScript面向对象编程小游戏---贪吃蛇
1 面向对象编程思想在程序项目中有着非常明显的优势: 1- 1 代码可读性高.由于继承的存在,即使改变需求,那么维护也只是在局部模块 1- 2 维护非常方便并且成本较低. 2 这个demo是采用了 ...
- 第一个windows 小游戏 贪吃蛇
最近用dx尝试做了一个小的贪吃蛇游戏,代码放到github上面:https://github.com/nightwolf-chen/MyFreakout 说一下自己实现的过程: 首先,我把蛇这个抽象成 ...
- Java经典小游戏——贪吃蛇简单实现(附源码)
一.使用知识 Jframe GUI 双向链表 线程 二.使用工具 IntelliJ IDEA jdk 1.8 三.开发过程 3.1素材准备 首先在开发之前应该准备一些素材,已备用,我主要找了一个图片以 ...
- 使用JS制作小游戏贪吃蛇
先看效果图: 过程如下: 1.首先创建一张画布地图<div class="map"> </div>: 2.创建食物的自调用函数 (function (){ ...
- 手把手教学h5小游戏 - 贪吃蛇
简单的小游戏制作,代码量只有两三百行.游戏可自行扩展延申. 源码已发布至github,喜欢的点个小星星,源码入口:game-snake 游戏已发布,游戏入口:http://snake.game.yan ...
- 使用JavaScript实现简单的小游戏-贪吃蛇
最近初学JavaScript,在这里分享贪吃蛇小游戏的实现过程, 希望能看到的前辈们能指出这个程序的不足之处. 大致思路 首先要解决的问题 随着蛇头的前进,尾巴也要前进. 用键盘控制蛇的运动方向. 初 ...
- 用Canvas制作小游戏——贪吃蛇
今天呢,主要和小伙伴们分享一下一个贪吃蛇游戏从构思到实现的过程~因为我不是很喜欢直接PO代码,所以只copy代码的童鞋们请出门左转不谢. 按理说canvas与其应用是老生常谈了,可我在准备阶段却搜索不 ...
- JavaScript 小游戏 贪吃蛇
贪吃蛇 代码: <!DOCTYPE html><html><head> <meta charset="UTF-8"> <met ...
随机推荐
- ConvertUtils.register注册转换器
当用到BeanUtils的populate.copyProperties方法或者getProperty,setProperty方法其实都会调用convert进行转换 但Converter只支持一些基本 ...
- hdu 4057--Rescue the Rabbit(AC自动机+状压DP)
题目链接 Problem Description Dr. X is a biologist, who likes rabbits very much and can do everything for ...
- Jquery qTip2实现多种提示效果,支持ajax,以及多种样式
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- #云栖大会# 移动安全专场——APP渠道推广作弊攻防那些事儿(演讲速记)
导语: 如今,移动互联网浪潮进入白热化竞争态势,APP渠道传播成为很多企业常用的推广方式,APP推广费用也在水涨船高,从PC时代的一个装机0.5元到1元不等,到移动互联网时代的5元,甚至几十元,但为什 ...
- scala中的Type使用
trait Base { val name: String } case class S( name: String, age: Int ) extends Base case class F( na ...
- iOS中单例需要注意的
单例模式怎么定义的,可能在不同的语言,不同的书中不完全一样,但是概况开来都应该是:一个类有且仅有一个实例,并且自行实例化向整个系统提供. 因此,首先你可能需要确定你是真的需要一个单例类,还是说仅仅是需 ...
- 多线程(RunLoop)
1.RunLoop的概念及作用 2.RunLoop的使用 3.RunLoop的相关类 4.RunLoop的工作原理 5.小结 6.思考 什么是RunLoop? 从字面意思上是一直循环跑,事实上就是一个 ...
- PHP 注释 数据类型 变量的定义/输出 类型的获取/转换 可变变量
注释方法: 1,单行注释: // 2, 多行注释: /* */ 二,数据类型 1,integer(整数型):在三十二位操作系统中它的有效范围是:-2147483648~+2147 ...
- 我的three.js学习记录(三)
此次的亮点不是three.js的3d部分,而是通过调用摄像头然后通过摄像头的图像变化进行简单的判断后进行一些操作.上篇中我通过简单的示例分析来学习three.js,这次是通过上一篇的一些代码来与摄像头 ...
- win10 uwp 车表盘 径向规
车表盘就是有刻度的圆盘加上针,这个控件可以直观让用户知道当前的速度或其他 看名字不知道是什么,我就放一张图 使用很简单,在Nuget,Radial Gauge 要使用大神做的,简单,在使用我们需要在N ...