市場上三消遊戲已經超級多了。主流的是地圖型的。差點兒是無盡模式。各種消除特效。各種各樣的過關方式,玩起來還是不錯的,就是遇到比較難的關卡,要多試幾次,運氣很好的時候就過了,不然卡死。
這個遊戲真正擴充套件的地方就是過關模式,還須要整個特殊的地圖編輯器。配合策劃,不斷公升級遊戲。
有各種各樣的地圖。這裡拿最簡單的矩形來說。需求:
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 如...