用 JavaScript 写一个小游戏打飞机

目录

前言:

描述:

效果图展示:

代码实现思路:

使用说明:

实现代码

总结:


前言:


在工作学习之余玩一会游戏既能带来快乐,还能缓解生活压力,跟随此文一起制作一个小游戏吧。

描述:


飞机大战(打飞机)游戏是一款休闲益智类游戏,有PC和手机等多平台版本。既简单又耐玩。该游戏通过控制我方飞机打敌方飞机。

功能按键:
W:向上
S:向下
A:向左
D:向右

空格:发射炮弹



效果图展示:


代码实现思路:

我方飞机:

        1.上下左右移动, 不可以出边界

        2.设置一个函数用于我方子弹飞行

        3.绑定事件,射子发弹

        4.设置键盘按下事件

        5.判断需要的几个按键,w,s,a,d, 空格(上,下,左,右,发射炮弹)

        6.判断我方飞机发射的炮弹,是否打到敌方飞机,如果打到则出现爆炸图片

 敌方飞机:

         1.设置一个函用于生成敌方飞机

         2.设置一个函数用于所有敌方飞机的移动

         3.设置每过3秒生成, x轴随机


使用说明:

新建一个后缀为 HTML 的文件,然后把下面的代码复制进去,然后双击打开。

图片在百度网盘里面,复制下面链接下载images这个文件夹,这个文件夹跟后缀为HTML的文件是同级

百度网盘:

链接: https://pan.baidu.com/s/1KOzSFbPDa2o9kch6UlG9hQ

提取码: smbt

如果图片压缩包打不开,请往最后看,图片放到了最后


实现代码

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>打飞机</title>
		<style>
			*{
				margin:0px;
				padding:0px;
			}
			@keyframes go{
				form{
					background-position: 0px 0px;;
				}
				to{
					background-position: 0px 768px;
				}
			}
			#center{
				width:512px;
				height:768px;
				border:1px solid blue;
				margin:0 auto;
				background-image: url(./images/bg.jpg);
				background-position: 0px 0px;
				position: relative;
				overflow: hidden;
				
				animation:go 5s linear infinite;
			}
			#myfly{
				width:106px;
				height:76px;
				background:url(./images/me.png);
				/* border:1px solid red; */
				position: absolute;
				bottom:100px;
				left:50%;
			}
			.dan{
				width:10px;
				height:35px;
				/* background-size: 100px 350px; */
				background: url(./images/b.png);
				/* border:1px solid red; */
				position: absolute;
			}
			.di{
				width:116px;
				height:82px;
				/* border:1px solid blue; */
				background:url('./images/e2.png') no-repeat;
				
				background-size: 100%;
				position:absolute;
			}
		</style>
	</head>
	<body>
		<div id='center'>
			<div id='myfly'></div>
		</div>
	</body>
	<script>
		//准备元素节点
		//我方飞机
		var myfly = document.getElementById('myfly');
		//获取屏幕的宽度
		var maxwidth = document.getElementById('center').offsetWidth
		//获取我方飞机的宽度
		var myflywidth = myfly.offsetWidth;
		//加入键盘事件
		window.onkeydown = function(e){
			//兼容事件对象
			var e = e || window.event
			//keyCode
			console.log(e.keyCode);
			switch(e.keyCode){
				case 65://左
					console.log('左左')
					ydleft(-5)
				break;
				
				case 68://右
					console.log('右右')
					ydleft(5)
				break;
				
				case 87://上
					console.log('上上')
					ydtop(-5)
				break;
				
				case 83://下
					console.log('下下')
					ydtop(5)
				break;
				
				case 32://空
					console.log('空空')
					var dan = document.createElement('div');
					dan.setAttribute('class','dan');
					center.appendChild(dan);
					//获取我方飞机当前的距离
					var mleft = myfly.offsetLeft;
					var mtop = myfly.offsetTop;
					//子弹的宽度
					var zw = dan.offsetWidth;
					var zh = dan.offsetHeight;
					//计算位置
					var zl = mleft + myflywidth/2 - (zw/2)
					var zt = mtop - zh
					
					//更改
					dan.style.left = zl + 'px';
					dan.style.top = zt + 'px';
					//调用子弹飞行
					danfly();
					
				break;
				
			}
			
		}
		
		//角色
		//1.我方飞机
		//	1. 上下左右移动, 不可以出边界
		//	2. 发射子弹
		//2.敌人飞机 移动
		//3.我方子弹 移动
		
	   //设置一个变量用于子弹移动的防抖
	   var ismytime = false;
		
	   /*设置一个函数用于我方子弹飞行*/
	   function danfly(){
		   
		   if(ismytime){
			   return false;
		   }
		   //说明原来没有定时器,创建定时器
		   ismytime = setInterval(function(){
			   //获取所有的子弹
			   var dans = document.querySelectorAll('.dan');
			   
			   if(dans.length <=0){
				   //满足这个条件说明没有子弹了
				   clearInterval(ismytime);
				   //初始化防抖的变量
				   ismytime=false;
			   }
			   
			   //遍历每一个子弹
			   dans.forEach(function(v,k){
				   var oldtop = v.offsetTop;
				   var newtop = oldtop - 5;
				   var newleft = v.offsetLeft;
				   v.style.top = newtop+'px'
				   //判断当前子弹是否打中飞机
				   var dis = document.querySelectorAll('.di');
				  
				   dis.forEach(function(val,key){
					   var x1 = val.offsetLeft;
					   var x2 = x1 + val.offsetWidth;
					   var y1 = val.offsetTop;
					   var y2 = y1 + val.offsetHeight;
					   
					   //1 子弹x 大于飞机最小值x1 小于飞机的最大值x2
					   //2 子弹y 大于y1 小于y2
					   if((newleft >= x1 && newleft <= x2) && (newtop<=y2 && newtop>=y1) ){
						   console.log('我打中了');
						   //删除子弹
						   center.removeChild(v);
						   
						 
						   val.style.backgroundImage='url(images/boom.gif)';
						   
						   
						   //延时删除飞机
						   setTimeout(function(){
							   center.removeChild(val);
						   },200)
						   
						   
					   }
		})
				   		   
				   //加入一个删除子弹
				   if(newtop <= 0 - v.offsetHeight){
					   center.removeChild(v);
				   }
			   })
			  
			   
			   
		   },30)
		   
	   }
	   
	   
	   /*设置一个函用于生成敌方飞机
	   每过3秒生成, x轴随机
	   */
		createdi();//第一次调用
	  
		function createdi(){
			
			ditime = setInterval(function(){
				var di = document.createElement('div');
				di.setAttribute('class','di');
				var num = random(1,3);
				center.appendChild(di);
				//随机出x座标
				var x = random(0,maxwidth-di.offsetWidth);
				
				di.style.left = x + 'px'
				di.style.backgroundImage='url(./images/e'+num+'.png)';
				//调用移动
				difly();	
			},2000)
			
		}
		
		var isdi = false;
		/*设置一个函数用于所有敌方飞机的移动*/
		function difly(){
			if(isdi){
				return false
			}
			isdi = setInterval(function(){
				var dis = document.querySelectorAll('.di');
				
				dis.forEach(function(v,k){
					var oldtop = v.offsetTop;
					var newtop = oldtop + 5;
					
					v.style.top = newtop+'px';
					if(newtop>= center.offsetHeight + v.offsetHeight){
						center.removeChild(v);
					}
				})
					
					
			},50)
		}
		/*设置一个函数用于我方飞机的左右移动
			a用于接收的步数
		*/
		function ydleft(a){
			//获取当前飞机的位置
			var oldleft = myfly.offsetLeft;
			var newleft = oldleft + a
			
			//边界判断
			if(newleft <= 0 || newleft >= maxwidth-myflywidth){
				return false;
			}
			//更改
			myfly.style.left = newleft + 'px'
		}
		//控制和判断飞机上下
		function ydtop(you){
			var oldtops = myfly.offsetTop
			var newtop = oldtops + you
			
			if(newtop<=0 || newtop>=center.offsetHeight - myfly.offsetHeight){
				return false;
			}
			myfly.style.top = newtop + 'px' 
		}
		
		
		//设置一个函数,用于随机
		function random(min,max){
			return Math.ceil(Math.random()*(max-min+1)+min-1);
		}
	</script>
