2015年4月7日 星期二

Javascript遊戲撰寫初挑戰 WORDKEEPER (三)方塊流程規劃

寫電腦遊戲其實就跟寫桌遊差不多
或是說大部分的電腦遊戲一開始的出發點多多少少都是從桌遊延伸出來的吧

桌遊有一個很大的特點
就是每一個回合、動作、屬性等都定義得相當清楚明白
電腦遊戲也是一樣
只是電腦遊戲的回合往往很短
大約在百分之一秒內必須計算完下一個回合的狀態
然後進行繪圖將這個回合的結果產生輸出
因此在這片文章中
我會試著把WORDKEEPER裡最主要的角色:"方塊"的行為進行一些定義
方便之後將整個流程串起來
由於在思考設計的時候其實是搭配著整體流程在規劃的
所以有些部份可能要搭配之後的整體流程規劃來看會比較容易理解一下
(這邊真的不知道要怎麼安排順序orz)




首先,如果把整個8x8的棋盤當作一個二維陣列的話
那這個二維陣列中的每一格都是一個方塊
且每個方塊在時間更新之間都會依照自己的狀態進行該處理的工作
例如 : 往下掉落、跟其他方塊交換...等
藉此決定自己下一個時間點的狀態、位置等資訊

方塊主要狀態具有以下幾種:

1.待機
   這個狀態表示方塊正處於無事待機的狀態
   等待使用者的指令使其轉為"交換中"狀態
   或是等待下方的方塊消失使其轉為"落下中"狀態
   又或是等待其他交換過來的方塊使其轉為"準備消去"狀態
   當以上幾種狀況都未發生時,待機的方塊會繼續保持待機

2.落下中
   這個狀態代表這個方塊的所在位置y軸座標高過他所該在的位置
   因此這個方塊正在向下掉落中
   並且這個狀態中會搭配一個落下速度的參數
   使方塊能夠呈現自由落體的狀態
   當落下中的方塊抵達或超過所該在的位置y軸座標時
   該方塊會停留在該在的位置,並轉為"待機"狀態
   否則方塊繼續保持落下中狀態

3.交換中
   這個狀態代表這個方塊正在與其上下左右其中之一的方塊進行交換中
   因此這個狀態也需要一個額外參數紀錄交換的方向
   以及另一個參數紀錄交換經過的時間
   當交換時間超過一定值以後
   表示交換完成,方塊轉為"完成交換"狀態
   否則方塊保持交換中狀態

4.完成交換
   這個狀態代表這個方塊剛完成交換
   需要判斷是否與周圍待機、完成交換或準備消去的方塊連成3個以上相同的圖案
   如果成功連到3個以上,則轉為"準備消去"的狀態
   否則轉為"返回中"狀態

5.返回中
   這個狀態代表兩個交換的方塊都無法消去
   正在交換回原本的位置
   這個狀態需要一個額外的參數紀錄返回中的經過時間
   當返回時間超過一定值以後
   表示返回完成,方塊已經回到原本的位置,狀態改為"待機"
   否則繼續保持返回中狀態

6.準備消去
   這是一個中繼狀態
   用來與消失中狀態做一個區分
   準備消去的方塊在檢查消去的流程中依舊作為一個可以被參考被消去的方塊
   而消失中的方塊則無法
   在每一輪狀態更新的最後
   所有準備消去的方塊會轉為"消去中"狀態
2015/04/12改
6.已消失
   計劃永遠趕不上變化
   在寫遊戲時規劃又有了一些改變
   原本的消除中繼狀態不再需要
   反而是方塊在消去中狀態保持時間達到門檻值後
   需要一個中繼的狀態來紀錄已經消失的方塊
   因此新增一個已消失的狀態
   已消失的方塊會跟上方待機或落下中的方塊交換
   直到已消失的方塊被交換到棋盤最上一列時
   才將方塊重新設定類型並放到棋盤最上方重新進入

7.消去中
   這個狀態代表這個方塊已經被消去,正在消失中
   此狀態需要一個額外的參數紀錄消去經過的時間
   當消去時間超過一定值以後
   代表消去完成,此方塊上方的方塊位置往下遞補
   並在該列的最上方加入新的隨機圖案的待機方塊
2015/04/12改
   消去完成時,會將轉變為已消失狀態

以上是方塊狀態的大致規劃
如果畫成state figure的話大概會像這樣吧↓

下一篇應該會來整理一下整體流程
規劃在每一次的狀態更新中每一種狀態的更新順序

沒有留言 :

張貼留言