成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

HTML 5游戲制作之五彩連珠(試玩)

開發 前端
既然可以走動了,那就可以判斷是否可以消除同樣顏色的行、列或斜線了。只要>=5個同樣的色球,就清除他們,并且可以繼續移動。如果不可以清除,那就再增加3個球。

上節中講了如何尋路,在和朋友們討論時都反應有時走的不太對,繞遠路了,其實代碼主要是大方向的判斷  比如目標在右上,那應該是先右還是先上 這個并沒有做處理,如果這個做了處理,效果會更好一些,但也難免會走彎路。  貪心就是這樣,不是最優,接近最優。也希望其他的同學有意見的可以討論下。我這也只是個人想法。

既然可以走動了,那就可以判斷是否可以消除同樣顏色的行、列或斜線了。只要>=5個同樣的色球,就清除他們,并且可以繼續移動。如果不可以清除,那就再增加3個球。 

  1. clearLine: function (x1, y1, color, isClick) {   
  2.     if (this.isEmpty(x1, y1)) {   
  3.         if (isClick) game.ready.flyin();   
  4.         return;   
  5.     };   
  6.     //給定一個坐標,看是否有滿足的line可以被消除   
  7.     //4根線 一  | / \   
  8.         
  9.     var current = this.getBubble(x1, y1);   
  10.     if (!current.color) {   
  11.         console.log(current);   
  12.     }   
  13.     var arr1, arr2, arr3, arr4;   
  14.     arr1 = this.bubbles[y1];//橫線很簡單,就是數組的一項,現成的   
  15.    
  16.     arr2 = [];   
  17.     for (var y = 0; y < game.cellCount; y++)   
  18.         arr2.push(this.getBubble(x1, y));//豎線就是一列。   
  19.    
  20.     arr3 = [current];   
  21.     arr4 = [current];   
  22.     for (var i = 1; i < game.cellCount ; i++) {   
  23.         if (x1 - i >= 0 && y1 - i >= 0)//\斜線的上半部分...   
  24.             arr3.unshift(this.getBubble(x1 - i, y1 - i));   
  25.         if (x1 + i < game.cellCount && y1 + i < game.cellCount)//\斜線的下半部分   
  26.             arr3.push(this.getBubble(x1 + i, y1 + i));   
  27.    
  28.         if (x1 - i >= 0 && y1 + i < game.cellCount)// /斜線的下半部分   
  29.             arr4.push(this.getBubble(x1 - i, y1 + i));   
  30.         if (x1 + i < game.cellCount && y1 - i >= 0)// /斜線的上班部分   
  31.             arr4.unshift(this.getBubble(x1 + i, y1 - i));   
  32.     }   
  33.    
  34.     var line1 = getLine(arr1);   
  35.     var line2 = getLine(arr2);   
  36.     var line3 = getLine(arr3);   
  37.     var line4 = getLine(arr4);   
  38.    
  39.     var line = line1.concat(line2).concat(line3).concat(line4);   
  40.     if (line.length < 5) {   
  41.         if (isClick) game.ready.flyin();   
  42.         return;   
  43.     }   
  44.     else {   
  45.         var me = this;   
  46.         var i = 0;   
  47.    
  48.         game.play("clearline"function () {   
  49.             if (i == line.length) {   
  50.                 game.score.addScore(line.length);   
  51.                 game.stop("clearline");   
  52.                 me.isMoving = false;   
  53.                 //game.ready.flyin();   
  54.                 return;   
  55.             }   
  56.             me.isMoving = true;   
  57.             var p = line[i];   
  58.             me.setBubble(p.x, p.y, null);   
  59.             i++;   
  60.         }, 100);   
  61.     }   
  62.    
  63.    
  64.     function getLine(bubbles) {   
  65.    
  66.         var line = [];   
  67.         for (var i = 0; i < bubbles.length; i++) {   
  68.             var b = bubbles[i];   
  69.             if (b.color == color) {   
  70.                 line.push({ "x": b.x, "y": b.y });   
  71.             }   
  72.             else {   
  73.                 if (line.length < 5)   
  74.                     line = [];   
  75.                 else 
  76.                     return line;   
  77.             }   
  78.         }   
  79.         if (line.length < 5)   
  80.             return [];   
  81.         return line;   
  82.     }   
  83. }, 

大家可以看看代碼,主要有兩點 1、或許需要處理的 橫豎斜線 4個數組,然后看這4個數組是否有連續的。判斷是否連續只需要一個狀態數組來維持就可以了。

由于考慮到同時消除多行的情況,所以要把連續的line 連接在一起,并在結算得分時考慮獎勵。 

isClick參數主要用于判斷是否是用戶點擊進行消行的還是新泡泡飛入產生的。  如果達不到消行條件并且是飛入的,那就不能再調用飛入了,否則死循環了.

