golang?手寫貪吃蛇示例實(shí)現(xiàn)
背景
題主現(xiàn)在是php程序員, 學(xué)了一周的golang, 深刻的感受到了其特性的優(yōu)雅及功能的強(qiáng)大, 為了增強(qiáng)熟練度, 決定來寫個(gè)貪吃蛇來踐行下.(底部有g(shù)ithub項(xiàng)目鏈接)
需求構(gòu)思
1. 確定元素
- 蛇
- 墻
- 食物
- 分?jǐn)?shù)
- 基本的提示信息
2. 用戶故事
- 蛇撞墻, 死亡
- 蛇吃蛋分?jǐn)?shù)加1, 身體增加一格長度.
- 點(diǎn)擊鍵盤左鍵, 蛇向左走
- 點(diǎn)擊鍵盤右鍵, 蛇向右走
- 點(diǎn)擊鍵盤上鍵, 蛇向上走
- 點(diǎn)擊鍵盤下鍵, 蛇向下走
- 點(diǎn)esc, 退出游戲
邏輯構(gòu)思
元素及用戶故事都確定了, 就要開始寫代碼嗎? 寫項(xiàng)目不是這樣的!要踐行以終為始(很重要!, 否則可能會(huì)造成代碼的荒草叢生), 先去思考一下我們的代碼結(jié)構(gòu)是什么樣子的.
以手持游戲機(jī)為例.
游戲機(jī)其實(shí)就是一個(gè)服務(wù)(Service), 然后屏幕和鍵盤統(tǒng)一由游戲機(jī)調(diào)配.
- 屏幕(provider)
- 鍵盤控制(provider)
然后我們細(xì)分一下屏幕和鍵盤控制的元素:
- 屏幕: 蛇,食物,屏幕寬及高,得分.
- 鍵盤控制: 用戶移動(dòng)指令,用戶退出指令, 蛇死亡指令.
代碼結(jié)構(gòu)
//game control 游戲數(shù)據(jù)結(jié)構(gòu) 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 屏幕相關(guān)參數(shù) type screen struct { snakes *snake foodPoint *scope width int height int score int }
//NewGameService 實(shí)例化游戲服務(wù) func NewGameService() *gameService { return &gameService{screenApp: newScreenApp(), monitorApp: newMonitorApp()} }
//newScreenApp 屏幕實(shí)例化 func newScreenApp() *screenApp { return &screenApp{Screen: initScreenHandle()} }
//newMonitorApp 實(shí)例化 func newMonitorApp() *monitorApp { return &monitorApp{Monitor: initMonitor()} }
小結(jié)
個(gè)人認(rèn)為項(xiàng)目的代碼的結(jié)構(gòu)寫的還算清晰,所以不放過多代碼了, 只是把一個(gè)全局的結(jié)構(gòu)圖景放到這里, 留給你去探索. 這個(gè)小項(xiàng)目的代碼邏輯肯定還不完善,你如果有什么想法或者吐槽, 可以在下方留言,每個(gè)我都會(huì)認(rèn)真閱讀和回復(fù).??
最后放上項(xiàng)目鏈接(???????????? 感覺不錯(cuò), 別忘star哦 ????????????): github.com/TheOnlines/…
以上就是golang 手寫貪吃蛇示例實(shí)現(xiàn)的詳細(xì)內(nèi)容,更多關(guān)于golang 手寫貪吃蛇的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Go語言實(shí)現(xiàn)冒泡排序、選擇排序、快速排序及插入排序的方法
這篇文章主要介紹了Go語言實(shí)現(xiàn)冒泡排序、選擇排序、快速排序及插入排序的方法,以實(shí)例形式詳細(xì)分析了幾種常見的排序技巧與實(shí)現(xiàn)方法,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-02-02Go語言中?Print?Printf和Println?的區(qū)別解析
這篇文章主要介紹了Go語言中?Print?Printf和Println?的區(qū)別,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-03-03Go語言sync包與鎖實(shí)現(xiàn)限制線程對(duì)變量的訪問
本文主要介紹了Go語言sync包與鎖實(shí)現(xiàn)限制線程對(duì)變量的訪問,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04Golang因Channel未關(guān)閉導(dǎo)致內(nèi)存泄漏的解決方案詳解
這篇文章主要為大家詳細(xì)介紹了當(dāng)Golang因Channel未關(guān)閉導(dǎo)致內(nèi)存泄漏時(shí)蓋如何解決,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2023-07-07