考试加春节拖更了好久(主要是懒),这次我们把开始游戏的功能实现一下,根据之前所完成的功能,在开始菜单下我们有数字1~3选项,键入数字2,调用游戏说明函数,打印游戏说明;键入数字3,退出游戏,结束程序;键入1~3以外的字符,则会提示输入不规范;键入数字1,则我们开始游戏。
在开始游戏之前,首先我们需要初始化游戏界面,调用createMap()函数创建地图,createMap()函数实现很简单,用for循环打印出边框和中心网格即可。
/*
创建地图
*/
void createMap()
{
int i,j;
for(i=0;i<58;i+=2) //打印上下边框
{
gotoxy(i,0);
color(6); //深绿色的边框
printf("□");
gotoxy(i,26);
printf("□");
}
for(i=1;i<26;i++) //打印左右边框
{
gotoxy(0,i);
printf("□");
gotoxy(56,i);
printf("□");
}
for(i = 2;i<56;i+=2) //打印中间网格
{
for(j = 1;j<26;j++)
{
gotoxy(i,j);
color(3);
printf("■\n\n");
}
}
}
接着,我们需要初始化“主角”——贪吃蛇蛇身,在这里,蛇身的每一个节点,我们使用的是结构体保存,结构体也很简单明了,里面仅定义了蛇身节点的x,y坐标以及next指针,在生成贪吃蛇时我们使用的是头插法,即先生成的节点作为尾节点,后加入的节点作为头节点。
/*
初始化蛇身,画蛇身
*/
void initsnake()
{
snake *tail;
int i;
tail=(snake*)malloc(sizeof(snake)); //从蛇尾开始,头插法,以x,y设定开始的位置
tail->x=24; //蛇的初始位置(24,5)
tail->y=5;
tail->next=NULL;
for(i=1;i<=4;i++) //设置蛇身,长度为5
{
head=(snake*)malloc(sizeof(snake)); //初始化蛇头
head->next=tail; //蛇头的下一位为蛇尾
head->x=24+2*i; //设置蛇头位置
head->y=5;
tail=head; //蛇头变成蛇尾,然后重复循环
}
while(tail!=NULL) //从头到尾,输出蛇身
{
gotoxy(tail->x,tail->y);
color(14);
printf("◆"); //输出蛇身,蛇身使用◆组成
tail=tail->next; //蛇头输出完毕,输出蛇头的下一位,一直输出到蛇尾
}
}
输出完蛇身后,我们还需要输出食物,使用随机数生成食物位置并判断是否与蛇身重合,如果重合则从新生成。
/*
随机出现食物
*/
void createfood()
{
snake *food_1;
srand((unsigned)time(NULL)); //初始化随机数
food_1=(snake*)malloc(sizeof(snake)); //初始化food_1
while((food_1->x%2)!=0) //保证其为偶数,使得食物能与蛇头对齐,然后食物会出现在网格线上
{
food_1->x=rand()%52+2; //食物随机出现,食物的x坐标在2~53
}
food_1->y=rand()%24+1; //食物的y坐标在1~24
q=head;
while(q->next==NULL)
{
if(q->x==food_1->x && q->y==food_1->y) //判断蛇身是否与食物重合
{
free(food_1); //如果蛇身和食物重合,那么释放食物指针
createfood(); //重新创建食物
}
q=q->next;
}
gotoxy(food_1->x,food_1->y);
food=food_1;
color(12);
printf("●"); //输出食物
}
游戏界面输出完毕,接下来实现右侧的提示函数scoreandtips(),读取save.txt文件中的数据打印输出。
void scoreandtips()
{
File_out(); //调用File_out(),读取文件save.txt中的内容
gotoxy(64,4); //确定打印输出的位置
color(11); //设置颜色
printf("☆最高记录☆:%d",HighScore); //打印最高分
gotoxy(64,8);
color(14);
printf("当前得分:%d ",score);
color(15);
gotoxy(73,11);
printf("小 提 示");
gotoxy(60,13);
color(6);
printf("╬ ┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅ ╬");
gotoxy(60,25);
printf("╬ ┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅ ╬");
color(3);
gotoxy(64,14);
printf("每个食物得分:%d分",add);
gotoxy(64,16);
printf("不能撞墙,不能咬到自己");
gotoxy(64,18);
printf("用↑ ↓ ← →分别控制蛇的移动");
gotoxy(64,20);
printf("F1键加速,F2键减速");
gotoxy(64,22);
printf("空格键暂停游戏");
gotoxy(64,24);
printf("Esc键退出游戏");
}
至此,游戏的静态显示已经完成,关于贪吃蛇的移动留到下一次说明。