</html>

总结:

以上就是 基于 js 制作一个飞机大战,不懂得也可以在评论区里问我或私聊我询问,以后会持续发布一些新的功能,敬请关注。

图片:

  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以给你一个简单的示例游戏,使用HTML和JavaScript,叫“点击方块”。 HTML代码: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>点击方块</title> <style> body { background-color: #f0f0f0; } #square { width: 100px; height: 100px; background-color: red; position: absolute; top: 50%; left: 50%; margin-top: -50px; margin-left: -50px; } </style> </head> <body> <div id="square"></div> <script src="game.js"></script> </body> </html> ``` JavaScript代码: ```javascript var score = 0; var time = 10; var timer; // 随机生成方块位置 function randomSquare() { var square = document.getElementById("square"); var x = Math.floor(Math.random() * 80); var y = Math.floor(Math.random() * 80); square.style.top = x + "%"; square.style.left = y + "%"; } // 点击方块增加得分 function addScore() { score++; document.getElementById("score").innerHTML = score; randomSquare(); } // 倒计时结束游戏 function endGame() { clearInterval(timer); alert("游戏结束,得分:" + score); } // 开始游戏 function startGame() { score = 0; time = 10; document.getElementById("score").innerHTML = score; document.getElementById("time").innerHTML = time; timer = setInterval(function() { time--; document.getElementById("time").innerHTML = time; if (time == 0) { endGame(); } }, 1000); randomSquare(); } // 页面加载完成后开始游戏 window.onload = startGame; ``` 这个游戏的规则很简单,页面上有一个红色方块,每次点击方块可以得到一分,游戏时间为10秒,时间结束后游戏结束,弹出得分。 你可以将以上代码保存为`index.html`和`game.js`文件,然后在浏览器中打开`index.html`文件开始游戏。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值