纯javascript模仿微信打飞机小游戏


Posted in Javascript onAugust 20, 2015

七夕情人节也不要忘了打游戏喔喔~,下面小编为大家准备的情人节礼物之纯javascript模仿微信打飞机小游戏分享给天下的情人们。

首先给大家展示效果图:

纯javascript模仿微信打飞机小游戏

查看演示       源码下载

纯JavaScript模仿微信打飞机游戏,做网页小游戏的借鉴下,界面设计是竖长形仿手机屏幕风格,游戏效果流畅。具有分数统计,里面的JS封装类中包括有创建飞机类、飞机移动行为控制,创建子弹类,产生min到max之间的随机数,判断本方飞机是否移出边界,如果移出边界,则取消mousemove事件,反之加上mousemove事件,为暂停界面的继续按钮添加暂停事件,创建敌方飞机类、碰撞判断、完成界面的初始化,敌方小飞机一个,我方飞机一个。

    //获得主界面

var mainDiv=document.getElementById("maindiv");

   //获得开始界面

var startdiv=document.getElementById("startdiv");

    //获得游戏中分数显示界面

var scorediv=document.getElementById("scorediv");

    //获得分数界面

var scorelabel=document.getElementById("label");

    //获得暂停界面

var suspenddiv=document.getElementById("suspenddiv");

    //获得游戏结束界面

var enddiv=document.getElementById("enddiv");

    //获得游戏结束后分数统计界面

var planscore=document.getElementById("planscore");

    //初始化分数

var scores=;
/*
 创建飞机类
 */
function plan(hp,X,Y,sizeX,sizeY,score,dietime,sudu,boomimage,imagesrc){
 this.planX=X;
 this.planY=Y;
 this.imagenode=null;
 this.planhp=hp;
 this.planscore=score;
 this.plansizeX=sizeX;
 this.plansizeY=sizeY;
 this.planboomimage=boomimage;
 this.planisdie=false;
 this.plandietimes=;
 this.plandietime=dietime;
 this.plansudu=sudu;

//行为

/*
移动行为
 */
 this.planmove=function(){
 if(scores<=){
 this.imagenode.style.top=this.imagenode.offsetTop+this.plansudu+"px";
 }
 else if(scores>&&scores<=){
 this.imagenode.style.top=this.imagenode.offsetTop+this.plansudu++"px";
 }
 else if(scores>&&scores<=){
 this.imagenode.style.top=this.imagenode.offsetTop+this.plansudu++"px";
 }
 else if(scores>&&scores<=){
 this.imagenode.style.top=this.imagenode.offsetTop+this.plansudu++"px";
 }
 else if(scores>&&scores<=){
 this.imagenode.style.top=this.imagenode.offsetTop+this.plansudu++"px";
 }
 else{
 this.imagenode.style.top=this.imagenode.offsetTop+this.plansudu++"px";
 }
 }
 this.init=function(){
 this.imagenode=document.Element("img");
 this.imagenode.style.left=this.planX+"px";
 this.imagenode.style.top=this.planY+"px";
 this.imagenode.src=imagesrc;
 mainDiv.appendChild(this.imagenode);
 }
 this.init();
}
/*
创建子弹类
 */
function bullet(X,Y,sizeX,sizeY,imagesrc){
 this.bulletX=X;
 this.bulletY=Y;
 this.bulletimage=null;
 this.bulletattach=;
 this.bulletsizeX=sizeX;
 this.bulletsizeY=sizeY;


//行为
/*
 移动行为
 */
 this.bulletmove=function(){
 this.bulletimage.style.top=this.bulletimage.offsetTop-+"px";
 }
 this.init=function(){
 this.bulletimage=document.Element("img");
 this.bulletimage.style.left= this.bulletX+"px";
 this.bulletimage.style.top= this.bulletY+"px";
 this.bulletimage.src=imagesrc;
 mainDiv.appendChild(this.bulletimage);
 }
 this.init();
}
/*
 创建单行子弹类
 */
function oddbullet(X,Y){
 bullet.call(this,X,Y,,,"image/bullet.png");
}


/*
创建敌机类
 */


