切換
舊版
前往
大廳
主題

俄羅斯方塊簡易堆疊判定概念

冰劍士-冰雪飛 | 2014-10-13 16:40:29 | 巴幣 10 | 人氣 1640

今次發表是10/09上課導師所做的「俄羅斯方塊」簡易版

系統只有做「生成、堆疊、界線判定」,至於消除等其他因時間不足暫時不做

本篇不提供完整程式碼,只做概念上的述說
=======================================================================
首先,這類的遊戲你會發現到它都是格子化的排列移動,所以程式上要準備好多維陣列

所以我們這篇最主要了解的就是多維陣列的運用方式

C#多維陣列基本寫法
int [ , ] array = new int [ 4 , 2 ];
=======================================================================
開始準備我們所要的陣列大小,需要準備兩個陣列,大小隨你高興

左為遊戲全域範圍,右為方塊設定,在這之後還要把這兩個陣列給合起來用
附圖的大小暫時設為12x8的區域大小,方塊則為4x4

先舉個方塊的例子,我們要判斷哪格是實體哪格為空
最簡單的就是在目標陣列的內容填上1(實體)、0(空)
此圖沒填數字的請當作是0

好了,最初的準備就這樣OK完成
=======================================================================
再來這階段就是想辦法把方塊用陣列黏上遊戲用陣列

我們先以最後一塊實體為例,基本上就是把實體的目前位置給讀入遊戲陣列內
使用for迴圈判定[X+I][Y+M]=1,還蠻意外的簡單

方塊上的移動控制就只是單純的操控X、Y的變數大小

這樣小小的步驟,卻是整個遊戲的核心
完成這個後你要方塊重生、出界判定、堆疊等其他系統都可寫出
=======================================================================
方塊重生

很簡單,只要將X、Y的值在堆疊後都調成0既可完成
=======================================================================
出界判定

這是程式內的示意圖,我們要判斷方塊實體的座標有沒有超過遊戲最大座標
假設有的話,我們要讓整個方塊實體全部往內縮

而到最下面的話就在他最後的座標複製一塊方塊陣列

在遊戲中我們看不到內縮的情形,但實際上是因為程式執行速度極快讓人看不出
=======================================================================
堆疊

跟出界判定有點像,就是讀取是否座標陣列內部值為1
假如是全部往內縮並複製一塊實體方塊
=======================================================================
消除方塊的話由於課堂時間不足所以沒教,但我個人試著說明看看

就是要想辦法判定一橫排的陣列內是否全部都為1
是的話此橫排全部歸0,並把此橫排以上的所有實體往下移動
=======================================================================
可能我說明得不夠清楚,盡量以我自身的認知來講解讓各位明白

讀了並理解概念,就不會被遊戲引擎腳本寫法給綁死

創作回應

Ting
原來是這樣啊 ((筆記
2014-10-13 22:02:33
晨夜
俄羅斯方塊真的滿複雜的呢!
還有旋轉方塊時候要先模擬有無超出陣列範圍
旋轉時模擬有無碰撞到已設置為true的格子
消除方塊也是非常的麻煩!!
2014-10-14 23:03:50

更多創作