golang?手寫貪吃蛇示例實現

背景
題主現在是php程序員, 學了一周的golang, 深刻的感受到了其特性的優(yōu)雅及功能的強大, 為了增強熟練度, 決定來寫個貪吃蛇來踐行下.(底部有github項目鏈接)
需求構思
1. 確定元素
- 蛇
- 墻
- 食物
- 分數
- 基本的提示信息
2. 用戶故事
- 蛇撞墻, 死亡
- 蛇吃蛋分數加1, 身體增加一格長度.
- 點擊鍵盤左鍵, 蛇向左走
- 點擊鍵盤右鍵, 蛇向右走
- 點擊鍵盤上鍵, 蛇向上走
- 點擊鍵盤下鍵, 蛇向下走
- 點esc, 退出游戲
邏輯構思
元素及用戶故事都確定了, 就要開始寫代碼嗎? 寫項目不是這樣的!要踐行以終為始(很重要!, 否則可能會造成代碼的荒草叢生), 先去思考一下我們的代碼結構是什么樣子的.
以手持游戲機為例.
游戲機其實就是一個服務(Service), 然后屏幕和鍵盤統(tǒng)一由游戲機調配.
- 屏幕(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 手寫貪吃蛇的資料請關注腳本之家其它相關文章!
相關文章
Go?Excelize?API源碼閱讀Close及NewSheet方法示例解析
這篇文章主要為大家介紹了Go?Excelize?API源碼閱讀Close及NewSheet方法示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-08-08

