這節課我們來試試開發一個簡單的命令行小遊戲,來完整的體驗一次所謂的“開發過程”。
遊戲設定是這樣的:
這是一種棋盤類游戲,我們來猜測敵人戰艦的位置,只要命中數發就可以擊沉它們。
我們給這些戰艦貼點標籤……比如各種網站吧?所以,這就成了一個攻擊網站的程序……捂臉。
遊戲目標
我們要玩家以最少的次數攻擊網站,把它擊垮。然後我們根據玩家的猜測次數來進行評分。
大致設計
我們畫一個7*7的網格來代表棋盤,然後在網格上安排隨即的三個網站,每個網站佔連續的三格,然後要求玩家猜測網站的坐標。
由於我們暫時不接觸圖形設計,所以我們要求用戶輸入比如說 A5這樣的坐標,我們用字母代表縱坐標,數字代表橫坐標。然後我們設定三種狀態,分別是“沒打中”、“打中!”以及“幹掉它了!”
當玩家全部幹掉棋盤上的網站,我們就計算玩家的得分情況。
遊戲的流程圖設計
我們需要類和方法來搞定這個遊戲,但是具體都要哪些方法哪些類?恐怕在這之前我們還得先理順一下游戲的流程問題:
好吧,我瞎划拉的東西實在是太讓人難以讀懂了,不過沒關係,請領會精神。
第一個版本
看來我們可以使用 Game 和 WebSite 兩個類。首先,我們先來個簡單一點的,我們只用一維地圖,也就是在一個長條裡猜網站的位置——這樣更易於理解和實現,現在我們嘗試用偽代碼來寫出這個程序。
什麼是偽代碼?
偽代碼不是代碼,它是你用更接近自然的語言描述出來的代碼模型,用來測試最簡單的邏輯實現——在這個過程當中我們除了專注於設計本身外,也進一步注重了邏輯框架——但又避免了編程語言本身的語法困擾,讓表達更加自然和迅速。
這裡我們貼出一個偽代碼的手寫版本栗子給你:
下面我們再來一個用於輔助遊戲主體的類:
1 2 3 4 5 6 7 8 9 10 |
class GameHelper { 一个返回 String 的方法 { 获取用户输入的坐标数据 } 返回给调用者 (目前为了演示创建过程我们一切从简) } |
最後,雖然我們說要盡量遠離 main 文件,但這次為了方便,我們還是把遊戲運行直接寫在了入口裡:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
main 生成GameHelper 实例 生成网站实例 创建一个保存用户猜测次数的属性 生成一个随机数 以随机数为基础创建一个长度为3的数组作为网站的主体 把这个主体传给网站的实例 (这里我们就生成一个网站) 创建一个保存网站是否存活的属性 如果网站存活就一直重复 { 获取用户输入的坐标 让网站自检是否被击中 记录猜测次数 根据返回的结果如果干掉网站则存活属性改为 false } 游戏结束显示最后的文本信息 |
好吧我承認WebSite 類並不是完全寫出來的,因為屏幕要截圖,篇幅等問題我只是寫了自檢這一個方法,不過沒關係,主要在於讓你領會寫偽代碼這個過程。
根據偽代碼寫出真正的代碼
好了,再三演算了偽代碼的邏輯過程,確定沒有什麼問題之後,就可以用真正的代碼來實現它了:
由於沒有 GUI 界面,所以看起來也不會怎麼高大上……但我們通過這個簡單的版本走了一遍完整的開發流程。
記住:
在實際開發當中,你寫好的偽代碼是什麼樣子,那麼就要把代碼寫成什麼樣子——我相信你的靈光乍現絕對值得關注——但你還是找個小本子先寫下來為妙。如果你真的順手就在你的代碼裡增加了其他並沒有預計的功能,那最終實現出來的代碼可能就有了奇奇怪怪的 bug。
所以說,一步一個腳印——先寫出偽代碼的實現,原始目的達成,再進行下一步——添加更多一個新功能……這樣會讓你的代碼健壯很多。
本文由 落格博客 原創撰寫:落格博客 » 不是你想的那樣:一個攻擊網站的程式
轉載請保留出處和原文鏈接:https://www.logcg.com/archives/1113.html
註釋