爽!用golang 手撸了个贪吃蛇

15210030850 · · 2240 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

## 背景 题主现在是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哦 🌺🌺🌺🌺🌺🌺): https://github.com/TheOnlines/golang_snake#readme

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2240 次点击  ∙  1 赞  
加入收藏 微博
4 回复  |  直到 2022-07-22 11:10:02
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传