cocos2d 消除類遊戲簡單的演算法 (一)

2021-09-08 17:39:17 字數 2580 閱讀 5464

市場上三消遊戲已經超級多了。主流的是地圖型的。差點兒是無盡模式。各種消除特效。各種各樣的過關方式,玩起來還是不錯的,就是遇到比較難的關卡,要多試幾次,運氣很好的時候就過了,不然卡死。

這個遊戲真正擴充套件的地方就是過關模式,還須要整個特殊的地圖編輯器。配合策劃,不斷公升級遊戲。

有各種各樣的地圖。這裡拿最簡單的矩形來說。需求:

1.這個演算法要生成乙個隨機的地圖,不能有3個橫著同樣或者3個豎著同樣。

2.這個地圖使用者移動一步能進行消除(不能是個死地圖)

初看到這個需求感覺還是蠻難的。後來想了下第2個需求應該先別管,假設是死地圖。再又一次生成一張地圖就能夠了。測試了下,生成死地圖的概率很低。

演算法實現的描寫敘述:

假設地圖的(0,0)在左上角。

很easyx從上面的最左邊開始往右生成,y從最上面直究竟部。

每次先推斷下它的左邊兩個是否已經同色。還有上面兩個是否已經同色,假設同色了,要去掉這個顏色。

假設已經生成的地圖是:

2, 3, 3, 4, 1, 3, 2

1, 2, 3, 4, 4, 3, 3

1, 2, 4, 2, 2, x

由於x的左邊兩個都是2,所以x不能再是2了,它的上面兩個都是3。所以x不能再是3了。

所以x的結果僅僅能是0,1,4中隨機取乙個了。

以下是偽**(是不能執行的真**):

enum matchitemtype;

matchitemtype getonerandomtypeexceptparameter(const matchitemtype& type);

std::vector resttype;

for(int i = 0; i < 5; ++i)

}int restsize = resttype.size();

int randomindex = rand() % restsize;

return resttype[randomindex];

}array2dgetonerandommaparray()else

}else

if(y >= 2)else

}else

if(findthreesameinx == false && findthreesameiny == false)else if(findthreesameinx == true && findthreesameiny == false)else if(findthreesameinx == false && findthreesameiny == true)else

map.set(x, y, randomtype);}}

return map;

}

假設整個地圖,使用者移動不論什麼一步也不能有消除,就是死地圖了,要又一次生成地圖了。

//case 1

/[x]//[x]

//[x][o][x][x][o][x]/

/[x]//[x]

///case 2

[x]//

/[x][o][x]///

[x]//

[x]//

/[x][o][x]///

[x]//

這裡用凝視畫了簡單的兩種情況,注意x的位置。

case1 是橫著有兩個同色的情況,移動一步能消除僅僅有6種可能,左邊3種,右邊3種。以下是豎著有兩個同色的情況。移動一步能消除也是6種情況。上面3種。以下3種。

知道了這個,**就easy了。記得找到乙個就直接return。

vectorgetthreematchitemcanremovebyonestep(const array2d& map)

}if(x - 1 >= 0 && y - 1 >= 0)

}if(x + 2 < maxx && y - 1 >= 0)

}if(x + 3 < maxx)

}if(x + 2 < maxx && y + 1 < maxy)

}if(x - 1 >= 0 && y + 1 < maxy)}}

}if(y + 1 < maxy)

}if(x + 1 < maxx && y - 1 >= 0)

}if(x + 1 < maxx && y + 2 < maxy)

}if(y + 3 < gameglobal::xmapcount)

}if(x - 1 >= 0 && y + 2 < maxy)

}if(x - 1 >= 0 && y - 1 >= 0)}}

}}}return result;

}

看起來是有點複雜。窮舉了12種情況,這個演算法應該速度很快的。還有個地方要用到這個演算法。就是在消除遊戲中。使用者很久時間沒有進行消除了,要給提示。就用這個演算法找到哪3個能夠移動一步進行消除。

演算法先到這裡... 興許有時間再更新...

提交給蘋果,審核竟然能通過

cocos2d實現語音 Cocos2d 聲音API

param url 聲音路徑 cc.audioengine.playmusic url loop 停止背景 param releasedata 是否釋放聲音資料,預設為false cc.audioengine.stopmusic releasedata 暫停背景 cc.audioengine.pau...

cocos2d筆記 cocos2d的單例模式

cocos2d充分使用了單例設計模式,這裡有必要提及它是因為它是經常是討論熱點。大體上說,乙個singleton是乙個類,它在應用使用期中僅僅例項化一次。為了確保如此,就要使用乙個既建立又訪問此物件例項的靜態方法。因此,你不使用alloc init或者靜態自動釋放初始化器 static autore...

搭建cocos2d遊戲引擎環境

ios遊戲開發引擎,常用的cocos2d,unity引擎。unity是收費的,cocos2d是免費開源的。cocos2d引擎開發環境的搭建 step3.啟動終端,進入cocos2d for iphone解壓後的目錄,執行.install templates.sh u 命令 開始安裝cocos2d 如...