Web开发基础:JavaScript飞机大战

超详细的Java知识点路线图


飞机大战

图片链接:https://pan.baidu.com/s/1elfvlHClwwDnc8buUnySPw
提取码:mi5y
在这里插入图片描述

功能点:

1、飞机跟着鼠标移动
在onmousemove事件中获得鼠标的坐标,设置给飞机图片
2、发射子弹
子弹需要动态添加到网页中
动态创建标签对象
document.createElement(“标签名”);
动态添加到层中
层对象.appendChild(标签对象);
设置样式
3、敌机移动
4、击中敌机

代码

<!DOCTYPE html>
<html>
<head>
	<title>飞机大战</title>
	<style type="text/css">
		#bg{
			width: 300px;
			height: 500px;
			background: url(images/background_1.png);
			/*margin: 0px auto;*/
		}
		#plane{
			width: 40px;
			height: 50px;
			position: absolute;
		}
	</style>
</head>
<body>
	<div id="bg" onmousemove="movePlane()">
		<img id="plane" src="images/plane.gif">
	</div>
	<script type="text/javascript">
		//获得背景对象
		var bg = document.getElementById("bg");
		//获得飞机对象
		var plane = document.getElementById("plane");
		//鼠标的位置
		var x,y;
		//移动飞机
		function movePlane(){
			//获得鼠标的x和y坐标
			x = window.event.clientX;
			y = window.event.clientY;
			if(x >=0 && x <= bg.offsetWidth && y >= 0 && y <= bg.offsetHeight){
				//修改飞机图片的位置
				plane.style.left = (x - plane.offsetWidth / 2) + "px";
				plane.style.top = (y - plane.offsetHeight / 2) + "px";
			}
		}
		//子弹的数组
		var bullets = new Array();
		//敌人的数组
		var enemys = new Array();
		//子弹类,x,y代表子弹出现的初始位置
		function Bullet(x,y){
			var img = document.createElement("img");//创建img标签对象
			bg.appendChild(img);					//添加图片对象到游戏背景上
			img.src = "images/bullet1.png";			//设置子弹图片
			img.style.position = "absolute";		//绝对定位
			img.style.width = "6px";
			img.style.height = "14px";
			img.style.left = x + "px";				//设置子弹图片初始坐标
			img.style.top = y + "px";
			this.width = 6;							//子弹的尺寸
			this.height = 14;
			this.x = x;								//子弹的坐标
			this.y = y;
			this.move = function(){					//子弹的移动
				this.y -= 10;						//向上移动
				img.style.top = this.y + "px";		//修改子弹图片的位置
			}
			this.remove = function(){				//删除子弹
				bg.removeChild(img);				//从背景中删除图片
			}
		}
		//敌人类,x,y代表子弹出现的初始位置
		function Enemy(x,y){
			var img = document.createElement("img");//创建img标签对象
			bg.appendChild(img);					//添加图片对象到游戏背景上
			img.src = "images/enemy1_fly_1.png";	//设置子弹图片
			img.style.position = "absolute";		//绝对定位
			img.style.width = "34px";
			img.style.height = "24px";
			img.style.left = x + "px";				//设置子弹图片初始坐标
			img.style.top = y + "px";
			this.width = 34;							//子弹的尺寸
			this.height = 24;
			this.x = x;								//子弹的坐标
			this.y = y;
			this.isDead = false;
			this.move = function(){					//子弹的移动
				this.y += 10;						//向上移动
				img.style.top = this.y + "px";		//修改子弹图片的位置
			}
			this.remove = function(){				//删除子弹
				bg.removeChild(img);				//从背景中删除图片
			}
			this.dead = function(){					//显示爆炸图片
				img.src = "images/boom.png";
				this.isDead = true;
			}
		}
		//创建子弹对象
		function createBullet(){
			bullets.push(new Bullet(x,y - plane.offsetHeight / 2));
		}
		//创建敌人对象
		function createEnemy(){
			enemys.push(new Enemy(bg.offsetWidth * Math.random(),0));
		}
		//移动所有的子弹
		function moveBullets(){
			for(var i = 0;i < bullets.length;i++){
				bullets[i].move(); 			//移动子弹
				checkHit(bullets[i]); 		//判断子弹是否打中敌人
				if(bullets[i].y <= 0){		//子弹到顶部后,删除子弹
					bullets[i].remove();
					bullets.splice(i,1);
				}
			}
		}
		//移动所有的敌人
		function moveEnemys(){
			for(var i = 0;i < enemys.length;i++){
				enemys[i].move(); //移动子弹
				if(enemys[i].y >= bg.offsetHeight || enemys[i].isDead){		//敌人到底部或被子弹打中,就删除敌人
					enemys[i].remove();
					enemys.splice(i,1);
				}
			}
		}
		//判断子弹是否打中敌人
		function checkHit(bullet){
			//遍历所有敌人
			for(var i = 0;i < enemys.length;i++){
				//碰撞检查
				if(bullet.x > enemys[i].x && bullet.x + bullet.width < enemys[i].x + enemys[i].width &&
					bullet.y > enemys[i].y && bullet.y + bullet.height < enemys[i].y + enemys[i].height){
					enemys[i].dead();
				}
			}
		}
		//启动周期任务执行创建子弹
		setInterval("createBullet()",200);
		//移动子弹
		setInterval("moveBullets()",50);
		//创建敌人
		setInterval("createEnemy()",2000);
		//移动敌人
		setInterval("moveEnemys()",100);
	</script>
</body>
</html>
  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

恒哥~Bingo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值