当时楼楼实训时大一下学期中期,学了类的一些特性。当时老师提示说没思路可以写XX管理系统雏形,当然按照我的想象应该很多人就会写这个了,毕竟上机课都有练过相关的代码实现,只要组织好逻辑再加上一些别出心裁的功能函数,基本上很快就搞定。所以当时楼楼没往这方面想。
其实当也没想到写贪吃蛇,只是逛csdn的时候偶然看到某位大牛用Python写了个贪吃蛇ai(原文请看http://bbs.csdn.net/topics/390430805),所以当时就决定写c++版的贪吃蛇吧(事先声明:楼楼的项目是自己独立思考的,在实训完成之前就只是在逛csdn的时候看过一次,之后并无参照那位大牛,当然belive it or not)。
在开始写程序的时候,楼楼一般都会构思好主函数的逻辑,也就是说主函数一定是最先完成的,然后再添加功能函数。之后的思考过程就是:如何构造蛇->如何构造地图->如何判断键入->如何进行按键筛选->如何判断动作合法->如何让蛇"看起来动"。
关于蛇的构造,楼楼采用的是建立结构体来储存蛇的坐标,然后用队列(先进先出的特点刚好符合蛇的行走规律)构造出一整条蛇(还有一种方法是采用双向链表来构造,当然这不是楼楼想的,而是楼楼的一基友用的方法,当时我本来是想和他合作的,而且明确了合作想法之后,我们各自都写了一个不同版本的可运行贪吃蛇成程序,但是当时楼楼有兼职,基友的ai开发进度远比我快,所以我放弃了合作,毕竟直接拿别人的成果也不好。题外话哈哈)。而地图的构造就比较简单,开一个二维数组map[max][max],记录整条蛇位置,食物位置,就好了。至于食物的生成就是播撒随机数种子然后rand出坐标,对于非法坐标重新再rand就好。看下代码吧(注:以下代码可能出现未介绍变量以及函数,请忽略,下文会介绍,而且重点也不是这些未知变量和函数,下文不再提醒):
void foodpro()//生成食物函数
{
int i,j;
i=rand()%(n-1);
j=rand()%(m-1);
w