激情六月丁香婷婷|亚洲色图AV二区|丝袜AV日韩AV|久草视频在线分类|伊人九九精品视频|国产精品一级电影|久草视频在线99|在线看的av网址|伊人99精品无码|午夜无码视频在线

高校合作1:010-59833514 ?咨詢電話:400-810-1418 服務(wù)與監(jiān)督電話:400-810-1418轉(zhuǎn)接2

游戲開發(fā)入門(30分鐘,學(xué)會經(jīng)典小游戲編程!)

發(fā)布時(shí)間:2023-11-27 00:30:05 瀏覽量:116次

?30分鐘,學(xué)會經(jīng)典小游戲編程!

游戲開發(fā)入門(30分鐘,學(xué)會經(jīng)典小游戲編程!)

在80后、90后的兒時(shí)記憶里,俄羅斯方塊是必備的消遣小游戲,它的玩法非常簡單基本大家都懂,但如何用編程語言開發(fā)一款兒時(shí)同款「俄羅斯方塊」,恐怕知道的同學(xué)就很少啦。

這周,班主任給大家?guī)硇抡n程《零基礎(chǔ)入門經(jīng)典小游戲開發(fā)---俄羅斯方塊》課程,讓同學(xué)們可以在枯燥的正統(tǒng)編程學(xué)習(xí)之余,找到些兒時(shí)的樂趣,換個(gè)方式學(xué)習(xí)編程。

俄羅斯方塊游戲中的格子一般是10列20行(10*20),我們稱之為世界地圖。


一般都是這種豎屏的界面

10*20的空間是用來盛放方塊的,當(dāng)方塊落定之后位置便不能再改變。這個(gè)時(shí)候它會被保存到地圖的狀態(tài)中,我們給地圖狀態(tài)設(shè)計(jì)一個(gè)二維的數(shù)組。

方塊有7種樣式組成,最大的長寬是4個(gè)方格,為了在邏輯上比較好的處理所有類型的方塊,我們構(gòu)建了一個(gè)4x4的邏輯區(qū)域,用來統(tǒng)一描述所有類型的方塊,包括顯示、旋轉(zhuǎn)等。這一區(qū)域就成為了它自身的空間整體,而方塊被放到世界地圖中時(shí),也是以這樣的整體加入進(jìn)去的。

我們給方塊定義了四種屬性,分別是方向、顏色、種類以及在世界地圖中的坐標(biāo)。

方塊可以做旋轉(zhuǎn),每經(jīng)過四次旋轉(zhuǎn)便會回到原始的狀態(tài),分別用0123來表示方塊的四個(gè)方向,新產(chǎn)生的方塊設(shè)定的是默認(rèn)方向。

下圖中的數(shù)值代表它在自己的空間內(nèi),哪些格子是有方塊的,哪些是沒有的。這是一個(gè)二進(jìn)制的16位的顯示掩碼,0x4444代表的就是第一行第三列,第二行的第三列,第三行的第三列和第四行的第三列。



旋轉(zhuǎn)掩碼是用一個(gè)16bit的數(shù)據(jù)表示的,每個(gè)旋轉(zhuǎn)掩碼后面跟著的是一個(gè)16bit的顯示掩碼。

我們以S型方塊作為參考來介紹,方向?yàn)榱愕臅r(shí)候它占據(jù)第一行的第二列第三列,第二行的第四列第三列,當(dāng)它做一次旋轉(zhuǎn),方向由0到1這個(gè)過程中,它的旋轉(zhuǎn)是會掃過這些位置,變成方向1的狀態(tài)。在旋轉(zhuǎn)過程中,如果它掃過的位置有其他方塊占住,那么它便不能旋轉(zhuǎn)。



還有,如果方塊到達(dá)邊緣的時(shí)候,旋轉(zhuǎn)時(shí)超出了世界地圖的范圍,也是失敗的,會繼續(xù)維持現(xiàn)在這種狀態(tài)。

旋轉(zhuǎn)掩碼和顯示掩碼組合在一起,旋轉(zhuǎn)掩碼的意義是,當(dāng)前方向值下的方塊,旋轉(zhuǎn)到下一個(gè)方向值的時(shí)候,需要參考的障礙區(qū)域有哪些,以上就是位置掩碼以及旋轉(zhuǎn)掩碼的介紹。

接下來我們來看下游戲中的主要邏輯判斷。

移動邏輯

游戲中產(chǎn)生的方塊,在產(chǎn)生之后,做周期性的下落運(yùn)動。

同一時(shí)刻地圖中只會有一個(gè)方塊處于活動狀態(tài),可以在地圖中做移動、旋轉(zhuǎn)等操作,方塊每次自由下落都會做一個(gè)下落判斷,判斷是否已經(jīng)觸底。

觸底指的是,方塊不能再往下移動,導(dǎo)致方塊不能再往下移動的原因有2種,第一種是方塊的下邊緣已經(jīng)在世界地圖的邊緣;第二種是方塊再往下更新的位置,被其他已經(jīng)落定的方塊占據(jù)了。

如圖上代碼所示,方塊移動的位置被其他方塊所占據(jù)

方塊觸底之后,狀態(tài)就由活動狀態(tài)切換到了落定狀態(tài)。此時(shí)方塊的顯示掩碼中標(biāo)注的所有可顯示的塊,都將會寫入地圖的狀態(tài)中,以用來表明,這些塊已經(jīng)被占據(jù)了,寫入地圖狀態(tài)中的值有兩項(xiàng)屬性:哪些塊被占據(jù)了,已經(jīng)被占據(jù)的塊的顏色值。

