纯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 绑定带参数的事件以及手动触发事件
Apr 27 Javascript
jquery无法设置checkbox选中即没有变成选中状态
Mar 27 Javascript
Node.js实现简单聊天服务器
Jun 20 Javascript
5款JavaScript代码压缩工具推荐
Jul 07 Javascript
详解从新建vue项目到引入组件Element的方法
Aug 29 Javascript
Three.js实现绘制字体模型示例代码
Sep 26 Javascript
vue双向数据绑定知识点总结
Apr 18 Javascript
利用vscode调试编译后的js代码详解
May 14 Javascript
vue表单自定义校验规则介绍
Aug 28 Javascript
json前后端数据交互相关代码
Sep 19 Javascript
JS中验证整数和小数的正则表达式
Oct 08 Javascript
vue-iview动态新增和删除的方法
Jun 17 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
Zend 输出产生XML解析错误
2009/03/03 PHP
php数据库连接时容易出错的特殊符号问题
2010/09/01 PHP
zend optimizer在wamp的基础上安装图文教程
2013/10/26 PHP
php die()与exit()的区别实例详解
2016/12/03 PHP
jquery选择器简述
2015/08/31 Javascript
关于input全选反选恶心的异常情况
2016/07/24 Javascript
jquery之别踩白块游戏的简单实现
2016/07/25 Javascript
JQuery实现动态操作表格
2017/01/11 Javascript
jQuery页面弹出框实现文件上传
2017/02/09 Javascript
Bootstrap中data-target 到底是什么
2017/02/14 Javascript
jquery实现折叠菜单效果【推荐】
2017/03/08 Javascript
不使用 JS 匿名函数理由
2017/11/17 Javascript
JavaScript判断对象和数组的两种方法
2019/05/31 Javascript
微信小程序连接服务器展示MQTT数据信息的实现
2020/07/14 Javascript
Vue与React的区别和优势对比
2020/12/18 Vue.js
详解Python爬虫的基本写法
2016/01/08 Python
python中的错误处理
2016/04/10 Python
Python pymongo模块用法示例
2018/03/31 Python
基于Python在MacOS上安装robotframework-ride
2018/12/28 Python
python tqdm 实现滚动条不上下滚动代码(保持一行内滚动)
2020/02/19 Python
python实现俄罗斯方块游戏(改进版)
2020/03/13 Python
查看keras各种网络结构各层的名字方式
2020/06/11 Python
为什么是 Python -m
2020/06/19 Python
python中有帮助函数吗
2020/06/19 Python
Python下载网易云歌单歌曲的示例代码
2020/08/12 Python
Perfume’s Club法国站:购买香水和化妆品
2019/05/02 全球购物
美国渔具店:FishUSA
2019/08/07 全球购物
档案管理员岗位职责
2013/12/01 职场文书
挂职自我鉴定
2014/02/26 职场文书
艺术节主持词
2014/04/02 职场文书
社团活动总结书
2014/06/27 职场文书
邀请函格式范文
2015/02/02 职场文书
音乐教师个人总结
2015/02/06 职场文书
2016年“11.11”光棍节活动总结
2016/04/05 职场文书
2019年第四季度财务部门工作计划
2019/11/02 职场文书
Mysql Online DDL的使用详解
2021/05/20 MySQL