当前位置:   article > 正文

贪吃蛇的游戏

贪吃蛇的游戏

#贪吃蛇游戏
##前言
本游戏是基于linux平台,以c语言实现,纯命令行界面,蛇本身是使用printf("*")这样的机制完成的,具体效果图如下:
贪吃蛇运行界面

如上图所示, 红色的*号代表是蛇头,白色的5个*号代表蛇尾,此条蛇正向右方移动,右方的一个黄色的*号即为蛇要吃的方块。

控制按键:

  1. 空格: 暂停或者继续游戏
  2. 方向键: 上下左右按键分别代表去某一个方向
  3. 字母方向键: wasd分别等价于方向键
  4. 无专门退出键: 使用ctrl+c退出游戏

后记:
本游戏写于2014年我工作的时候,当时有一个星期特别无聊,就想写点什么东西来玩玩,让自己的生活不那么的枯燥,于是就想起了本科时期一直想做的一些小游戏,贪吃蛇就是这样诞生了。
本科时期有一段时间特别迷恋于mfc,当时看了一本基本的mfc教程,还狠命的啃了一本深入浅出mfc,甚至于买了一本mfc游戏教程(此本没怎么看),但是也没有做一个像样的mfc程序,倒是看深入浅出mfc让我对宏的理解深入了很多,感慨于过去在c++没有各种动态特性的时候,前人是如何通过宏完成这么伟大的工程的。而后工作了一段时间,渐渐的mfc就变成一个小工具而已了,已渐渐褪去了它花哨的外衣,回归其语言的本质,我也就从对mfc的迷恋重回到了对terminal命令行操作的热爱中去了。这也就是本贪吃蛇游戏为何采用terminal界面的原因。
关于这个游戏,还有另外一个抽象一些的原因。当时我的本意是想先仿照一个有名的库(libevent)写一个事件驱动的程序出来,等写出来感觉特别好玩,既然这个是事件驱动,那么它是独立的,也就是说独立于任何具体的事件实体以及操作实体,于是我就写了一个snake的游戏,利用这个事件驱动,同时又对事件驱动做了一部分的修改以适应我的snake游戏。后来我本想再做一个base_game的抽象,以让snake_game继承于base_game以实现一个通用的游戏框架,那么不管是贪吃蛇,还是俄罗斯方块,异或是小时候玩的打砖块,都可以采用继承base_game并利用事件驱动来完成。不过后来有一段时间工作太忙了,base_game也就实现了一半,就放弃了,心中颇为惋惜,希望有乐于玩弄代码的朋友继续完善它,如果大家有需要请留言给我,我把base_game的代码也放出来到github上,每个人都可以贡献一下,为它丰富你们天才的想法。

##游戏框架
本游戏基于纯linux c语言实现,主要包含以下几个模块,事件驱动模块,游戏结构模块,日志控制模块,终端光标移动及颜色显示模块,终端控制模块。游戏模块负责注册事件以及回调函数,然后调用事件驱动模块的运转函数,开始监听事件并执行相应的操作,具体的操作包括定时器事件触发的移动,用户输入的方向按键,这些操作中会涉及光标的移动,颜色显示以及相应的终端控制。

游戏代码框架图
如上图所示,此为游戏的代码结构图,位于github上,请忽略Makefile与README.md,代码文件与上面的模块定义对应关系如下:

  • cursor.h: 终端光标移动及颜色显示模块
  • event.h, event.c: 事件驱动模块
  • main.c: 游戏结构模块
  • log.h: 日志控制模块
  • terminal.h, terminal.c: 终端控制模块
    加粗的表明是特别重要的
本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/1001551
推荐阅读
相关标签
  

闽ICP备14008679号