likes
comments
collection
share

贪吃蛇golang版开发总结

作者站长头像
站长
· 阅读数 84

背景

认真学习了一段时间的golang, 深刻的感受到了其特性的优雅及功能的强大, 特意写了一个golang版的贪吃蛇,目前该项目已经有100多star了, 好东西要分享, 所以决定在这里写个开发总结分享给大家. (底部有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/…

转载自:https://juejin.cn/post/7122033942777036808
评论
请登录