<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12
      代碼改變世界

      javascript異步編程系列【十一】----HTML5 canvas編程入門游戲發布

      2011-10-08 07:41  【當耐特】  閱讀(6487)  評論(6)    收藏  舉報

      一.簡介

      1976年,Gremlin平臺推出了一款經典街機游戲Blockade。游戲中,兩名玩家分別控制一個角色在屏幕上移動,所經之處砌起圍欄。角色只能向左、右方向90度轉彎,游戲目標保證讓對方先撞上屏幕或圍欄。 聽起來有點復雜?其實就是下面這個樣子:

      基本上就是兩條每走一步都會長大的貪吃蛇比誰后完蛋,玩家要做的就是避免撞上障礙物和越來越長的身體。更多照片、視頻可以看 GamesDBase 的介紹。

      Blockade 很受歡迎,類似的游戲先后出現在 Atari 2600、TRS-80、蘋果 2 等早期游戲機、計算機上。但真正讓這種游戲形式紅遍全球的還是21年后隨諾基亞手機走向世界的貪吃蛇游戲——Snake。

      image

       

       

       

      二.相關算法

      a.移動,蛇尾去掉,蛇頭加一個元素

       p.push({ x: p[p.length - 1].x + 1, y: p[p.length - 1].y });
      p.shift();

       

      b.生成蛇的食物(這里可以加一個遞歸,如果生成的位置和蛇的位置重疊,重新生成,一直遞歸下去直到沒有重疊)

       var MR = Math.random;
      function drawSnakeAndFood(p) {
      if (foodPositions.x == -1 && foodPositions.y == -1) {
      //random____0----39
      foodPositions.x = MR() * 40 | 0;
      foodPositions.y = MR() * 40 | 0;
      }
      cxt.fillStyle = randomColor();
      cxt.fillRect(foodPositions.x * width, foodPositions.y * height, height, width);
      }

       

      c.吃食物,如果蛇頭的位置和食物的位置是相同的話,代表吃到了食物,不進行p.shift(),這樣的話蛇身就變長

       if (p[p.length - 1].x == foodPositions.x && p[p.length - 1].y == foodPositions.y) {
      foodPositions.x = -1;
      foodPositions.y = -1;
      } else {
      clearColor(p[0]);
      p.shift();
      }

       

      d.GameOver判斷

      gameover分兩種,

      第一種是撞到墻壁的障礙物

      if (p[p.length - 1].x < 0 || p[p.length - 1].x > 39 || p[p.length - 1].y < 0 || p[p.length - 1].y > 39) {
      gameOver = true;
      }

       

      第二種是撞到自己的身體

      function IsInSnake(bodyPositions, p) {
      for (i = 0; i < bodyPositions.length - 1; i++) {
      if (bodyPositions[i].x == p.x && bodyPositions[i].y == p.y ) {
      return true;
      }
      }
      return false;
      }

       

      d.控制核心(Jscex)

       var gameAsync = eval(Jscex.compile("async", function (p) {
      while (true) {
      $await(Jscex.Async.sleep(100));
      if (p[p.length - 1].x < 0 || p[p.length - 1].x > 39 || p[p.length - 1].y < 0 || p[p.length - 1].y > 39) {
      gameOver = true;
      }
      ``````
      ``````
      ``````
      if (IsInSnake(p, { x: p[p.length - 1].x, y: p[p.length - 1].y })) {
      gameOver = true;
      }
      drawSnakeAndFood(p);
      if (gameOver) {
      drawGameOver();
      document.getElementById("btnReset").disabled = "";
      break;
      }
      }
      }));

      that’s all!就這么簡單。這可謂是html5 canvas編程入門最合適不過的游戲了。

       

      您可能還喜歡:

      javascript異步編程系列【目錄】

      HTML5版3D實驗室系列【目錄】

      主站蜘蛛池模板: 亚洲av成人无码精品电影在线| 日韩激情一区二区三区| 国产一区二区三区四区激情| 国产午夜亚洲精品一区| 国产在线午夜不卡精品影院| 久热久精久品这里在线观看| 中文字幕日韩人妻一区| 老司机免费的精品视频| 人妻丰满熟妇av无码区| 日产精品一区二区三区免费| 亚洲国内精品一区二区| 高清无码18| 青青草一区二区免费精品| 国产精品亚洲二区在线看| 亚洲中文字幕第二十三页| 亚洲国产精品久久久天堂麻豆宅男| 亚洲欧洲日产国码久在线| 中文字幕在线视频不卡| 制服 丝袜 亚洲 中文 综合| a4yy私人毛片| 激,情四虎欧美视频图片| 西西444www高清大胆| 精品一区二区三区蜜桃久| 在线中文字幕第一页| 免费无码一区无码东京热| 国产熟女激情一区二区三区| 亚洲日韩久久综合中文字幕| 谷城县| 大兴区| 人人妻人人澡人人爽| 国产福利酱国产一区二区| 日韩精品国产另类专区| 视频一区视频二区中文字幕| 最新精品露脸国产在线| 视频一区二区三区四区不卡| 欧美肥老太牲交大战| 亚洲AV成人无码久久精品| 国产成人精品1024免费下载| 久久精品人人槡人妻人人玩av| 国产中文字幕精品免费| 国产精品中文字幕久久|