自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

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

上節(jié)中講了如何尋路,在和朋友們討論時(shí)都反應(yīng)有時(shí)走的不太對(duì),繞遠(yuǎn)路了,其實(shí)代碼主要是大方向的判斷  比如目標(biāo)在右上,那應(yīng)該是先右還是先上 這個(gè)并沒(méi)有做處理,如果這個(gè)做了處理,效果會(huì)更好一些,但也難免會(huì)走彎路。  貪心就是這樣,不是最優(yōu),接近最優(yōu)。也希望其他的同學(xué)有意見(jiàn)的可以討論下。我這也只是個(gè)人想法。

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

  1. clearLine: function (x1, y1, color, isClick) {   
  2.     if (this.isEmpty(x1, y1)) {   
  3.         if (isClick) game.ready.flyin();   
  4.         return;   
  5.     };   
  6.     //給定一個(gè)坐標(biāo),看是否有滿足的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];//橫線很簡(jiǎn)單,就是數(shù)組的一項(xiàng),現(xiàn)成的   
  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. }, 

大家可以看看代碼,主要有兩點(diǎn) 1、或許需要處理的 橫豎斜線 4個(gè)數(shù)組,然后看這4個(gè)數(shù)組是否有連續(xù)的。判斷是否連續(xù)只需要一個(gè)狀態(tài)數(shù)組來(lái)維持就可以了。

由于考慮到同時(shí)消除多行的情況,所以要把連續(xù)的line 連接在一起,并在結(jié)算得分時(shí)考慮獎(jiǎng)勵(lì)。 

isClick參數(shù)主要用于判斷是否是用戶點(diǎn)擊進(jìn)行消行的還是新泡泡飛入產(chǎn)生的。  如果達(dá)不到消行條件并且是飛入的,那就不能再調(diào)用飛入了,否則死循環(huán)了.

滿足的消行代碼也比較簡(jiǎn)單,就是播放一個(gè)消行動(dòng)畫(huà),其實(shí)這個(gè)動(dòng)畫(huà)真心沒(méi)勁,要想設(shè)計(jì)好些可以做個(gè)漸變偏移消除。  現(xiàn)在我發(fā)現(xiàn)起初沒(méi)有設(shè)計(jì)一個(gè)數(shù)組來(lái)維護(hù)狀態(tài)有些不太明智,因?yàn)檫€有獎(jiǎng)勵(lì)的星星和炸彈要繪制,挺麻煩的。。 那么,把積分顯示出來(lái)吧。 這樣就可以先試玩起來(lái)了:

  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. }; 

第三節(jié)在設(shè)計(jì)里談到了 百搭星和炸彈,我太懶了,不打算講了,因?yàn)檫@些處理也沒(méi)有什么復(fù)雜的,HTML5 Canvas的的基礎(chǔ)學(xué)習(xí)也算可以了。后面應(yīng)該學(xué)一些更深入的東西,比如如何處理性能、物體碰撞、運(yùn)動(dòng)學(xué)神馬的。。。

現(xiàn)在游戲應(yīng)該還有bug,大家可以看看代碼發(fā)現(xiàn)吧,這個(gè)系列就到這了,謝謝大家。

試玩地址: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游戲制作之五彩連珠(預(yù)覽)
  2. HTML 5游戲制作之五彩連珠(畫(huà)圖)
  3. HTML 5游戲制作之五彩連珠(設(shè)計(jì))
  4. HTML 5游戲制作之五彩連珠(動(dòng)畫(huà))
  5. HTML 5游戲制作之五彩連珠(尋路)
責(zé)任編輯:張偉 來(lái)源: 君之蘭的博客
相關(guān)推薦

2012-05-18 13:11:09

HTML5

2012-05-18 13:07:04

HTML5

2012-05-17 14:45:34

HTML5

2012-05-17 13:45:35

HTML5

2012-05-18 13:59:45

HTML5

2010-08-12 22:35:24

IBM培訓(xùn)

2011-11-30 15:14:32

HTML 5

2019-09-11 15:20:21

華為

2012-06-07 15:29:31

HTML5

2021-03-26 07:06:40

Windows 10Windows操作系統(tǒng)

2012-05-15 13:57:41

HTML5

2012-01-10 16:37:46

樂(lè)團(tuán)

2012-03-29 09:18:47

HTML5WEB

2020-04-22 10:01:26

Vim編輯器代碼

2019-09-12 10:10:10

Vim編輯器代碼

2013-08-27 14:20:09

游戲應(yīng)用圖標(biāo)ASO應(yīng)用商店優(yōu)化

2012-05-30 13:49:52

HTML5

2014-12-30 17:13:51

HTML5

2011-12-16 11:11:36

HTML 5

2012-05-15 10:35:35

HTML5
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)