golang 手寫貪吃蛇示例實現
背景
題主現在是php程序員, 學瞭一周的golang, 深刻的感受到瞭其特性的優雅及功能的強大, 為瞭增強熟練度, 決定來寫個貪吃蛇來踐行下.(底部有github項目鏈接)
需求構思
1. 確定元素
– 蛇
– 墻
– 食物
– 分數
– 基本的提示信息
2. 用戶故事
– 蛇撞墻, 死亡
– 蛇吃蛋分數加1, 身體增加一格長度.
– 點擊鍵盤左鍵, 蛇向左走
– 點擊鍵盤右鍵, 蛇向右走
– 點擊鍵盤上鍵, 蛇向上走
– 點擊鍵盤下鍵, 蛇向下走
– 點esc, 退出遊戲
邏輯構思
元素及用戶故事都確定瞭, 就要開始寫代碼嗎? 寫項目不是這樣的!要踐行以終為始(很重要!, 否則可能會造成代碼的荒草叢生), 先去思考一下我們的代碼結構是什麼樣子的.
以手持遊戲機為例.
遊戲機其實就是一個服務(Service), 然後屏幕和鍵盤統一由遊戲機調配.
- 屏幕(provider)
- 鍵盤控制(provider)
然後我們細分一下屏幕和鍵盤控制的元素:
- 屏幕: 蛇,食物,屏幕寬及高,得分.
- 鍵盤控制: 用戶移動指令,用戶退出指令, 蛇死亡指令.
代碼結構
//game control 遊戲數據結構 type game struct { //控制 control *control //屏幕 screen *screen }
//control 鍵盤控制 type control struct { moveChannel chan int quitChannel chan int playGameStatusChannel chan bool gameOver bool direction int }
//screen 屏幕相關參數 type screen struct { snakes *snake foodPoint *scope width int height int score int }
//NewGameService 實例化遊戲服務 func NewGameService() *gameService { return &gameService{screenApp: newScreenApp(), monitorApp: newMonitorApp()} }
//newScreenApp 屏幕實例化 func newScreenApp() *screenApp { return &screenApp{Screen: initScreenHandle()} }
//newMonitorApp 實例化 func newMonitorApp() *monitorApp { return &monitorApp{Monitor: initMonitor()} }
小結
個人認為項目的代碼的結構寫的還算清晰,所以不放過多代碼瞭, 隻是把一個全局的結構圖景放到這裡, 留給你去探索. 這個小項目的代碼邏輯肯定還不完善,你如果有什麼想法或者吐槽, 可以在下方留言,每個我都會認真閱讀和回復.😃
最後放上項目鏈接(🌺🌺🌺🌺🌺🌺 感覺不錯, 別忘star哦 🌺🌺🌺🌺🌺🌺): github.com/TheOnlines/…
以上就是golang 手寫貪吃蛇示例實現的詳細內容,更多關於golang 手寫貪吃蛇的資料請關註WalkonNet其它相關文章!
推薦閱讀:
- Golang泛型的使用方法詳解
- Golang源碼分析之golang/sync之singleflight
- golang interface判斷為空nil的實現代碼
- 徹底理解golang中什麼是nil
- Golang的Fork/Join實現代碼