用JS编程飞机大战游戏的过程和代码是什么
导读:这篇文章给大家分享的是“用JS编程飞机大战游戏的过程和代码是什么”,文中的讲解内容简单清晰,对大家学习和理解有一定的参考价值和帮助,有这方面学习需要的朋友,接下来就跟随小编一起学习一下“用JS编程飞机大战游戏的过程和代码是什么”吧。...
这篇文章给大家分享的是“用JS编程飞机大战游戏的过程和代码是什么”,文中的讲解内容简单清晰,对大家学习和理解有一定的参考价值和帮助,有这方面学习需要的朋友,接下来就跟随小编一起学习一下“用JS编程飞机大战游戏的过程和代码是什么”吧。本文实例为大家分享了javascript实现前端飞机大战的具体代码,供大家参考,具体内容如下
html:
!doctype html> html> head> meta charset="utf-8" /> title> 飞机大战/title> link rel="stylesheet" type="text/css" href="css/commen.css" /> link rel="stylesheet" type="text/css" href="css/main.css" /> script src="js/jquery-3.6.0.min.js" type="text/javascript" charset="utf-8"> /script> script src="js/main.js" type="text/javascript" charset="utf-8"> /script> meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" /> /head> body> div id="stage"> div class="bg1"> /div> div class="bg2"> /div> div class="plain"> /div> div class="enemy enemy1"> /div> div class="enemy enemy2"> /div> div class="enemy enemy3"> /div> div class="enemy enemy4"> /div> !-- div class="bullet"> /div> --> div class="func"> 功能切换/div> div class="func" style="left: 50px; "> 背景切换/div> audio id="mp3bg" src="music/background.mp3" autoplay loop> 当前浏览器不支持audio /audio> audio id="mp3shoot" src="music/shoot.mp3" > 当前浏览器不支持audio /audio> audio id="mp3destroy" src="./music/destoryed.mp3" > 当前浏览器不支持audio /audio> button id="buttonmusic" type="button" style="position: absolute; right: 0; bottom: 0; "> 音乐/button> /div> /body> /html>
js:
// var pdirection // var plain // pdirection = [0, 0, 0, 0, 0]; // var bulletw = 50; // var bulleth = 65; // var stage // var move = 1 // var timerkiss $(function() { //这里写代码的时候是可以控制所有htmldom节点的 //dom var pdirection = [0, 0, 0, 0, 0]; //子弹的宽高 var bulletw = 50; var bulleth = 65; //运动距离 var move = 1 // var timerkiss var stage = document.getelementbyid("stage"); //获取舞台节点 var bg1 = stage.getelementsbyclassname("bg1")[0]; //获取背景图片 // console.log(bg1) //检查是否捕获bg1 var bg2 = stage.getelementsbyclassname("bg2")[0]; //获取背景图片 var topval = -200; var topval2 = -968; var k = 0; //玩家飞机对象 var plain = stage.getelementsbyclassname("plain")[0]; //定义方向的变量数组,依次表示 上 右 下 左 空格用1表示按下,用0 表示未按下 // pdirection = [0, 0, 0, 0, 0]; // 功能切换 var funcsw=true; //true表示打开键盘 ,关闭鼠标,false表示打开鼠标,关闭键盘 //炮弹对象,宽高速度 var bullet = stage.getelementsbyclassname("bullet")[0]; // var bulletw = 50; // var bulleth = 65; var bullets = 10; // bg1.style.csstext="top: -30px; " var t1 = setinterval(function() { k += 1; if (k == 768) { topval = -968; } else if (k == 768 * 2) { topval2 = -968; k = 0; } // console.log("ddd") // console.log(bg1.style.csstext) // bg1.scrolltop=bg1.scrolltop+10; $(bg1).css({ "top": topval } ); $(bg2).css({ "top": topval2 } ); // bg1.style.csstext="top: "+topval+"px"; topval++; // bg2.style.csstext="top: "+topval2+"px"; topval2++; //topval++背景向下移动 } , 3); // t1.clearinterval(); //时钟停止 // 第二章图片 // var stage=document.getelementbyid("stage"); //获取舞台节点 // // console.log(bg1) //检查是否捕获bg1 // // bg1.style.csstext="top: -30px; " // var t1=setinterval(function(){ // // console.log("ddd") // // console.log(bg1.style.csstext) // // bg1.scrolltop=bg1.scrolltop+10; // bg2.style.csstext="top: "+topval2+"px"; // topval2+=1 // //topval++背景向下移动 // } ,70); // console.log(plain) // var move = 1 //键盘的监控事件 document.onkeydown = function(e) { // console.log(e) //向上运动 // console.log("444") if (e.key == "w") { //cons //console.log("555") pdirection[0] = 1; //console.log(pdirection[0]); // console.log(parsefloat($(plain).css("top"))) //if(parsefloat($(plain).css("top"))> =5) // plain.style.top.cssvalue=plain.style.top+10 // $(plain).css({ "top":parsefloat($(plain).css("top"))-move} ); // move++ } else if (e.key == "s") { //向下运动 pdirection[2] = 1; // console.log(parsefloat($(plain).css("top"))) //if(parsefloat($(plain).css("top"))=513) // plain.style.top.cssvalue=plain.style.top+10 // $(plain).css({ "top":parsefloat($(plain).css("top"))+move} ); // move++ } else if (e.key == "a") { //向左运动 pdirection[3] = 1; // console.log(parsefloat($(plain).css("top"))) // plain.style.top.cssvalue=plain.style.top+10 //$(plain).css({ "left":parsefloat($(plain).css("left"))-move} ); // move++ } else if (e.key == "d") { //向右运动 pdirection[1] = 1; // console.log(parsefloat($(plain).css("top"))) // plain.style.top.cssvalue=plain.style.top+10 //$(plain).css({ "left":parsefloat($(plain).css("left"))+move} ); // move++ } //else if(e.key==" "){ //炮弹向上运动 //pdirection[4]=1; // console.log(parsefloat($(plain).css("top"))) // var bulletx=parsefloat($(plain).css("left"))+$(plain).width()/2-bulletw/2; // console.log($(plain).css("left")) //console.log(parsefloat($(plain).css("left"))) // console.log(parsefloat($(plain).css("top"))-parsefloat($(bullet).css("height"))); //var bullety=parsefloat($(plain).css("top"))-bulleth; // plain.style.top.cssvalue=plain.style.top+10 // $(plain).css({ "left":parsefloat($(plain).css("left"))+move} ); // move++ // $("div class=\"bullet\"> /div> ") 转义方法 //$("div class='bullet'> /div> ").css({ "left":bulletx,"top":bullety} ).appendto(stage); //} ; } //炮弹单独 document.onkeypress = function(e) { if (e.key == " ") { //炮弹向上运动 shoot(); } ; } //键盘按键抬起来 document.onkeyup = function(e) { if (e.key == "w") { //cons //console.log("555") pdirection[0] = 0; } else if (e.key == "s") { //向下运动 pdirection[2] = 0; } else if (e.key == "a") { //向左运动 pdirection[3] = 0; } else if (e.key == "d") { //向右运动 pdirection[1] = 0; } else if (e.key == " ") { //炮弹向上运动 pdirection[4] = 0; } ; // console.log(pdirection) } ; //定义飞机x轴y轴的坐标 // var plainx=e.clientx; // var plainy=e.clienty //鼠标移动事件 stage.onmousemove=function(e){ if(funcsw) return; //关闭鼠标功能 var plainx=e.clientx-parsefloat($(stage).css("margin-left")); var plainy=e.clienty //console.log(e) //如有必要需要去掉子事件。此处并不需要 // e.defaultprevented; // e.getpreventdefault()//取消事件默认动作 // console.log(e.path[1].id); // ($(plain[0]).css("top"))=e.clientx+"px" $(plain).css({ "left":plainx-parsefloat($(plain).width()/2),"top":plainy-parsefloat($(plain).height()/2)} ); //$(plain).css({ "top":plainy+parsefloat($(plain).css("height")/2)} ); // $(plain).css({ "top":plainy} ); // console.log(e.clientx) // console.log(e.clienty) // console.log($(plain).css("top")) } //绑定功能切换键 $(".func").click(function(){ if($(this).html()=="功能切换"){ if(funcsw){ funcsw=false; //关闭键盘 打开鼠标 clearinterval(timerkey); timerfire=setinterval(shoot,170); } else{ funcsw=true; //关闭鼠标 ,打开键盘 clearinterval(timerfire); timerkey=monitorkey(); } } ; } ); //控制敌机的时钟 var enemy = document.getelementsbyclassname("enemy"); setinterval(function() { for (var i = 0; i enemy.length; i++) { if ($(enemy[i]).attr("class") == "enemy enemy1") { $(enemy[i]).css("top", parsefloat($(enemy[i]).css("top")) + 1); } else if ($(enemy[i]).attr("class") == "enemy enemy2") { $(enemy[i]).css("top", parsefloat($(enemy[i]).css("top")) + 2); } else if ($(enemy[i]).attr("class") == "enemy enemy3") { $(enemy[i]).css("top", parsefloat($(enemy[i]).css("top")) + 3); } else if ($(enemy[i]).attr("class") == "enemy enemy4") { $(enemy[i]).css("top", parsefloat($(enemy[i]).css("top")) + 4); } } } , 10); //随机产生敌机 // setinterval(function(){ // var num=parseint(math.random()*4)+1; // var rndwidth_stage=parseint(math.random()*parseint($(stage).width()-45)); // $("div class=\"enemy enemy"+num+"\"> /div> ").css({ "left":rndwidth_stage} ).appendto("#stage") // } ,1500); //数组写法 setinterval(function() { var num = parseint(math.random() * 4) + 1; var enemyw = [50, 67, 67, 67]; var rndwidth_stage = parseint(math.random() * $(stage) .width()); //展示三木运算符(rndwidth_stage-enemyw[num-1] rndwidth_stage = rndwidth_stage > enemyw[num - 1] ? rndwidth_stage - enemyw[num - 1] : rndwidth_stage; $("div class=\"enemy enemy" + num + "\"> /div> ").css({ "left": rndwidth_stage } ).appendto("#stage") } , 1000); //控制子弹的动画时间控件 setinterval(function() { if ($(".bullet").length == 0) return; //设置好子弹移出屏幕后,移除子弹节点 // $(".bullet").css({ "top":parsefloat($(".bullet").css("top"))-10} ) // // console.log($(this).css("top")) // console.log(parsefloat($(".bullet").css("top"))); //var bulltop=parsefloat($(".bullet[i]").css("top")); //$(".bullet").css({ "top":(bulltop-10)+"px"} ); var bullet = $(".bullet"); // console.log(bullet) // for(var i=0; ibullet.length; i++){ // var bulltop=parsefloat($(bullet[i]).css("top")); // $(bullet[i]).css({ "top":(bulltop-10)+"px"} ); // } for (i = 0; i bullet.length; i++) { var tmp_bullet = parsefloat($(bullet[i]).css("top")); // console.log(tmp_bullet); if (tmp_bullet 0) { $(bullet[i]).remove(); } else { var bulltop = parsefloat($(bullet[i]).css("top")); $(bullet[i]).css({ "top": (bulltop - 10) + "px" } ); } } ; } , bullets); //单独监控子弹 setinterval(function() { // var bullet=document.getelementsbyclassname("bullet"); //两种写法都可以 var bullet = $(".bullet"); // for(i=0; ibullet.length; i++){ // var tmp_bullet=parsefloat($(bullet[i]).css("top")); // // console.log(tmp_bullet); // if(tmp_bullet0){ // $(bullet[i]).remove(); // } ; // } ; } , 400); //离开舞台的还记移除dom节点 setinterval(function() { for (i = 0; i enemy.length; i++) { var tmp_enemy = parsefloat($(enemy[i]).css("top")); var tmp_stage = $(stage).height(); // console.log(tmp_enemy); // console.log(typeof($(tmp_stage).height())); if (tmp_enemy > tmp_stage) { $(enemy[i]).remove(); // console.log("移除成功"); } ; } ; } , 500); //时钟控件监控数组pdirection的值 var timerkey=monitorkey(); //时钟控件表示每个多少时间发射子弹 //第一种方法 键盘模拟事件 // setinterval(function(){ // var e=jquery.event("keypress"); // e.key=" " // $(document).trigger(e); // } ,500) //第二种方法 直接调用函数 function shoot(){ $("#mp3shoot")[0].currenttime=0; $("#mp3shoot")[0].play(); pdirection[4] = 1; // console.log(parsefloat($(plain).css("top"))) // var bulletx=parsefloat($(plain).css("left"))+$(plain).width()/2-bulletw/2; // console.log($(plain).css("left")) //console.log(parsefloat($(plain).css("left"))) // console.log(parsefloat($(plain).css("top"))-parsefloat($(bullet).css("height"))); //var bullety=parsefloat($(plain).css("top"))-bulleth; // plain.style.top.cssvalue=plain.style.top+10 // $(plain).css({ "left":parsefloat($(plain).css("left"))+move} ); // move++ // $("div class=\"bullet\"> /div> ") 转义方法 //$("div class='bullet'> /div> ").css({ "left":bulletx,"top":bullety} ).appendto(stage); //console.log(pdirection[4]); var bulletx = parsefloat($(plain).css("left")) + $(plain).width() / 2 - bulletw / 2; // console.log($(plain).css("left")) // console.log(parsefloat($(plain).css("left"))) // console.log(parsefloat($(plain).css("top"))-parsefloat($(bullet).css("height"))); var bullety = parsefloat($(plain).css("top")) - bulleth; // plain.style.top.cssvalue=plain.style.top+10 // $(plain).css({ "left":parsefloat($(plain).css("left"))+move} ); // move++ // $("div class=\"bullet\"> /div> ") 转义方法 $("div class='bullet'> /div> ").css({ "left": bulletx, "top": bullety } ).appendto(stage); } //总结模型 // function kissab(a,b){ // var iskiss=false; // for(var i=0; ia.length; i++){ // for(var j=0; jb.length; j++){ // // var a=$(a[i]).height()/2+parsefloat($(a[i]).css("top"))-$(b[j]).height()/2-parsefloat($(b[j]).css("top")); // // var b=$(b[j]).width()/2+parsefloat($(b[j]).css("left"))-$(a[i]).width()/2-parsefloat($(a[i]).css("left")); // // //console.log(a) // // var c=$(a[i]).height()/2+$(b[j]).width()/2 // // console.log(b); // // if(a*a+b*bc*c){ // // // $(b[j]).remove(); // // // $(a[i]).remove(); // // iskiss=true; // // break; // // } // } // } // } //调用模拟键盘函数 //var timerfire=setinterval(shoot,500); //定义变量存储子弹发射的动画 var timerfire; //检测是否碰撞 function kissab(a,b){ var iskiss=false; var a=$(a).height()/2+parsefloat($(a).css("top"))-$(b).height()/2-parsefloat($(b).css("top")); var b=$(b).width()/2+parsefloat($(b).css("left"))-$(a).width()/2-parsefloat($(a).css("left")); //console.log(a) var c=$(a).height()/2+$(b).width()/2-10; //console.log(b); if(a*a+b*bc*c){ // $(b[j]).remove(); // $(a[i]).remove(); iskiss=true; } return iskiss; } var timerkiss=monitorkiss(); function monitorkiss(){ //获取子弹 //检测子弹与敌机是否碰撞 return setinterval(function(){ var bullets=$(".bullet"); var enemys=$(".enemy"); for(var i=0; ibullets.length; i++){ for(var j=0; jenemys.length; j++){ // var a=$(bullets[i]).height()/2+parsefloat($(bullets[i]).css("top"))-$(enemys[j]).height()/2-parsefloat($(enemys[j]).css("top")); // var b=$(enemys[j]).width()/2+parsefloat($(enemys[j]).css("left"))-$(bullets[i]).width()/2-parsefloat($(bullets[i]).css("left")); // //console.log(a) // var c=$(bullets[i]).height()/2+$(enemys[j]).width()/2 // console.log(b); // if(a*a+b*bc*c){ // $(enemys[j]).remove(); // $(bullets[i]).remove(); // break; //console.log("aaa") // } if (kissab(bullets[i],enemys[j])){ //console.log("ttt") $("#mp3destroy")[0].play(); $(enemys[j]).remove(); $(bullets[i]).remove(); break; } } } //检测玩家与敌机是否碰撞 for(var j=0; jenemys.length; j++){ if(kissab(plain,enemys[j])){ alert("game over"); gameover(); break; } } } ,1); } function monitorkey(){ return setinterval(function() { //向上运动 //默认方向 上 右 下 左 if (pdirection[0] == 1) { // console.log(parsefloat($(plain).css("top"))) if (parsefloat($(plain).css("top")) > = 5) // plain.style.top.cssvalue=plain.style.top+10 $(plain).css({ "top": parsefloat($(plain).css("top")) - move } ); else $(plain).css({ "top":0} ); // move++ } if (pdirection[2] == 1) { //向下运动 // console.log(parsefloat($(plain).css("top"))) if (parsefloat($(plain).css("top")) = 513) // plain.style.top.cssvalue=plain.style.top+10 $(plain).css({ "top": parsefloat($(plain).css("top")) + move } ); else $(plain).css({ "top":$(stage).height-$(plain).height} ); // move++ } if (pdirection[3] == 1) { //向左运动 // console.log(parsefloat($(plain).css("top"))) if (parsefloat($(plain).css("left")) > = -10) // plain.style.top.cssvalue=plain.style.top+10 $(plain).css({ "left": parsefloat($(plain).css("left")) - move } ); // move++ } if (pdirection[1] == 1) { //向右运动 // console.log(parsefloat($(plain).css("top"))) if (parsefloat($(plain).css("left")) = 270) // plain.style.top.cssvalue=plain.style.top+10 //console.log(parsefloat($(plain).css("right"))) $(plain).css({ "left": parsefloat($(plain).css("left")) + move } ); // move++ } if (pdirection[4] == 1) { //炮弹向上运动 // console.log(parsefloat($(plain).css("top"))) //var bulletx=parsefloat($(plain).css("left"))+$(plain).width()/2-bulletw/2; // console.log($(plain).css("left")) // console.log(parsefloat($(plain).css("left"))) // console.log(parsefloat($(plain).css("top"))-parsefloat($(bullet).css("height"))); //var bullety=parsefloat($(plain).css("top"))-bulleth; // plain.style.top.cssvalue=plain.style.top+10 // $(plain).css({ "left":parsefloat($(plain).css("left"))+move} ); // move++ // $("div class=\"bullet\"> /div> ") 转义方法 //$("div class='bullet'> /div> ").css({ "left":bulletx,"top":bullety} ).appendto(stage); } } , 1); } // 载入背景音乐 // $("#mp3bg").play(); var mp3bg=document.getelementbyid("mp3bg"); // var timerbg= setinterval(function(){ // mp3bg.currenttime=0; // // mp3bg.controls // mp3bg.play(); // clearinterval(timerbg); // } ) $("#buttonmusic").click(); $("#buttonmusic").click(function(){ if($(this).html()=="音乐"){ $(this).html("暂停"); //mp3bg.currenttime=0; // mp3bg.controls mp3bg.play(); //clearinterval(timerbg); } else{ //mp3bg.currenttime=0; // mp3bg.controls mp3bg.pause(); $(this).html("音乐"); } } ) function startgame(){ //碰撞检测开始 timerkiss=monitorkiss(); //重置方向键盘 console.log(pdirection); pdirection = [0, 0, 0, 0, 0]; //生成玩家飞机 // var timertmp=setinterval(function(){ //var aa=$(stage).height()-$(plain).height()*2 //console.log(aa) // if(parsefloat($(plain).css("top"))($(stage).height()-$(plain).height()*2)){ // //alert("33"); // console.log("666"); // clearinterval(timertmp); // } else // plain.style.csstext="top:"+(parsefloat($(plain).css("top"))-5)+"px; left:"+$(stage).width()/2-$(plain).width()/2+"px; "; // } ); } function gameover(){ //碰撞检测停止 clearinterval(timerkiss); // alert("gameover"); //移除玩家飞机 // plain.remove(); //移除玩家飞机使用隐藏的方法 //plain.hidden=true; //移除所有敌机 $(".enemy").remove(); // console.log(pdirection) //移除玩家飞机,使用隐藏的方法 // $(plain).hide(); plain.style.csstext="top:"+$(stage).height()+"px; left:"+($(stage).width()/2-$(plain).width()/2+"px"); if(confirm("你玩不起,你个小垃圾,你没有实力")){ startgame(); } //重置方向键盘 pdirection = [0, 0, 0, 0, 0]; } } ); // 第二章图片 // $(function(){ // //这里写代码的时候是可以控制所有htmldom节点的 // //dom // var stage=document.getelementbyid("stage"); //获取舞台节点 // var bg2=stage.getelementsbyclassname("bg2")[0]; //获取背景图片 // // console.log(bg1) //检查是否捕获bg1 // var topval=-968; // // bg1.style.csstext="top: -30px; " // var t2=setinterval(function(){ // // console.log("ddd") // // console.log(bg1.style.csstext) // // bg1.scrolltop=bg1.scrolltop+10; // bg2.style.csstext="top: "+topval+"px"; // topval+=1 // //topval++背景向下移动 // } ,70); // // t1.clearinterval(); //时钟停止 // } ); // alert("4444") 不使用jq的话无法完全加载再弹弹框 // function myapp(){ // 定义函数的基本格式 // } // function xxxx (){ // // console.log("ddd") // console.log(bg1.style.csstext) // // bg1.scrolltop=bg1.scrolltop+10; // bg1.style.csstext="top: "+topval+"px"; // topval+=1 // }
css:
#stage{ width: 320px; height: 568px; background-color: antiquewhite; color: white; overflow: hidden; margin: auto; position: relative; } .bg1{ background-image: url(../img/bg_01.png); height: 768px; width: 100%; position: absolute; top: -200px; /* z-index: 5; */ } .bg2{ background-image: url(../img/bg_01.png); height: 768px; width: 100%; position: absolute; top: -968px; /* z-index: 5; */ } .plain{ height: 53px; width: 67px; background-image: url(../img/plane_blue_01.png); z-index: 11; position: absolute; bottom: 0; background-size: 100% 100%; } .enemy{ height: 53px; width: 67px; position: absolute; background-size: 100% 100%; } .enemy1{ background-image: url(../img/enemy_04.png); /* z-index: 10; */ height: 40px; width: 50px; top:0; left: 20px; } .enemy2{ background-image: url(../img/enemy_03.png); /* z-index: 10; */ top:0; left: 90px; } .enemy3{ background-image: url(../img/enemy_02.png); /* z-index: 10; */ top:0; left: 160px; height: 70px; } .enemy4{ background-image: url(../img/enemy_01.png); /* z-index: 10; */ top:0; left: 230px; } /* 子弹 */ .bullet{ background-image: url(../img/bullet_01.png); width: 50px; height: 65px; position: absolute; /* z-index: 10; */ } /* 按钮 */ .func{ width: 40px; height: 20px; position: absolute; z-index: 12; background-color: skyblue; opacity: 0.6; color: white; cursor: pointer; } .func:hover{ opacity: 1; transition-duration: 1s; }
感谢各位的阅读,以上就是“用JS编程飞机大战游戏的过程和代码是什么”的内容了,通过以上内容的阐述,相信大家对用JS编程飞机大战游戏的过程和代码是什么已经有了进一步的了解,如果想要了解更多相关的内容,欢迎关注网络,网络将为大家推送更多相关知识点的文章。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 用JS编程飞机大战游戏的过程和代码是什么
本文地址: https://pptw.com/jishu/654501.html