【C语言】贪吃蛇游戏的实现(二)

考试加春节拖更了好久(主要是懒),这次我们把开始游戏的功能实现一下,根据之前所完成的功能,在开始菜单下我们有数字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键退出游戏");
}

至此,游戏的静态显示已经完成,关于贪吃蛇的移动留到下一次说明。

你可能感兴趣的:(C,贪吃蛇,VC++6.0,C语言)