Priest and Devil
游戲規則:游戲初始左岸有三個惡魔和三個牧師,鼠標點擊牧師或惡魔,可以控制他們上下船。點擊船,可以使它到達對岸。開船時船上必須至少有一個惡魔或者牧師。當一邊的惡魔數大于牧師數時,游戲失敗。把全部惡魔和牧師都送到對岸,游戲成功。只有船靠岸時,才能響應動作。
1.列出游戲中提及的事物(Objects)
游戲中的對象包括3個牧師、3個惡魔、兩個河岸、一艘船
2.用表格列出玩家動作表(規則表),注意,動作越少越好
| 游戲失敗 | 船停靠時牧師的數量少于惡魔的數量 | 提示Lose |
| 開船 | 船上有人(牧師/惡魔) | 船移動 |
| 牧師上船 | 停船的河岸上有牧師,船有空位 | 牧師從岸上移動到船上 |
| 惡魔上船 | 停船的河岸上有惡魔,船有空位 | 惡魔從岸上移動到船上 |
| 左側上岸 | 船靠岸,船上左邊有對象 | 對象從船上移動到岸上 |
| 右側上岸 | 船靠岸,船上右邊有對象 | 對象從船上移動到岸上 |
| 游戲成功 | 船靠右岸,所有牧師和惡魔都在一個河岸 | 提示WIN |
關于程序
思路和代碼有參考H12590400327的博客
腳本有四個,分別是
UserGUI.cs(用于提供和用戶交互的接口)SSDirector.cs(導演類,控制全局)
FirstSSActionManager.cs(管理游戲對象動作)
FirstSceneController.cs(場記,管理游戲對象)
將游戲對象做成預制,其中Devil用Sphere表示,Priest用Cube表示。為了統計方便,分別給它們加上”Devil”和”Priest”的Tag.
- 一些重要的函數說明
只是大概邏輯,和類之間聯系部分,條件語句等基本省略。
- 一些bug或困難記錄
1.State枚舉時把”WIN”放在了第一位,由于UserGUI是通過State來判斷應該做出什么樣的響應,所以游戲一開始就會顯示“WIN”。調整了一下順序,把Start放在第一個位置,表示游戲開始就進入“Start”狀態,就可以順利進行。
2.不清楚怎么樣操作對象,一開始看一篇博客是規定了每一個牧師/惡魔的控制按鈕,這樣顯得畫面比較難看。然后發現可以用鼠標Click選中,用Ray是否Hit來判斷選中對象,這樣比較符合游戲玩家的習慣。
3.比較頭疼的是位置安排的問題,不是很清楚怎么能夠恰好讓對象出現在屏幕中間,這里是直接按照博客上的坐標設置。還有上船下船時對象的位置確定也比較頭疼,習慣了絕對坐標的寫法,然后經常會飛出規定的范圍,這個比較頭痛。以前寫2D的時候還可以用鼠標拖從而確定位置,現在….還需要進一步研究。
4.要控制只有船靠岸的時候才能響應動作,需要一個變量類似flag,判斷此時能否進行動作,在每一個move或者geton/getoff函數里都要進行狀態的判斷,否則會出現行駛過程中人物上船/上岸的詭異現象。
5.本來打算寫一個restart函數,點擊彈出的”WIN”或者”LOSE”按鈕可以重新開始游戲。以為可以直接重新手動調用start()就能夠實現,然后發現并不是,因為需要重新安排“導演”“場記”然后進行FirstAction的系列設置,并不能把原來的狀態全部清空。這個等有時間再進一步完善。
6.統計左右岸的牧師和惡魔數量來判斷是否勝利/失敗的時候,一開始沒有用Tag的方法,然后獲取object來判斷是Sphere還是Cube,雖然也可以實現,但是感覺不太好,如果以后有更多的對象就不適用這種方法了,所以還是按照這個比較好的思路進行了代碼的修改。
7.一些條件判斷比如船上沒人不能開船,駛離岸邊才開始判斷惡魔數和牧師數,船靠岸時就判斷惡魔數和牧師數等邏輯比較復雜。
8.考慮補充倒計時功能,限制時間完成,否則算是失敗。不然玩家一直用一個惡魔/牧師控制然后讓船開來開去,失去了游戲的趣味性。
總結
以上是生活随笔為你收集整理的Priest and Devil的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 高并发下restTemplate的错误分
- 下一篇: 勾股定理,西方称为毕达哥拉斯定理