滿足的消行代碼也比較簡單,就是播放一個消行動畫,其實這個動畫真心沒勁,要想設計好些可以做個漸變偏移消除。  現在我發現起初沒有設計一個數組來維護狀態有些不太明智,因為還有獎勵的星星和炸彈要繪制,挺麻煩的。。 那么,把積分顯示出來吧。 這樣就可以先試玩起來了:

  1. game.score = {   
  2.     basic: 0,   
  3.     operate: 0,   
  4.     star1: 0,   
  5.     star2: 0,   
  6.     boom: 0,   
  7.     draw: function () {   
  8.         var startX = game.cellWidth * 10 + game.map.startX;   
  9.         var startY = game.map.startY;   
  10.         var ctx = game.ctx;   
  11.         ctx.save();   
  12.         ctx.translate(startX, startY);   
  13.         ctx.clearRect(0, 0, 150, 400);   
  14.         ctx.strokeStyle = "#456";   
  15.         //ctx.strokeRect(0, 0, 150, 200);   
  16.         ctx.font = "24px 微軟雅黑";   
  17.         ctx.fillStyle = "#fefefe";   
  18.         ctx.fillText("score:" + (this.basic * 5 + this.star1 * 8 + this.star2 * 10 + this.boom * 20), 0, 30);   
  19.         ctx.stroke();   
  20.         ctx.restore();   
  21.     },   
  22.     addScore: function (length) {   
  23.         switch (length) {   
  24.             case 5:   
  25.                 this.basic++;   
  26.                 break;   
  27.             case 6:   
  28.                 this.star1++;   
  29.                 break;   
  30.             case 7:   
  31.                 this.star2++;   
  32.                 break;   
  33.             default:   
  34.                 this.boom++;   
  35.                 break;   
  36.         }   
  37.         this.draw();   
  38.         console.log(this.score);   
  39.     },   
  40. }; 

第三節在設計里談到了 百搭星和炸彈,我太懶了,不打算講了,因為這些處理也沒有什么復雜的,HTML5 Canvas的的基礎學習也算可以了。后面應該學一些更深入的東西,比如如何處理性能、物體碰撞、運動學神馬的。。。

現在游戲應該還有bug,大家可以看看代碼發現吧,這個系列就到這了,謝謝大家。

試玩地址:http://zhengliangjun.sinaapp.com/colorline.html

源碼下載:http://download.csdn.net/download/maddemon/4154990 

原文鏈接:http://www.cnblogs.com/mad/archive/2012/03/19/2407107.html

【編輯推薦】

  1. HTML 5游戲制作之五彩連珠(預覽)
  2. HTML 5游戲制作之五彩連珠(畫圖)
  3. HTML 5游戲制作之五彩連珠(設計)
  4. HTML 5游戲制作之五彩連珠(動畫)
  5. HTML 5游戲制作之五彩連珠(尋路)
責任編輯:張偉 來源: 君之蘭的博客
相關推薦

2012-05-17 14:45:34

HTML5

2012-05-17 13:45:35

HTML5

2012-05-18 13:11:09

HTML5

2012-05-18 13:07:04

HTML5

2012-05-18 13:59:45

HTML5

2010-08-12 22:35:24

IBM培訓

2011-11-30 15:14:32

HTML 5

2019-09-11 15:20:21

華為

2021-03-26 07:06:40

Windows 10Windows操作系統

2012-06-07 15:29:31

HTML5

2012-05-15 13:57:41

HTML5

2012-01-10 16:37:46

樂團

2012-03-29 09:18:47

HTML5WEB

2019-09-12 10:10:10

Vim編輯器代碼

2020-04-22 10:01:26

Vim編輯器代碼

2013-08-27 14:20:09

游戲應用圖標ASO應用商店優化

2012-05-30 13:49:52

HTML5

2014-12-30 17:13:51

HTML5

2021-03-29 15:07:19

AI 數據人工智能

2011-12-16 11:11:36

HTML 5
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 青草福利 | 56pao在线| 国产精品久久国产精品 | 午夜av成人 | 99热在线观看精品 | 亚洲天堂影院 | 中文字幕亚洲欧美日韩在线不卡 | 亚洲精品黄 | 夜夜草| 久久久一区二区三区四区 | 91精品国产一区二区三区香蕉 | 古装三级在线播放 | 日韩在线一区二区三区 | 中文区中文字幕免费看 | 日日干日日| 福利社午夜影院 | 国产在线一区观看 | 伊人二区| 欧美国产一区二区 | www97影院 | 狠狠做六月爱婷婷综合aⅴ 国产精品视频网 | 亚洲成人自拍 | 欧美日韩网站 | 国产精品国产三级国产a | 国产精品2区 | 精品乱码一区二区 | 久久大全| 成人午夜精品 | 91精品国产91久久综合桃花 | 精精国产xxxx视频在线播放 | 黄色毛片黄色毛片 | 国产高清在线视频 | 成人精品一区 | 日韩视频精品在线 | 午夜小视频免费观看 | 日韩在线看片 | 黄色精品 | 美女亚洲一区 | 羞羞的视频免费在线观看 | 国产婷婷 | 欧美日韩国产免费 |