JAVASCRIPT 贪吃蛇

2016-02-19 21:24 10 1 收藏

最近很多朋友喜欢上设计,但是大家却不知道如何去做,别担心有图老师给你解答,史上最全最棒的详细解说让你一看就懂。

【 tulaoshi.com - Web开发 】

    在很早学 QuickBasic 的时候,就有一个蛇吃食物的游戏,当时是作为 Basic 的一个示例提供的。当时只顾得玩了,竟没想到要把那些高人写的代码好好分析一下。现在做 Web 开发的培训,有一个用 Javascript 写的类似的小游戏,就花了大半天好好看了一下代码,觉得写的不错。
 
    功能:蛇吃食物有三种情况:走到的地方有食物;走到的地方没有食物;走到的地方是墙壁。吃到食物后,蛇的身体会变长;碰到墙壁后 Game Over,询问是否重新开始。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

    整个游戏是在一个div框子(地图)里展开的,蛇有地图里的一系列div构成,初始状态(刚刚打开页面)蛇是一个div框,蛇头和蛇尾是在一起的,就是这个div框,以后吃了食物后div个数会变多,蛇就会长长。食物用一个span框表示,初始时和蛇一样其位置是随机产生的。蛇和食物的坐标用div和span的绝对位置表示。

    算法的关键是当蛇移动到新的位置后,判断前述的三种情况,做出相应的处理。而二维数组 Map[][] 就是判断的依据。二维数组 Map[][]通过其元素的值来表示蛇身、食物和空地。蛇身、食物和空地的值分别为'S'、'F'和'0'。

    用 Javascript 编程和其他语言的一个大的区别就是键盘的控制代码不同。js是通过 Key=event.keyCode 语句获取键盘码,再在多分支 switch 结构里分别处理。看完这些代码就会对浏览器里的键盘控制有所了解了。

    当然该段代码的最大价值还是让我们了解到网页游戏的大概写法,而算法其实是最重要的,把一个游戏的设想变为一堆包含许多的函数的结构化的代码,是值得我们借鉴和学习的。

    代码里有我的注释,结合我的以上大概分析介绍差不多能看懂了。

    题外问题:本人在调试的时候打算给原来的代码加一段方格显示功能,就写了个ShowGrid()函数,采用代码生成方格。但由于在2层循环内完成方格显示,效率十分低下,生成15*10的方格需要大约6秒。生成30*20 的方格竟然需要几分钟。基本不能采用此方法。改进建议:采用图片,既美观,速度也快。

    HTML
    head
      meta http-equiv="Content-Type" content="text/html; charset=gb2312"
      title贪吃蛇/title
    /head

    STYLE
      .Food { background-color: green;}
      .Snake {background-color: red;}
      .grid {border:1px solid #000}
    /STYLE

    SCRIPT langyage="javascript"
      var Rows=10
      var Cells=15
      var Num=20  //正方形格子的边长
      var BorderWidth=5
      var SpeedUp=5000

      //创建地图
      function CreateMap()
      {
        BW = eval(Cells*Num + 2*BorderWidth)  //宽度
        BH = eval(Rows*Num + 2*BorderWidth)   //高度
        document.body.innerHTML+='div id=MainMap style=position:absolute;left:'+(document.body.clientWidth-BW)/2+';top:'+(document.body.clientHeight-BH)/2+';width:'+BW+';height:'+BH+';border-width:'+BorderWidth+';border-style:outset;border-color:#0000ff/div'

        Map = new Array() //创建全局数组Map[]
        for(y=0; yRows; y++)
        {
         Map[y]=new Array() //创建全局二维数组Map[][],初始值为'0'
         for(x=0; xCells; x++)
           Map[y][x] = '0'  //'0'值表示“空地”
        }

        //ShowGrid();  //显示地图内格子

        Sx = parseInt(Math.random()*Cells) //创建全局变量Sx,赋予随机数
        Sy = parseInt(Math.random()*Rows)  //创建全局变量Sy,赋予随机数
        CreateSnake()  //生成蛇 - div
        CreatFood()    //生成食物 - span
        AllDiv = MainMap.all.tags('DIV')   //创建全局数组AllDiv,只有一个元素AllDiv[0]。MainMap是div的ID
        AllSpan = MainMap.all.tags('SPAN') //创建全局数组AllSpan,只有一个元素AllSpan[0]
      }

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

      //显示地图内格子
      function ShowGrid()
      {
        for(r=0; rRows; r++)  //行
        {
          t = r*Num;
          for(c=0; cCells; c++)  //列
          {
            l = c*Num;
            MainMap.innerHTML += 'table style="position:absolute;left:'+ l +';top:'+ t +';width:'+Num+';height:'+Num+';" cellpadding=0 cellspacing=0trtd align=center valign=middle class=gridO/td/trtable'
          }
        }
      }

来源:http://www.tulaoshi.com/n/20160219/1626083.html

延伸阅读
孕妈咪过年别贪吃 春节期间各种美食诱惑让人直流口水,不过对于孕妈咪们来说,在春节期间是需要忌口的,孕妈咪过节饮食应遵循什么原则呢? 1、饮食宜清淡 食物烹饪中避免油炸、煎、熏等方法。饮食清淡,不宜过咸过油。汤以素汤为主,少食排骨、骨头汤。 2、少食多餐 少食多餐,控制甜食、水果及脂肪量高...
标签: 饮食禁忌
心脏病是危害人类健康的疾病之一,有先天性心脏病与后天心脏病两种。患有心脏病的人在饮食上要格外谨慎,不能随心所欲的吃。想知道心脏病人吃什么好以及心脏病的饮食吗?那就一起来看看吧。>>>常吃一野菜竟能治牙疼 心脏病人饮食禁忌 1、忌吃高糖食物,以免因血糖升高而使三酸甘油脂的合成增加,引发血脂升高,对心...
标签: 饮食禁忌
前两天益阳的刘先生到医院找到医生,他发现自己的身上竟然出现了二十多个鹅蛋大小的石头”,这样的石头”让刘先生和妻子感觉到非常的害怕。医生观察刘先生身上的这种石头”,又详细的询问刘先生平时的生活方式、以及病史,知晓了刘先生身上的这种石头的来源,原来刘先生身上的这种石头是因为在平时的生活中贪吃一种食物导致...
标签: 营养价值
蛇瓜之所以叫蛇瓜相信很多人心中已经有答案了,就是因为其外形很像蛇的形状,因此人们将其称作为蛇瓜。蛇瓜的营养丰富,还具有一定的食疗作用,关于蛇瓜你了解多少呢?看看下面这篇文章,普及一下关于蛇瓜的养生知识吧! 目录 1、蛇瓜是什么 2、蛇瓜的营养价值 3、蛇瓜的功效与作用 4、蛇瓜的吃法大全 5、孕妇能吃...
标签: 营养价值
在生活当中,每个人都吃过苹果,因为苹果当中维生素非常高也深受大家的喜爱,但是爱苹果的人士肯定也有见过一种像苹果但是颜色形状、皮质又和苹果不一样的的水硕果,那这个水果就是蛇果,蛇果可能大家经常见到但是却不经常吃到,因为它的营养价值比苹果高所以在价格上也比较高,所得,人们通常还是选择一般的苹果来补充维生素,那蛇果的的...

经验教程

819

收藏

93
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部