npc随机移动,player控制键盘去“吃”npc,吃掉得分。

这是一个简单的HTML5游戏,描述了如何在游戏区域内随机生成NPC并使其移动,玩家通过键盘控制角色与NPC碰撞,碰撞时NPC消失,玩家得分。目前游戏未设置角色边界限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

功能简述:在可视区域内随机生成一个npc,并随机移动,玩家通过键盘wasd或上下左右键控制player移动,触碰到npc时,npc消失,玩家得一分,并再次随机产生一个npc。

不足:没有给player加边界限制。

效果如下图:

实现代码如下:

<!DOCTYPE html >
<html >
<head>
<meta charset="UTF-8">
<title>hello</title>
<style type="text/css">
    *{
        padding: 0px;
        margin: 0px;
    }
    body{
        background: wheat;
    }
    .contain{
        position: relative;
        
    }
    .npc{
        height: 50px;
        width:50px;
        background-color: brown;
        position: absolute;
        
    }
    .move{
        height: 50px;
        width: 50px;
        background-color: red;
        position: absolute;        
        
    }
</style>
</head>
<body>
<div class="contain">
    <h1>得分:</h1>
    <div class="npc" id="npc">npc</div>
    <div class="move" id="move">move</div>
</div>
<script type="text/javascript">
    var npc=document.getElementById('npc');
    var mymove=document.getElementById('move');
    var hyi=document.getElementsByTagName('h1')[0];
    var defen=0;
    var left=500;//npc初始位置
    var top1=200;
    var is_xiangyou=true;//npc是否向右移动
    var is_xiangxia=true;
    var mytime;
    
    mytime=setInterval("npcyidong()",5);
    function npcyidong() {
        //console.log(left)
        if (parseInt(npc.style.left)>=1300) {
            is_xiangyou=false;
        }
        else if(parseInt(npc.style.left)<0){
            is_xiangyou=true;
        }
        switch(is_xiangyou){
            case true :
            left++;
            break;
            case  false:
            left--;
            break;
            default:
                console.log(is_xiangyou)
            break;
        }

        if (parseInt(npc.style.top)>=700) {
            is_xiangxia=false;
            console.log(is_xiangxia)
        }
        else if(parseInt(npc.style.top)<0){
            is_xiangxia=true;
            console.log(is_xiangxia)
        }
        switch(is_xiangxia){
            case true :
            top1++;
            break;
            case  false:
            top1--;
            break;
            default:
                console.log(is_xiangxia)
            break
        }
        npc.style.left=left+"px";
        npc.style.top=top1+"px";

        
        //碰到了,停止运动。四种情况,左右上下
        if(myleft>npc.offsetLeft-move.offsetWidth&&myleft<npc.offsetLeft+npc.offsetWidth&&
            mytop>npc.offsetTop-move.offsetHeight&&
            mytop<npc.offsetTop+npc.offsetHeight
            ){
            //alert("碰到了")
            var ran=parseInt(Math.random()*1000);
            console.log(ran)
            defen=defen+1;
            left=ran;
            top1=ran/2;
            hyi.innerHTML="得分:"+defen;
        }
    }
    


    
    var mytop=0; 
    var myleft=0;
    document.addEventListener("keydown",keydown);
    //键盘监听,注意:在非ie浏览器和非ie内核的浏览器
    //参数1:表示事件,keydown:键盘向下按;参数2:表示要触发的事件
    function keydown(event){
    //表示键盘监听所触发的事件,同时传递传递参数event
           //alert(event.keyCode);//keyCode表示键盘编码
           if(event.keyCode==40||event.keyCode==83){
               //下
               mytop=mytop+40;
               mymove.style.top= mytop+"px";
               //console.log(mytop+"px");
           }
           else if(event.keyCode==38||event.keyCode==87){
               //上
               mytop=mytop-40;
               mymove.style.top= mytop+"px";
               //console.log(mytop+"px");
           }
           else if(event.keyCode==37||event.keyCode==65){
               //左
               myleft=myleft-40;
               mymove.style.left= myleft+"px";
               //console.log(myleft+"px");
           }
           else if(event.keyCode==39||event.keyCode==68){
               //右
               myleft=myleft+40;
               mymove.style.left= myleft+"px";
               //console.log(myleft+"px");
           }

           

    }
</script>
</body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值