赞
踩
#贪吃蛇游戏
##前言
本游戏是基于linux平台,以c语言实现,纯命令行界面,蛇本身是使用printf("*")这样的机制完成的,具体效果图如下:
如上图所示, 红色的*号代表是蛇头,白色的5个*号代表蛇尾,此条蛇正向右方移动,右方的一个黄色的*号即为蛇要吃的方块。
控制按键:
后记:
本游戏写于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,代码文件与上面的模块定义对应关系如下:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。