爽!用golang 手撸了个贪吃蛇

布景

题主现在是php程序员, 学了一周的golang, 深入的感受到了其特性的优雅及功用的强大, 为了增强熟练度, 决定来写个贪吃蛇来践行下.(底部有github项目链接)

需求构思

1. 确认元素
    -    -    - 食物
    - 分数
    - 基本的提示信息
2. 用户故事
    - 蛇撞墙, 死亡
    - 蛇吃蛋分数加1, 身体添加一格长度.
    - 点击键盘左键, 蛇向左走
    - 点击键盘右键, 蛇向右走
    - 点击键盘上键, 蛇向上走
    - 点击键盘下键, 蛇向下走
    - 点esc, 退出游戏

逻辑构思

元素用户故事都确appetite定了, 就要开始写代码吗? 写项目不是这样的!要践行以终为始(很重要!, 否则可能会造成代码的荒草丛生), 先去考虑一下咱们的代码结构是什么姿态的.

手持游戏机为例.

  • 游戏机其实就是一个服务(Service), 然后屏幕键盘一致由游戏机调配.
    • 屏幕(providegithub中文官网网页r)
    • 键盘操控(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()}
}

小结

个人认为php是前端还是后端项意图代码的程序员工作一年后工资结构写的还算明晰,所以不放过多代码了, 仅仅把一个全局的结构图景放到这儿, 留给你去探索. 这phappreciatep钱银个小项意图代码逻辑肯定还不完善,你如果有什么主意或许吐槽, 能够鄙人github官网登陆入口方留言,每个我都会仔细阅读和回复.

最终放上项目链接( 感觉不错, 别忘star哦 ):
github.com/The程序员那么可爱Ogithub官网nlines/…

发表回复

提供最优质的资源集合

立即查看 了解详情