`
lmh2072005
  • 浏览: 114036 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

javascript 贪吃蛇 单人版

阅读更多
<!doctype html>
<html>
    <head>
        <meta http-equiv="content-type" content="text/html; charset=UTF-8">
        <!-- <meta charset="UTF-8"> -->
        <title></title>
        <link charset="utf-8" href="style.css" rel="stylesheet" rev="stylesheet" type="text/css" />
        <style type="text/css">
            html,body
            {
                font:12px/1.5 'Trebuchet MS', 'Lucida Sans Unicode', 'Lucida Grande', 'Lucida Sans', Arial, sans-serif;
            }
            #box{
                width:400px;
                height:400px;
                position:absolute;
                left:100px;
                top:100px;
                border:1px solid #000;
                overflow:hidden;
                background:#000;
            }
            .snake{
                width:8px;
                height:8px;
                border:1px solid #d2d2d2;
                overflow:hidden;
                position:absolute;
                background:#fff;
            }
            .food{
                position:absolute;
                width:9px;
                height:9px;
                border:1px solid red;
                background:red;
                overflow:hidden;
                display:inline-block;
            }
            #result{
                position:absolute;
                left:100px;
                top:510px;
            }
            #operate{
                position:absolute;
                left:520px;
                top:100px;
            }
        </style>
    </head>
    <body>
        <div id="box">
        </div>
        <div id="result">级别:1</div>
        <div id="operate">
            级别选择
            <select id="selectLevel">
                <option>1</option>
                <option>2</option>
                <option>3</option>
                <option>4</option>
                <option>5</option>
                <option>6</option>
                <option>7</option>
                <option>8</option>
                <option>9</option>
            </select>
            <input type="button" value="开始" id="start" />
        </div>
        <script>
        function snake(){
            this.wrap = document.getElementById('box');  //容器
            this.ele = this.wrap.getElementsByTagName('div'); //初始化的snake
            this.head = this.ele[this.ele.length-1] || null; //head
            this.direction = 'right';  //方向
            this.initNum = 3;
            this.food = null;
            this.over = false;
            this.level = 1;
            this.eatNum = 0;
            this.result = document.getElementById('result');
            this.t = null;
        }
        snake.prototype.init = function(){
            this.wrap.innerHTML="";
            for(var m = 0;m < this.initNum;m++){
                var ss = this.creatEl();
                ss.className="snake";
            }
            this.head = this.ele[this.ele.length-1];
            var _this = this;
            for(var i = 0,j = _this.ele.length;i < j;i++){
                _this.ele[i].style.left=_this.ele[i].offsetWidth*i+"px";
                _this.ele[i].style.top="0px";
            }
            _this.food = _this.createFood();
            document.onkeydown = function(e){
                var e = e|| window.event;
                if(e.keyCode=='37'&&_this.direction!='left'&&_this.direction!='right'){
                    _this.direction='left';
                }else if(e.keyCode=='38'&&_this.direction!='top'&&_this.direction!='bottom'){
                    _this.direction='top';
                }else if(e.keyCode=='39'&&_this.direction!='left'&&_this.direction!='right'){
                    _this.direction='right';
                }else if(e.keyCode=='40'&&_this.direction!='top'&&_this.direction!='bottom'){
                    _this.direction='bottom';
                }
            }
        }
        snake.prototype.run = function(){
            this.checkRule();
            this.eat();
            if(this.over){
                alert('game is over');
                return false;
            }
            var el = this.ele;
            for(var i = 0,j = el.length;i < j-1;i++){
              el[i].style.left = el[i+1].style.left;
              el[i].style.top = el[i+1].style.top;
            }
            var head = this.head;
            switch(this.direction){
              case 'left':head.style.left=parseInt(head.style.left)-head.offsetWidth+"px";break;
              case 'right' :head.style.left=parseInt(head.style.left)+head.offsetWidth+"px";break;
              case 'top' :head.style.top=parseInt(head.style.top)-head.offsetHeight+"px";break;
              case 'bottom' :head.style.top=parseInt(head.style.top)+head.offsetHeight+"px";break;
            }
        }
        snake.prototype.begin = function(){
            clearInterval(this.t);
            this.t = null;
            if(this.over){
               this.over = false;
               this.food = null;
               this.direction = 'right';
               this.eatNum = 0;
               this.init();
            }
            var _this = this;
            _this.t = setInterval(function(){_this.run();},200/_this.level);
        }
        snake.prototype.createFood=function(){
            var food = this.food || null;
            if(!this.food){
                food = document.createElement('span');
                this.wrap.appendChild(food);
                food.className="food";
            }
            food.style.left=Math.floor(Math.random()*Math.floor(this.wrap.offsetWidth/this.head.offsetWidth))*this.head.offsetWidth+"px";
            food.style.top =Math.floor(Math.random()*Math.floor(this.wrap.offsetHeight/this.head.offsetHeight))*this.head.offsetHeight+"px";
            var el = this.ele;
            for(var i = 0,j = el.length;i < j-1;i++){
               while(el[i].style.left == food.style.left && el[i].style.top == food.style.top){
                 food.style.left=Math.floor(Math.random()*Math.floor(this.wrap.offsetWidth/this.head.offsetWidth))*this.head.offsetWidth+"px";
                 food.style.top =Math.floor(Math.random()*Math.floor(this.wrap.offsetHeight/this.head.offsetHeight))*this.head.offsetHeight+"px";
               }
            }
            return food;
        }
        snake.prototype.eat=function(){
            if(this.food && this.head.style.left == this.food.style.left && this.head.style.top == this.food.style.top){
                this.wrap.insertBefore(this.ele[0].cloneNode(true),this.ele[0]);
                this.food = this.createFood();
                this.eatNum++;
                if(this.eatNum==this.level*5){
                    this.level++;
                    this.result.innerHTML='级别:'+this.level;
                }
            }
        }
        snake.prototype.checkRule=function(){
            var head = this.head,
                overRule = {
                    'hitLeft' : (this.direction == 'left' && parseInt(this.head.style.left) <= 0),
                    'hitRight' : (this.direction == 'right' && parseInt(this.head.style.left) >= this.wrap.offsetWidth - parseInt(getStyle(this.wrap,'border-left-width')) - parseInt(getStyle(this.wrap,'border-right-width')) - this.head.offsetWidth),
                    'hitTop' : (this.direction == 'top' && parseInt(this.head.style.top) <= 0),
                    'hitBottom' : (this.direction == 'bottom' && parseInt(this.head.style.top) >= this.wrap.offsetHeight - parseInt(getStyle(this.wrap,'border-top-width')) - parseInt(getStyle(this.wrap,'border-bottom-width')) - this.head.offsetHeight)
                }
            if(overRule['hitLeft'] || overRule['hitRight'] || overRule['hitTop'] || overRule['hitBottom']){
                clearInterval(s.t);
                s.t = null;
                this.over = true;
                return false;
            }
            var el = this.ele;
            for(var i = 0,j = el.length;i < j-1;i++){
                if(this.head.style.left == el[i].style.left && this.head.style.top == el[i].style.top){
                    clearInterval(s.t);
                    s.t = null;
                    this.over = true;
                    return false;
                }
            }
        }
        snake.prototype.creatEl=function(){
            var el = document.createElement('div');
            this.wrap.appendChild(el);
            return el;
        }
        function getStyle(obj,pro){
            if(obj.currentStyle){
                return obj.currentStyle[pro];
            }else{
                var pro = pro.replace(/([A-Z])/g, "-$1").toLowerCase();
                return window.getComputedStyle(obj,null).getPropertyValue(pro);
            }
        }


        var s = new snake();
        s.init();
        document.getElementById('start').onclick=function(){
           var selectLevel = document.getElementById('selectLevel');
           s.level = selectLevel.options[selectLevel.selectedIndex].text;
           s.begin();
        }
        document.getElementById('selectLevel').onchange=function(){
            s.result.innerHTML='级别:'+this.options[this.selectedIndex].text;;
        }
        </script>
    </body>
</html>
  • 大小: 11 KB
分享到:
评论

相关推荐

    JavaScript 贪吃蛇及其源代码

    JavaScript 贪吃蛇及其源代码 这个贪吃蛇项目是一款单人游戏。这个游戏是一个非常流行和有趣的游戏。在这里,玩家必须控制有边界平面上的白色矩形框(称为蛇)。你只需要使用箭头键控制蛇,然后吃掉那些红点,让你的...

    使用 JavaScript 编写的贪吃蛇游戏(附源代码).zip

    这款贪吃蛇游戏是一款单人游戏。玩家必须在有边框的平面上控制方形盒子(称为蛇)。与其他贪吃蛇游戏不同,这款贪吃蛇游戏的主要目标是逃离圆点球以求生存。当它向前移动以逃离圆点球时,它会留下一条痕迹。当蛇撞击...

    使用 JavaScript 编写的贪吃蛇程序源代码.zip

    这个贪吃蛇项目是一个单人游戏。这个游戏非常受欢迎,也很有趣。在这里,玩家必须控制有边框的平面上的白色矩形框(称为蛇)。你只需要使用箭头键控制蛇,然后吃掉那些红点,让你的蛇变大。 游戏制作 这款贪吃蛇游戏...

    使用 JavaScript 编写的诺基亚贪吃蛇游戏.zip

    诺基亚贪吃蛇游戏是一款单人游戏。玩家必须在有边框的平面上控制蓝色矩形框(称为蛇)。这款游戏非常受欢迎且有趣。您只需按任意箭头键即可开始移动蛇,然后吃掉那些蓝点即可得分,让蛇变大,并加快蛇的移动速度。 ...

    使用 JavaScript 编写的基本贪吃蛇游戏及其源代码.zip

    基本贪吃蛇游戏是一款单人游戏。玩家必须在有边框的平面上控制方形盒子(称为蛇)。这款游戏非常受欢迎且有趣。在这里,您知道自己要做什么。您只需按任意箭头键即可开始移动蛇,然后吃掉那些红点以获得分数并使蛇变...

    使用 JavaScript 编写的简单贪吃蛇游戏(附源代码).zip

    简单的贪吃蛇游戏是一款单人游戏。在这里,玩家必须控制有边框的平面上的黑色矩形框(称为蛇)。这款游戏非常受欢迎且有趣。在这里,您知道自己要做什么。您只需按任意箭头键即可开始移动蛇,然后吃掉那些黄点以获得...

    贪吃蛇作品

    这个项目可能是用某种编程语言如Python、JavaScript或者C++实现的。常见的实现方式包括使用二维数组来表示游戏地图,利用循环和条件语句来处理蛇的移动和碰撞检测,以及事件监听来响应用户的输入。 **6. 可持续改进...

    c语言贪吃蛇游戏的双人对战版.rar

    【标题】"C语言贪吃蛇游戏的双人对战版"揭示了这是一个基于C语言编程实现的项目,它扩展了传统的单人贪吃蛇游戏,加入了双人对战模式,使得游戏更具竞技性和趣味性。在编程领域,C语言是一种基础且广泛使用的语言,...

    贪吃蛇.zip..._lan.zip

    【标题】:“贪吃蛇.zip..._lan.zip”这个标题暗示了我们正在处理一个与“贪吃蛇”游戏相关的压缩文件,它可能是该经典游戏的一个网络版本或多人联机版。".zip"是常见的文件压缩格式,用于将多个文件或文件夹打包成...

    js 贪食蛇-双蛇抢食

    《JS贪食蛇-双蛇抢食》是一个基于JavaScript实现的经典游戏,它融合了传统的单人贪食蛇游戏与创新的双人对战元素。在这个游戏中,两名玩家各自控制一条蛇,目标是通过吃食物来增长蛇身长度,同时避免触碰到自己的...

    Retro-Snaker:贪吃蛇大作战

    2. **多模式**:除了单人模式,游戏可能还提供了多人在线对战模式,玩家可以与其他玩家实时竞技,看谁能在有限的空间内生存更长时间。 3. **特殊道具与技能**:为了增加游戏趣味性,可能加入了特殊道具,如短暂的...

    snake:原始 3310 蛇游戏的大型多人游戏版本

    综合以上信息,我们可以推测这个项目是一个使用JavaScript编写的多人在线版贪吃蛇游戏。开发者利用Node.js搭建了服务器端,处理多玩家同步游戏状态,而前端可能使用HTML、CSS和JavaScript实现用户界面和交互。玩家...

    网络游戏

    多人蛇游戏是经典单人贪吃蛇游戏的升级版,它允许多个玩家同时在线进行游戏,增加了竞技和互动性,使得游戏体验更加丰富。 在JavaScript的世界里,创建这种实时交互的游戏涉及到以下几个关键知识点: 1. **...

    BrutalSnake:蛇,但实施自己的障碍修改

    4. **多模式游戏**:除了传统的单人模式,可能还设计了多人竞技模式,玩家之间可以互相干扰,使得游戏更加激烈。 5. **复杂地图**:地图可能不再只是简单的矩形,而是包含各种形状和结构,甚至有隐藏区域和通道,...

Global site tag (gtag.js) - Google Analytics