function enemy(hp,a,b,sizeX,sizeY,score,dietime,sudu,boomimage,imagesrc){
 plan.call(this,hp,random(a,b),-,sizeX,sizeY,score,dietime,sudu,boomimage,imagesrc);
}


//产生min到max之间的随机数


function random(min,max){
 return Math.floor(min+Math.random()*(max-min));
}


/*
创建本方飞机类
 */


function ourplan(X,Y){
 var imagesrc="image/我的飞机.gif";
 plan.call(this,,X,Y,,,,,,"image/本方飞机爆炸.gif",imagesrc);
 this.imagenode.setAttribute('id','ourplan');
}


/*
 创建本方飞机
 */


var selfplan=new ourplan(,);


//移动事件


var ourPlan=document.getElementById('ourplan');
var yidong=function(){
 var oevent=window.event||arguments[];
 var chufa=oevent.srcElement||oevent.target;
 var selfplanX=oevent.clientX-;
 var selfplanY=oevent.clientY;
 ourPlan.style.left=selfplanX-selfplan.plansizeX/+"px";
 ourPlan.style.top=selfplanY-selfplan.plansizeY/+"px";


// document.getElementsByTagName('img')[].style.left=selfplanX-selfplan.plansizeX/+"px";


// document.getElementsByTagName('img')[]..style.top=selfplanY-selfplan.plansizeY/+"px";


}


/*
暂停事件
 */
var number=;
var zanting=function(){
 if(number==){
 suspenddiv.style.display="block";
 if(document.removeEventListener){
 mainDiv.removeEventListener("mousemove",yidong,true);
 bodyobj.removeEventListener("mousemove",bianjie,true);
 }
 else if(document.detachEvent){
 mainDiv.detachEvent("onmousemove",yidong);
 bodyobj.detachEvent("onmousemove",bianjie);
 }
 clearInterval(set);
 number=;
 }
 else{
 suspenddiv.style.display="none";
 if(document.addEventListener){
 mainDiv.addEventListener("mousemove",yidong,true);
 bodyobj.addEventListener("mousemove",bianjie,true);
 }
 else if(document.attachEvent){
 mainDiv.attachEvent("onmousemove",yidong);
 bodyobj.attachEvent("onmousemove",bianjie);
 }
 set=setInterval(start,);
 number=;
 }
}
//判断本方飞机是否移出边界,如果移出边界,则取消mousemove事件,反之加上mousemove事件
var bianjie=function(){
 var oevent=window.event||arguments[];
 var bodyobjX=oevent.clientX;
 var bodyobjY=oevent.clientY;
 if(bodyobjX<||bodyobjX>||bodyobjY<||bodyobjY>){
 if(document.removeEventListener){
 mainDiv.removeEventListener("mousemove",yidong,true);
 }
 else if(document.detachEvent){
 mainDiv.detachEvent("onmousemove",yidong);
 }
 }
 else{
 if(document.addEventListener){
 mainDiv.addEventListener("mousemove",yidong,true);
 }
 else if(document.attachEvent){
 mainDiv.attachEvent("nomousemove",yidong);
 }
 }
}

//暂停界面重新开始事件

//function chongxinkaishi(){
// location.reload(true);
// startdiv.style.display="none";
// maindiv.style.display="block";
//}

var bodyobj=document.getElementsByTagName("body")[];
if(document.addEventListener){
 //为本方飞机添加移动和暂停
 mainDiv.addEventListener("mousemove",yidong,true);
 //为本方飞机添加暂停事件
 selfplan.imagenode.addEventListener("click",zanting,true);
 //为body添加判断本方飞机移出边界事件
 bodyobj.addEventListener("mousemove",bianjie,true);
 //为暂停界面的继续按钮添加暂停事件
 suspenddiv.getElementsByTagName("button")[].addEventListener("click",zanting,true);
// suspenddiv.getElementsByTagName("button")[].addEventListener("click",chongxinkaishi,true);
 //为暂停界面的返回主页按钮添加事件
 suspenddiv.getElementsByTagName("button")[].addEventListener("click",jixu,true);
}
else if(document.attachEvent){
 //为本方飞机添加移动
 mainDiv.attachEvent("onmousemove",yidong);
 //为本方飞机添加暂停事件
 selfplan.imagenode.attachEvent("onclick",zanting);
  //为body添加判断本方飞机移出边界事件
 bodyobj.attachEvent("onmousemove",bianjie);
 //为暂停界面的继续按钮添加暂停事件
 suspenddiv.getElementsByTagName("button")[].attachEvent("onclick",zanting);
// suspenddiv.getElementsByTagName("button")[].attachEvent("click",chongxinkaishi,true);
 //为暂停界面的返回主页按钮添加事件
 suspenddiv.getElementsByTagName("button")[].attachEvent("click",jixu,true);
}
//初始化隐藏本方飞机
selfplan.imagenode.style.display="none";
/*
敌机对象数组
 */
