ajax之移动小英雄

效果图

在这里插入图片描述

源码如下

<!DOCTYPE html>
<html>

	<head>
		<meta charset="UTF-8">
		<title>移动小英雄</title>

		<style type="text/css">
			#map {
				width: 512px;
				height: 480px;
				background-image: url(img/background.png);
			}
			
			#hero {
				position: absolute;
				top: 120px;
				left: 120px;
			}
			#score{
				position: absolute;
				top: 90px;
				left: 120px;
				color: red;
			}
			#monster {
				position: absolute;
				top: 120px;
				left: 220px;
			}
			
			#timecounter{
				position: absolute;
				top: 90px;
				left: 220px;
				color: gold;
			}
		</style>

		<script type="text/javascript">
			//定义速度的变量
			var speed = 10;
			//分数
			var score = 0;
			
			//时间
			var second = 10;
			
			window.onload = function(){
				starCount();
			}
			
			//DOM0级别绑定键盘事件
			window.onkeydown = function(event) {

				moveHero(event);
				
				
			}
			
			
			function timecounter(){
				
				second--;
				
				console.log("second="+second);
				let objCounter= document.getElementById("timecounter");
				if(objCounter){					
					objCounter.innerHTML = second+"秒";
				}
				
				//游戏结束
		 		if(second<=0){
		 			alert("游戏结束");
		 			
		 			second = 10;
		 			score=0;
		 			
		 		}
				
				
				
			}
			
			function starCount(){
				setInterval("timecounter()",1000);
			}
			
			
			
			//event :事件对象   --》 键盘的值: event.keyCode
			function moveHero(event) {
				
				
				
				let objHero = document.getElementById("hero");
				let objScore = document.getElementById("score");
				
				
				
				
				let objMonster = document.getElementById("monster");
				
				let objMapDiv = document.getElementById("map");
				//console.log(event.keyCode);
				
				//console.log(score);
				
				objScore.innerHTML = score+"分";
				
				
				//获取当前英雄所在的位置
				let heroLeft = objHero.offsetLeft;//120

				let heroTop = objHero.offsetTop;
				
				
				//获取当前怪兽所在的位置
				let monsterLeft = objMonster.offsetLeft;//120

				let monsterTop = objMonster.offsetTop;
				
				
				//获取地图的宽度
				let mapWidth = document.getElementById("map").clientWidth;
				let mapHeight = document.getElementById("map").clientHeight;
				
				//console.log(second);
				
				//游戏结束
		 		if(second<=0){
		 			alert("游戏结束");
		 			second = 10;
		 			score=0;
		 			//return;
		 		}else{
		 			
				
				//碰撞

				/*
				 ←:37
				 →:39
				 ↑:38
				 ↓:40
				  */
			 	//碰撞
			 	//if(heroLeft >=monsterLeft-32){
		 		if(Math.abs(monsterLeft-heroLeft)<=32 && Math.abs(monsterTop-heroTop)<=32 ){
		 			
		 			score++;
		 			
		 			
					objScore.innerHTML = score+"分";
		 			
		 			//alert("碰到了");
		 			//console.log('碰到了');
		 			//小怪兽位置要随机出现
					//38~460之间
					let leftRandom = Math.random()* 422+38;
					//30~450之间
					let topRandom = Math.random()* 420+30;
					
					let monsterImg =document.getElementById("monsterimg");
					
					let objCounter = document.getElementById("timecounter");
					
					if(monsterImg){
						//移除小怪兽
		 				objMonster.removeChild(monsterImg);
		 				objMapDiv.removeChild(objCounter);
		 				
		 				second = 10;
					}

		 			
		 			//在随机的位置生成
		 			//生成小怪兽
		 			let newMonster = document.createElement("img");
		 			newMonster.src='img/monster.png';

		 			newMonster.id="monsterimg";
		 			
		 			//计时器
		 			let newCounter =document.createElement("div");
		 			newCounter.innerHTML=second+"秒";
		 			
		 			newCounter.id="timecounter";
	
		 				//坐标随机
		 			objMonster.style.left = leftRandom+"px";
		 			objMonster.style.top = topRandom+"px";
		 			
		 			newCounter.style.left=leftRandom+"px";
		 			newCounter.style.top=(topRandom-30)+"px";
		 			
		 			
		 			objMonster.appendChild(newMonster);
		 			objMapDiv.appendChild(newCounter);
		 		
		 			
		 		}
		 		
		 		
		 		
		 		
		 		
		 		
			
				 switch (event.keyCode){
				 	case 39: //往右
	
				 	
				 		heroLeft+=speed;
				 		
				 		if(heroLeft>=mapWidth-46){
				 			heroLeft=mapWidth-46;
				 			//heroLeft=38;
				 		}
				 		
				 		
				 		objHero.style.left = heroLeft+"px";
				 		objScore.style.left = heroLeft+"px";
				 		
				 		break;
				 		
					case 37: //往左
					
						
					
				 		heroLeft-=speed;
				 		
				 		
				 		if(heroLeft<=38){
				 			heroLeft=38;
				 		}
				 		
				 		objHero.style.left = heroLeft+"px";
				 		objScore.style.left = heroLeft+"px";
				 		
				 		break;				 		
				 	
				 	case 38: //往上
				 		heroTop-=speed;
				 		
				 		
				 		if(heroTop<=8){
				 			heroTop=8;
				 		}
				 		
				 		objHero.style.top = heroTop+"px";
				 		objScore.style.top = (heroTop-30)+"px";
				 		break;		
				 	case 40: //往下
				 		heroTop+=speed;

				 		if(heroTop>=mapHeight-60){
				 			heroTop=mapHeight-60;
				 		}
				 		
				 		objHero.style.top = heroTop+"px";
				 		objScore.style.top = (heroTop-30)+"px";
				 		break;		
				 	
				 	
				 	default:
				 		break;
				 }
		 		}
				
				
				 

			}
		</script>
	</head>

	<body>

		<div id="map">
			<div id="timecounter">10秒</div>
			<div id="monster">
				<img id="monsterimg" src="img/monster.png" />
			</div>
			
			<div id="score">0分</div>
			<div id="hero">
				<img src="img/hero.png" />
			</div>
			
			
		</div>
		
		

	</body>

</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

FJSAY

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

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

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

打赏作者

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

抵扣说明:

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

余额充值