javascript飞机大战-----009游戏结束
/*
游戏引擎
*/
var Engine = {
//刚开始的游戏状态
gameStatus:false,
//所以敌机
enemy:{},
//子弹
bullet:{},
//得分
scroe:0,
//背景图片
game:document.querySelector('.game'),
//页面得分
textScroe:document.querySelector('.score'), //初始化
init:function(){
this.gameStart();
},
//游戏开始
gameStart:function(){
var _this = this;
//点击图片的时候判断游戏状态
this.game.onclick = function(){
if(!_this.gameStatus){
_this.gameStatus = true;
//移动移动
_this.bgMove();
_this.handleMove();
_this.createPlane();
}
}
},
//背景移动
bgMove:function(){
var y=0;
var _this = this;
this.bgTimer = setInterval(function(){
y+=2;
_this.game.style['background-position-y']=y+'px';
},50)
},
createPlane:function(){
//创建敌机和英雄机
Hero.init(); //创建敌机
this.createTimer = setInterval(function(){
var num = parseInt(Math.random()*15)+1;
switch (num) {
case 1:
case 3:
case 5:
case 7:
case 9:
new SmallEnemy().init();
break;
case 2:
case 4:
case 6:
new MiddleEnemy().init();
case 8:
case 12:
new LargeEnemy().init(); }
},500)
},
//所有敌机和子弹都要动
handleMove:function(){
var _this=this;
this.moveTimer = setInterval(function(){
//创建所有子弹
for(var i in _this.bullet){
_this.bullet[i].move()
}
//c创建所有敌机动
for(var i in _this.enemy){
_this.enemy[i].move()
} },30)
},
//碰撞检测
isCompact:function(obj1,obj2){
var l1 = obj1.offsetLeft>obj2.offsetLeft+obj2.offsetWidth;
var l2 = obj2.offsetLeft>obj1.offsetLeft+obj1.offsetWidth;
var t1 = obj1.offsetTop>obj2.offsetTop+obj2.offsetHeight;
var t2 = obj2.offsetTop>obj1.offsetTop+obj1.offsetHeight;
if(l1||l2||t1||t2){
return false;
}else{
return true;
}
},
//更新得分
updateScroe:function(scroe){ this.scroe+=scroe; this.textScroe.innerHTML="分数"+this.scroe;
},
gameOver:function(){
//停止创建敌机
clearInterval(this.createTimer); //子弹停止
clearInterval(this.moveTimer);
}
};
Engine.init();
子弹停止
/*
英雄机:因为英雄机只有一辆所以不需要用构造函数
*/
var Hero = {
//初始图片
self:null,
//初始left
left:0,
//初始top
top:0,
//生命值
life:3,
//加载进来的图和爆照的图
imgs:['image/hero.gif','image/hero-bang.gif'],
//获得到自己的红星
allHero:document.querySelectorAll('.life>img'),
//初始化
init:function(){
//创建一个元素
var img = document.createElement('img');
//将图片路径赋值给它
img.src=this.imgs[0];
//插入到game中
Engine.game.appendChild(img);
//赋值给英雄机的初始图片
this.self = img;
//当图片加载完成以后获取图片的高度和宽度
var _this = this;//在函数里面this的指向会改变,所以我们提前报存下来
img.onload = function(){
//因为上面的属性有this.left所以我们应该和图片一样赋值给它
_this.left = (Engine.game.offsetWidth-img.offsetWidth)/2;//英雄机的left中心点等于(game的宽度-英雄机的宽度)除以2
_this.top = Engine.game.offsetHeight-img.offsetHeight;
img.style.left = _this.left+'px';
img.style.top = _this.top+'px';
//初始化的时候调用move
_this.move();
_this.shoot();
}; },
//鼠标移动的时候英雄机也要移动
move:function(){
//类似于放大镜
var _this = this;
document.onmousemove = function(e){
var e = e||event;
var l = e.clientX - Engine.game.offsetLeft - _this.self.offsetWidth/2;
var t = e.clientY - Engine.game.offsetTop - _this.self.offsetHeight/2;
//边界处理
var lmax = Engine.game.offsetWidth-_this.self.offsetWidth;//最大边界 var bmax = Engine.game.offsetHeight-_this.self.offsetHeight;//最大边界
l = l < 0 ? 0 : (l > lmax ? lmax : l);
t = t < 0 ? 0 : (t > bmax ? bmax : t); //赋值
_this.self.style.left = l+'px';
_this.self.style.top = t+'px'; //更新left top
_this.left = l;
_this.top = t;
}
},
//发子弹
shoot:function(){
//每隔100毫秒发一次子弹
var _this = this;
this.shootTimer = setInterval(function(){
var l = _this.left+_this.self.offsetWidth/2
new Bullet(l,_this.top).init();
},100)
},
bang:function(){
var img = document.createElement('img');
img.src = this.imgs[1];
img.style.left = this.left+'px';
img.style.top = this.top+'px';
Engine.game.appendChild(img)
setTimeout(function(){
img.remove();
},1000)
},
die:function(){
this.life--;
this.allHero = document.querySelectorAll('.life img');
this.allHero[0].remove(); console.log(this.allHeart,this.allHero[0])
if(this.life<=0){
this.destroy();
}
},
destroy:function(){
this.self.remove();
this.bang();
clearInterval(this.shootTimer);
//游戏结束
this.gameOver();
}
}
//在游戏没开始的时候不能出现英雄机和子弹所以要放在引擎里面
//Hero.init();
javascript飞机大战-----009游戏结束的更多相关文章
- javascript飞机大战-----002游戏引擎
基本html布局 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...
- canvas绘制“飞机大战”小游戏,真香!
canvas是ArkUI开发框架里的画布组件,常用于自定义绘制图形.因为其轻量.灵活.高效等优点,被广泛应用于UI界面开发中. 本期,我们将为大家介绍canvas组件的使用. 一.canvas介绍 1 ...
- 用面向对象的编程方式实现飞机大战小游戏,java版
概述 本文将使用java语言以面向对象的编程方式一步一步实现飞机大战这个小游戏 本篇文章仅供参考,如有写的不好的地方或者各位读者哪里没看懂可以在评论区给我留言 或者邮件8274551712@qq.co ...
- javascript飞机大战-----001分析
1.游戏引擎 首先要做飞机大战要考虑的是这个游戏被分成了哪几大部分?这样我们一块一块去做,特别清晰明了.那么接下来我们就简单的分析下飞机大战分成了哪几大部分 1.游戏引擎 2.英雄机 3.敌机 4.子 ...
- [知了堂学习笔记]_纯JS制作《飞机大战》游戏_第1讲(实现思路与游戏界面的实现)
整体效果展示: 一.实现思路 如图,这是我完成该项目的一个逻辑图,也是一个功能模块完成的顺序图. 游戏界面的完成 英雄飞机对象实现,在实现发射子弹方法过程中,又引出了子弹对象并实现.在此时,英雄飞机能 ...
- javascript 飞机大战完整代码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- javascript飞机大战-----0010完整版代码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- android:怎样用一天时间,写出“飞机大战”这种游戏!(无框架-SurfaceView绘制)
序言作为一个android开发人员,时常想开发一个小游戏娱乐一下大家,今天就说说,我是怎么样一天写出一个简单的"飞机大战"的. 体验地址:http://www.wandoujia. ...
- JavaScript—飞机大战
今天来写个游戏,飞机大战 1,布局 2,思路 1,动态创建自己的飞机 让它在规定的区域,跟着鼠标运动. 2,在自己飞机的上方,间隔1s生成子弹.子弹往上移动 当top:0 子弹消失 3,每隔1s 产生 ...
随机推荐
- 关于Cocos Studio制作游戏资源
没想到,Cocos Studio居然是做游戏资源的,而且可以做骨骼动画,虽然我还不会做,只能自己一个人慢慢研究了.学长以前说,Coocs Studio只是用来打包项目成Apk的,没有什么卵用,刚开始我 ...
- 关于VS2013常用到的快捷键
版本一 VS2013常用快捷键: 1.回到上一个光标位置/前进到下一个光标位置 1)回到上一个光标位置:使用组合键“Ctrl + -”: 2)前进到下一个光标位置:“Ctrl + Shift + - ...
- BCM_SDK命令
启动bcm的sdk,会进入一个类似shell的交互界面,在其中如入命令,可以配置交换机芯片.本文主要记录一下命令: 1.端口限速命令 2.链路聚合命令 3.i2c控制命令 启动方法: /tmp/bcm ...
- vector push_back报错
场景:定义了一个结构体,包含一个vector的成员变量,在给这个vTQ push_back数据的时候报错. typedef struct tag_TQInfo { int iTime; int iMa ...
- 一、Open CV3.0.0 与 VS2012配置
原创:博乐Bar,转载请注明出处. 第一步,准备软件及开发环境 1.OpenCV 3.0.0 下载地址:http://www.opencv.org.cn/index.php/Download ,下载最 ...
- c++获取cpu信息
原文地址:http://blog.csdn.net/jamesliulyc/article/details/2028958 1.什么是cpuid指令 CPUID指令是intel IA32架构下获得CP ...
- Win10開始菜单打不开
一.前言 自从用Win10之后(附上<我的Win10之旅>).用清理软件.总是深度清理,导致rt问题. 每次百度都是没用的解决方法: 今天,再一次清理(Wise Care 365 注冊表深 ...
- android 沉浸式状态栏(像ios那样的状态栏与应用统一颜色样式)
这个特性是andorid4.4支持的,最少要api19才干够使用.以下介绍一下使用的方法,很得简单: 添加一个demo源代码: https://github.com/ws123/StatusDemo ...
- logging.xml file setfile(null,true) call failed
定义目录三个方法:一:${catalina.base}或${catalina.home}相对路径配置方法.catalina.home是你配置服务器时自动在环境变量中加的路径,默认是指向tomcat服务 ...
- apache Storm之一-入门学习
准备工作 这个教程使用storm-starter项目里面的例子.我推荐你们下载这个项目的代码并且跟着教程一起做.先读一下:配置storm开发环境和新建一个strom项目这两篇文章把你的机器设置好. 一 ...