var enemys=[];
/*
子弹对象数组
 */
var bullets=[];
var mark=;
var mark=;
var backgroundPositionY=;
/*
开始函数
 */
function start(){
 mainDiv.style.backgroundPositionY=backgroundPositionY+"px";
 backgroundPositionY+=.;
 if(backgroundPositionY==){
 backgroundPositionY=;
 }
 mark++;
 /*
 创建敌方飞机
 */
 if(mark==){
 mark++;
  //中飞机
 if(mark%==){
 enemys.push(new enemy(,,,,,,,random(,),"image/中飞机爆炸.gif","image/enemy_fly_.png"));
 }
  //大飞机
 if(mark==){
 enemys.push(new enemy(,,,,,,,,"image/大飞机爆炸.gif","image/enemy_fly_.png"));
 mark=;
 }
 //小飞机
 else{
 enemys.push(new enemy(,,,,,,,random(,),"image/小飞机爆炸.gif","image/enemy_fly_.png"));
 }
 mark=;
 }
/*
移动敌方飞机
 */
 var enemyslen=enemys.length;
 for(var i=;i<enemyslen;i++){
 if(enemys[i].planisdie!=true){
 enemys[i].planmove();
 }
/*
 如果敌机超出边界,删除敌机
 */
 if(enemys[i].imagenode.offsetTop>){
 mainDiv.removeChild(enemys[i].imagenode);
 enemys.splice(i,);
 enemyslen--;
 }
 //当敌机死亡标记为true时,经过一段时间后清除敌机
 if(enemys[i].planisdie==true){
 enemys[i].plandietimes+=;
 if(enemys[i].plandietimes==enemys[i].plandietime){
 mainDiv.removeChild(enemys[i].imagenode);
 enemys.splice(i,);
 enemyslen--;
 }
 }
 }
/*
创建子弹
*/
 if(mark%==){
 bullets.push(new oddbullet(parseInt(selfplan.imagenode.style.left)+,parseInt(selfplan.imagenode.style.top)-));
 }
/*
移动子弹
*/
 var bulletslen=bullets.length;
 for(var i=;i<bulletslen;i++){
 bullets[i].bulletmove();
/*
如果子弹超出边界,删除子弹
*/
 if(bullets[i].bulletimage.offsetTop<){
 mainDiv.removeChild(bullets[i].bulletimage);
 bullets.splice(i,);
 bulletslen--;
 }
 }
/*
碰撞判断
*/
 for(var k=;k<bulletslen;k++){
 for(var j=;j<enemyslen;j++){
 //判断碰撞本方飞机
 if(enemys[j].planisdie==false){
 if(enemys[j].imagenode.offsetLeft+enemys[j].plansizeX>=selfplan.imagenode.offsetLeft&&enemys[j].imagenode.offsetLeft<=selfplan.imagenode.offsetLeft+selfplan.plansizeX){
  if(enemys[j].imagenode.offsetTop+enemys[j].plansizeY>=selfplan.imagenode.offsetTop+&&enemys[j].imagenode.offsetTop<=selfplan.imagenode.offsetTop-+selfplan.plansizeY){
  //碰撞本方飞机,游戏结束,统计分数
  selfplan.imagenode.src="image/本方飞机爆炸.gif";
  enddiv.style.display="block";
  planscore.innerHTML=scores;
  if(document.removeEventListener){
  mainDiv.removeEventListener("mousemove",yidong,true);
  bodyobj.removeEventListener("mousemove",bianjie,true);
  }
  else if(document.detachEvent){

以上代码简单吧,使用纯javascript模仿微信打飞机小游戏,当时方法还有很多种,欢迎大家一起来分享。

Javascript 相关文章推荐
js+FSO遍历文件夹下文件并显示
Mar 07 Javascript
javascript 使用 NodeList需要注意的问题
Mar 04 Javascript
JQuery中操作Css样式的方法
Feb 12 Javascript
基于javascript实现九宫格大转盘效果
May 28 Javascript
浅谈js中StringBuffer类的实现方法及使用
Sep 02 Javascript
微信小程序开发之实现选项卡(窗口顶部TabBar)页面切换
Nov 25 Javascript
利用iscroll4实现轮播图效果实例代码
Jan 11 Javascript
PHP7新特性简述
Jun 11 Javascript
vue路由懒加载的实现方法
Mar 12 Javascript
Vue 组件参数校验与非props特性的方法
Feb 12 Javascript
mock.js模拟前后台交互
Jul 25 Javascript
OpenLayer3自定义测量控件MeasureTool
Sep 28 Javascript
js代码实现无缝滚动(文字和图片)
Aug 20 #Javascript
js图片翻书效果代码分享
Aug 20 #Javascript
JS给Textarea文本框添加行号的方法
Aug 20 #Javascript
js实现Select列表内容自动滚动效果代码
Aug 20 #Javascript
javascript如何操作HTML下拉列表标签
Aug 20 #Javascript
七夕情人节丘比特射箭小游戏
Aug 20 #Javascript
js脚本分页代码分享(7种样式)
Aug 19 #Javascript
You might like
基于文本的留言簿
2006/10/09 PHP
深入PHP许愿墙模块功能分析
2013/06/25 PHP
深入解析php中的foreach函数
2013/08/31 PHP
如何实现php图片等比例缩放
2015/07/28 PHP
PHP简单实现数字分页功能示例
2016/08/24 PHP
PHP中命名空间的使用例子
2019/03/22 PHP
PHP面向对象程序设计内置标准类,普通数据类型转为对象类型示例
2019/06/12 PHP
Knockoutjs的环境搭建教程
2012/11/26 Javascript
jQuery实现html表格动态添加新行的方法
2015/05/28 Javascript
BOM系列第一篇之定时器setTimeout和setInterval
2016/08/17 Javascript
jquery表单提交带错误信息提示效果
2017/03/09 Javascript
详解有关easyUI的拖动操作中droppable,draggable用法例子
2017/06/03 Javascript
JS写XSS cookie stealer来窃取密码的步骤详解
2017/11/20 Javascript
使用D3.js创建物流地图的示例代码
2018/01/27 Javascript
微信小程序实现图片上传放大预览删除代码
2020/06/28 Javascript
在小程序Canvas中使用measureText的方法示例
2018/10/19 Javascript
微信小程序环境下将文件上传到OSS的方法步骤
2019/05/31 Javascript
jquery实现烟花效果(面向对象)
2020/03/10 jQuery
[02:53]DOTA2英雄基础教程 山岭巨人小小
2013/12/09 DOTA
在Django框架中编写Contact表单的教程
2015/07/17 Python
python框架django基础指南
2016/09/08 Python
Python进阶_关于命名空间与作用域(详解)
2017/05/29 Python
python入门前的第一课 python怎样入门
2018/03/06 Python
从0开始的Python学习014面向对象编程(推荐)
2019/04/02 Python
python安装pil库方法及代码
2019/06/25 Python
python动态视频下载器的实现方法
2019/09/16 Python
wxPython多个窗口的基本结构
2019/11/19 Python
Windows+Anaconda3+PyTorch+PyCharm的安装教程图文详解
2020/04/03 Python
HTML5 Convas APIs方法详解
2015/04/24 HTML / CSS
如何利用input事件来监听移动端的输入
2016/04/15 HTML / CSS
Parfumdreams芬兰:购买香水和化妆品
2021/02/13 全球购物
文秘自荐信
2013/10/20 职场文书
酒吧副总经理岗位职责
2013/12/10 职场文书
美国留学经济担保书
2014/05/20 职场文书
营运督导岗位职责
2015/04/10 职场文书
python将图片转为矢量图的方法步骤
2021/03/30 Python