效果图
源码如下
<!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();
}
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);
}
function moveHero(event) {
let objHero = document.getElementById("hero");
let objScore = document.getElementById("score");
let objMonster = document.getElementById("monster");
let objMapDiv = document.getElementById("map");
objScore.innerHTML = score+"分";
let heroLeft = objHero.offsetLeft;
let heroTop = objHero.offsetTop;
let monsterLeft = objMonster.offsetLeft;
let monsterTop = objMonster.offsetTop;
let mapWidth = document.getElementById("map").clientWidth;
let mapHeight = document.getElementById("map").clientHeight;
if(second<=0){
alert("游戏结束");
second = 10;
score=0;
}else{
if(Math.abs(monsterLeft-heroLeft)<=32 && Math.abs(monsterTop-heroTop)<=32 ){
score++;
objScore.innerHTML = score+"分";
let leftRandom = Math.random()* 422+38;
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;
}
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>