假定方塊當(dāng)前的坐標(biāo)是(x1,y2),從方塊的當(dāng)前移動方向中,我們可以得到方塊等待判斷是否可以移動過去的更新坐標(biāo)(x2, y2)。

例如,方塊向左移動,則:x2 = x1 - 1, y2 = y1;方塊向右移動,則:x2 = x1 + 1, y2 =y1;方塊向下移動,則:x2 = x1, y2 = y1 + 1;




根據(jù)方塊的類型以及當(dāng)前的方向值,從掩碼表中可以拿到方塊當(dāng)前的顯示掩碼,方塊是否能放置到新位置,只需要判斷顯示掩碼中標(biāo)明需要顯示出來的位置,是否已經(jīng)有其他方塊占據(jù),掩碼中所有需要顯示出來的位置,只要有一個(gè)位置被其他方塊占據(jù),本次移動判斷失敗,方塊維持原有坐標(biāo)

游戲開發(fā)入門(30分鐘,學(xué)會經(jīng)典小游戲編程!)


旋轉(zhuǎn)邏輯

能夠旋轉(zhuǎn)涉及到一個(gè)方塊是否改變它的方向,x、y是方塊在世界地圖中的坐標(biāo),block是它的狀態(tài)值。

我們?nèi)∷姆N類、方向這兩個(gè)屬性,在4×4的空間里,計(jì)算出每一格對應(yīng)到世界中的坐標(biāo)。

“isBoxRotateMaskEmpty”這個(gè)代表什么意思呢?這是旋轉(zhuǎn)掩碼在旋轉(zhuǎn)過程中要參照的點(diǎn),方塊旋轉(zhuǎn)掃過的點(diǎn),以及它落定之后的這幾個(gè)點(diǎn),這些點(diǎn)就是它的旋轉(zhuǎn)掩碼。



轉(zhuǎn)寫掩碼值用一個(gè)七行四列的數(shù)組來保存,分別對應(yīng)七種方塊樣式以及四個(gè)方向?qū)?yīng)的值。它的高16位是旋轉(zhuǎn)掩碼,低16位是顯示掩碼。


方塊的掩碼表

方塊是否能夠旋轉(zhuǎn),先要看它的旋轉(zhuǎn)掩碼里面是為空,掩碼為空則可以旋轉(zhuǎn),旋轉(zhuǎn)完之后,需要判斷方塊新的坐標(biāo)是否還在世界地圖里,如果它超出邊緣超出底線,那肯定是旋轉(zhuǎn)不了的。

還有就是判斷當(dāng)前格子在世界地圖中是否被其他的方塊給占了,如果被占了的話,也是旋轉(zhuǎn)不了的,這就是基本的旋轉(zhuǎn)判定邏輯。

得分邏輯

方塊落定之后,根據(jù)方塊落定是的邏輯坐標(biāo),從上往下依次遍歷地圖中的4行狀態(tài)值,當(dāng)某一行的所有地圖塊的狀態(tài)都是被占據(jù)狀態(tài),該行被判定為得分行,得分行會被消掉,當(dāng)消完所有的得分行之后,得分行上方的所有未得分行,依次向下平移。

我們控制游戲難度的時(shí)候也是以這個(gè)為參考,玩家獲得的分?jǐn)?shù)越多,游戲難度越大。

我們可以通過修改方塊出現(xiàn)的時(shí)間間隔,以及下落速度,來控制整個(gè)游戲的難度。

當(dāng)玩家拿的分?jǐn)?shù)越多,每消除一行的等級就會加一,分?jǐn)?shù)是遞增100,方塊下降的速度是通過5的取模方式從1秒里面去扣,最小值是0.6秒。



如果某一行格子只要有一個(gè)空著的話,消除便失敗。某一行的方塊全部被消掉之后,上面的方塊會向下平移,對應(yīng)的行數(shù)需要刷新。

這便是關(guān)于得分的判斷邏輯 。

最后再來看下整個(gè)游戲玩的流程圖。

游戲的核心邏輯是時(shí)間間隔,玩家點(diǎn)開始之后,每隔一段時(shí)間會調(diào)度一次,如果游戲沒有結(jié)束,判斷當(dāng)前是屬于暫停狀態(tài),沒有說暫停的話,就做一個(gè)moveBlock。

當(dāng)然,moveBlock有可能是玩家點(diǎn)了操縱的方向鍵,如果沒點(diǎn)的話直接就返回了。緊接著處理方塊的下落過程,判斷它落定的時(shí)候是否結(jié)束了。

沒有結(jié)束暫停的話,就處理移動,移動處理完之后,再去處理下落,如果剛好時(shí)間間隔已經(jīng)到了,那它就會往下落一次,往下落的話有可能成功,也有可能失敗。

判斷結(jié)束后會出現(xiàn)游戲結(jié)束界面,可以選擇是否重來一次,如果再來一次便會做一次重置。

這里需要做一個(gè)關(guān)于世界地圖的補(bǔ)充說明,這里補(bǔ)充了一個(gè)地圖的坐標(biāo)系,游戲地圖的坐標(biāo)系X軸沿著水平方向向右,Y軸是沿著垂直方向向下增長,坐標(biāo)系的原點(diǎn)是在左上角。

方塊在邏輯空間中的坐標(biāo),是以左上角為參考點(diǎn)的,方塊的坐標(biāo)隨著而改變。

游戲開發(fā)入門(30分鐘,學(xué)會經(jīng)典小游戲編程!)

熱門課程推薦

熱門資訊

請綁定手機(jī)號

x

同學(xué)您好!

您已成功報(bào)名0元試學(xué)活動,老師會在第一時(shí)間與您取得聯(lián)系,請保持電話暢通!
確定