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其它相關文章!

推薦閱讀: