基于jquery的地址栏射击游戏代码


Posted in Javascript onMarch 10, 2011

演示地址:http://demo.3water.com/js/2011/hunt/index.htm

玩法向下看
请看地址栏上的字母 O! 你使用O来向 a射击。 使用键盘上的 左箭头 和 右箭头 移动字母O. 当O移动到 a 上时,按 空格键射击! 游戏会定时30秒时间,按ESC键重新开始。
注:请使用系统自带的IE浏览器来打开本链接。

基于jquery的地址栏射击游戏代码

你使用O来向 a射击。 使用键盘上的 左箭头 和 右箭头 移动字母O. 当O移动到 a 上时,按 空格键射击! 
基于jquery的地址栏射击游戏代码
核心代码:
(function() { 
var Animal, Game; 
var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }; 
Game = (function() { 
function Game() { 
this.eventReceived = __bind(this.eventReceived, this);; 
this.update = __bind(this.update, this);; this.level = 1; 
this.levelSize = 60; 
this.playerLocation = this.levelSize / 2; 
this.start(); 
} 
Game.prototype.start = function() { 
var num; 
this.points = 0; 
this.startTime = new Date; 
this.timeLimit = 30; 
this.animals = []; 
for (num = 4; num >= 1; num--) { 
this.addAnimal(); 
} 
return this.interval = setInterval(this.update, 1000 / 30); 
}; 
Game.prototype.gameOver = function() { 
clearInterval(this.interval); 
return location.hash = "在" + (this.elapsedTime()) + "秒中你共射中了" + this.points + "个a! (按ESC键重新开始)"; 
}; 
Game.prototype.elapsedTime = function() { 
return Math.floor(((new Date).getTime() - this.startTime.getTime()) / 1000); 
}; 
Game.prototype.addAnimal = function() { 
var animal; 
animal = new Animal(Math.floor(Math.random() * this.levelSize)); 
return this.animals.push(animal); 
}; 
Game.prototype.removeAnimal = function(deadAnimal) { 
var animal; 
return this.animals = (function() { 
var _i, _len, _ref, _results; 
_ref = this.animals; 
_results = []; 
for (_i = 0, _len = _ref.length; _i < _len; _i++) { 
animal = _ref[_i]; 
if (animal !== deadAnimal) { 
_results.push(animal); 
} 
} 
return _results; 
}).call(this); 
}; 
Game.prototype.isAnimalAt = function(position) { 
var animal, matches; 
matches = (function() { 
var _i, _len, _ref, _results; 
_ref = this.animals; 
_results = []; 
for (_i = 0, _len = _ref.length; _i < _len; _i++) { 
animal = _ref[_i]; 
if (Math.floor(animal.position) === position) { 
_results.push(animal); 
} 
} 
return _results; 
}).call(this); 
return matches[0]; 
}; 
Game.prototype.update = function() { 
var animal, position, timeLeft, url, _i, _len, _ref; 
url = []; 
_ref = this.animals; 
for (_i = 0, _len = _ref.length; _i < _len; _i++) { 
animal = _ref[_i]; 
animal.update(this.levelSize); 
} 
while (url.length < this.levelSize) { 
position = url.length; 
if (position === this.playerLocation) { 
if (this.isAnimalAt(this.playerLocation)) { 
url.push("@"); 
} else { 
url.push("O"); 
} 
} else if (this.isAnimalAt(position)) { 
url.push("a"); 
} else { 
url.push("-"); 
} 
} 
timeLeft = this.timeLimit - this.elapsedTime(); 
if (timeLeft <= 0) { 
return this.gameOver(); 
} else { 
if (timeLeft < 10) { 
timeLeft = "0" + timeLeft; 
} 
location.hash = (" " + timeLeft + "|") + url.join("") + ("|" + timeLeft); 
return document.title = "Points " + this.points; 
} 
}; 
Game.prototype.eventReceived = function(event) { 
var animal; 
switch (event.which) { 
case 37: 
this.playerLocation -= 1; 
if (this.playerLocation < 0) { 
return this.playerLocation = this.levelSize - 1; 
} 
break; 
case 39: 
this.playerLocation += 1; 
return this.playerLocation %= this.levelSize; 
case 38: 
case 32: 
animal = this.isAnimalAt(this.playerLocation); 
if (animal) { 
this.points += 1; 
this.removeAnimal(animal); 
console.log(this.animals.length); 
if (this.animals.length === 0) { 
return this.gameOver(); 
} 
} 
break; 
case 27: 
return this.start(); 
} 
}; 
return Game; 
})(); 
Animal = (function() { 
function Animal(position) { 
this.position = position; 
this.velocityChange = Math.random() * 0.5; 
this.velocityIndex = Math.random() * Math.PI; 
this.dampener = 0.4; 
} 
Animal.prototype.update = function(levelSize) { 
this.velocityIndex += Math.random() * this.velocityChange; 
this.position += Math.sin(this.velocityIndex) * this.dampener; 
this.position %= levelSize; 
if (this.position < 0) { 
return this.position += levelSize; 
} 
}; 
return Animal; 
})(); 
$(function() { 
var game; 
game = new Game(); 
return $(document).keydown(game.eventReceived); 
}); 
}).call(this);
Javascript 相关文章推荐
JS 实现双色表格实现代码
Nov 24 Javascript
JavaSciprt中处理字符串之sup()方法的使用教程
Jun 08 Javascript
ECMAScript6块级作用域及新变量声明(let)
Jun 12 Javascript
JavaScript中的操作符类型转换示例总结
May 30 Javascript
AngularJS 单元测试(一)详解
Sep 21 Javascript
jquery popupDialog 使用 加载jsp页面的方法
Oct 25 Javascript
基于JavaScript实现本地图片预览
Feb 08 Javascript
javaScript日期工具类DateUtils详解
Dec 08 Javascript
js解决软键盘遮挡输入框的问题分享
Dec 19 Javascript
如何能分清npm cnpm npx nvm
Jan 17 Javascript
vue各种事件监听实例(小结)
Jun 24 Javascript
js实现飞机大战小游戏
Aug 26 Javascript
基于jquery的无缝循环新闻列表插件
Mar 07 #Javascript
JavaScript对象之间的转换 jQuery对象和原声DOM
Mar 07 #Javascript
jQuery总体架构的理解分析
Mar 07 #Javascript
关于捕获用户何时点击window.onbeforeunload的取消事件
Mar 06 #Javascript
js中将具有数字属性名的对象转换为数组
Mar 06 #Javascript
js 优化次数过多的循环 考虑到性能问题
Mar 05 #Javascript
淘宝搜索框效果实现分析
Mar 05 #Javascript
You might like
比较discuz和ecshop的截取字符串函数php版
2012/09/03 PHP
基于PHP编程注意事项的小结
2013/04/27 PHP
php解析xml 的四种简单方法(附实例)
2016/07/11 PHP
详解yii2实现分库分表的方案与思路
2017/02/03 PHP
Laravel中日期时间处理包Carbon的简单使用
2017/09/21 PHP
CL vs ForZe BO5 第一场 2.13
2021/03/10 DOTA
更正确的asp冒泡排序
2007/05/24 Javascript
javascipt匹配单行和多行注释的正则表达式
2013/11/20 Javascript
javascript实现简单的Map示例介绍
2013/12/23 Javascript
jQuery圆形统计图开发实例
2015/01/04 Javascript
jquery实现图片列表鼠标移入微动
2016/12/01 Javascript
JavaScript高阶函数_动力节点Java学院整理
2017/06/28 Javascript
微信小程序图片轮播组件gallery slider使用方法详解
2018/01/31 Javascript
使用watch监听路由变化和watch监听对象的实例
2018/02/24 Javascript
Vue的watch和computed方法的使用及区别介绍
2018/09/06 Javascript
详解angularjs4部署文件过大解决过程
2018/12/05 Javascript
layui将table转化表单显示的方法(即table.render转为表单展示)
2019/09/24 Javascript
html+vue.js 实现漂亮分页功能可兼容IE
2020/11/07 Javascript
[54:26]完美世界DOTA2联赛PWL S3 Forest vs Rebirth 第一场 12.10
2020/12/12 DOTA
Python标准库之随机数 (math包、random包)介绍
2014/11/25 Python
利用Python为iOS10生成图标和截屏
2016/09/24 Python
在 Pycharm 安装使用black的方法详解
2020/04/02 Python
HTML5 WebGL 实现民航客机飞行监控系统
2019/07/25 HTML / CSS
澳大利亚家具和家居用品在线:BROSA
2017/11/02 全球购物
阿根廷票务网站:StubHub阿根廷
2018/04/13 全球购物
沃达丰英国有限公司:Vodafone英国
2019/04/16 全球购物
某同学的自我鉴定范文
2013/12/26 职场文书
护理目标管理责任书
2014/07/25 职场文书
2014年英语教研组工作总结
2014/12/06 职场文书
离婚协议书范文2014(夫妻感情破裂)
2014/12/14 职场文书
担保书范文
2015/01/20 职场文书
中秋客户感谢信
2015/01/22 职场文书
三下乡活动心得体会
2016/01/23 职场文书
Redis高可用集群redis-cluster详解
2022/03/20 Redis
python实现手机推送 代码也就10行左右
2022/04/12 Python
windows10声卡驱动怎么安装?win10声卡驱动安装操作步骤教程
2022/08/05 数码科技