c语言版贪吃蛇《课程设计》

 

主要运用了光标的移动-.-

教程会在一个月内发布-.-最近考试好多......

看代码应该能看懂....

 

 

 

3.1 规则模块与动画模块

1)函数原型:void gui( );void dong( );

2)功  能:利用for循环语句和printf,COORD,Sleep()函数完成光标的移动和游戏规则的输出。

3)变量及类型:
COORD coord;  定义坐标结构体,通过它来移动光标的坐标。
int x,y,R,i;  定义x,y两个变量,用来传递坐标的位置。R为游戏高度。i为光标与边界距离。

4)说明:gui();通过for循环与光标的移动输出分割线,然后再通过光标的移动输出游戏规则;dong();通过for循环和i,x,y的变化和Sleep()的停顿效果,改变光标的位置,从外围到内部逐次输出,达到动画的效果。

3.2 游戏开始与结束选择模块 和 游戏难度选择模块
1)函数原型:int kai( ); int xuan( );

2)功  能:利用for循环语句和printf,COORD函数完成对游戏屏幕左侧的清空,然后利用printf,scanf函数输出游戏的选择类型和输入玩家的选择。

3)变量及类型:
COORD coord;  定义坐标结构体,通过它来移动光标的坐标。
int x,y,lp,xx;  定义x,y两个变量,用来传递坐标的位置;lp里存入玩家的选择,是kai( )函数的返回值;xx是xuan( )函数的返回值。

4)说明:通过for循环和光标的移动,输出空格使屏幕为空,然后printf函数输出提示语,scanf函数让玩家输入他的选择,最后返回玩家的选择。

3.3 游戏主体模块
1)函数原型:int youxi(int xx,int bei);
2)功  能:利用for循环语句,while循环语句,if-else,if语句,break语句,结构体,一维,二维数组,printf,rand,kbhit,getch,COORD函数,完成整个游戏运行的功能。
3)变量及类型:
struct node{

int x,y;

}shen[1000]; 定义贪吃蛇的每个身体坐标。
COORD coord;定义坐标结构体,通过它来移动光标的坐标。
char map[60][30];定义游戏地图。
 char xiang[4]={'w','a','s','d'}; 存放贪吃蛇的方向。

int x,y,i,R=50,D=24,ll=0,fen=0,p,wu=0,wux,wuy,fafe=0; 定义多个变量,x,y用来传递坐标的位置;i为变量;R,D 用来代表游戏右边界和下边界;ll表示贪吃蛇的长度;fen记录贪吃蛇所吃的食物;p记录贪吃蛇的方向;wux,wuy通过rand函数随机得到食物的位置;wu表示食物的状态,fafe表示游戏的状态。
4)说明:先通过for循环和光标的移动和printf清空游戏界面和设置边界,然后通过rand()函数得到第一个贪吃蛇身体和它的方向;for循环,增加贪吃蛇的3个身体;然后rand()使随机出现一个食物,一个while循环 + Sleep 的停顿效果使游戏暂停,printf输出提示语,kbhit和 getch 判断是否有键盘输入和得到键盘输入值,跳出while进入游戏操作while循环中,通过printf输出没时刻的分数,通过Sleep,结构体,for,printf使贪吃蛇每隔一段时间向前移动一下。kbhit和 getch 判断是否有游戏玩家的方向操作并得到方向值,如果输入空格游戏会暂停,然后可以选择游戏继续或退出。食物被贪吃蛇所吃会再次随机出现一个食物,while循环一直循环直至游戏失败或游戏退出返回游戏得分。

 

3.4 游戏失败提示模块
1)函数原型:void jiesu( );

2)功  能:利用for循环语句和printf,COORD函数完成对游戏屏幕左侧中间位置的清空,然后利用printf,scanf函数输出游戏失败提示语。

3)变量及类型:
COORD coord;  定义坐标结构体,通过它来移动光标的坐标。
int x,y,i,j;  定义x,y两个变量,用来传递坐标的位置;i,j 为循环变量。

4)说明:通过for循环和光标的移动,输出空格使屏幕为空,然后printf函数输出提示语。

 

 

 

 

 

 

代码:

#include
#include
#include
#include
#include 
#include
#define CX coord.X=x
#define CY coord.Y=y
#define SCP SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord)
char map[60][30];
struct node{
	int x,y;
}shen[1000];
char xiang[4]={'w','a','s','d'}; 
void dong();
void gui();
int kai();
int youxi();
void xiao();
int main()
{
	system("color 74");
	COORD coord;
	int x,y;
	gui();
	dong();
	while (1)
	{
		int lp=kai();
		if (lp==2)
		{
			printf("\n\n\n谢谢来玩贪吃蛇!!\n欢迎下次再玩-.-\n");
			return 0;
		}
		int kp=youxi();
		x=51;y=14;
	    CX;CY;SCP;
	    printf("            ");
		xiao();
		if (kp==-1)
		{
			x=51;y=12;
			CX;CY;SCP;
			printf("游戏中退出-.-请重新选择...");
		}
		else
		{
			x=51;y=12;
			CX;CY;SCP;
			printf("本次游戏得分为:%d",kp*10);
		}
	}
	Sleep(100000);
	return 0;
}
void dong()
{
	COORD coord;
	int x,y,i,j,R=24;
	coord.X=20;
	coord.Y=11;
	SCP;
	printf("贪吃蛇!"); 
	for (i=0;i<10;i++)
	{
		x=i;
		for (y=x;y1&&zhiling!=xiang[p-2])//不然方向直接反向时,会直接死亡。。。 
			{
				if (zhiling=='w')
				p=0;
				else if (zhiling=='a')
				p=1;
				else if (zhiling=='s')
				p=2;
				else if (zhiling=='d')
				p=3;
				else if (zhiling==' ')
				{
					zhiling='1'; 
					while (1)
					{
						if(kbhit())
						{
							kp=getch();
		                    if (kp=='1')
		                    break;
		                    else if (kp=='0')
		                    {
		                    	return -1;
							}
						}
	                    
						Sleep(100);
					}
				}
			/*	else if (zhiling==' ')//有点小难 
				{
					system("pause");
					while (kp=getch())
					{
						if (kp=='1')
						break;
						if (kp=='0')
						return; 
					}
				}
			/*	else
				system("pause");*/
			}
			
		}
		if (xiang[p]=='w')
		{
			shen[ll].x=shen[ll-1].x;
			shen[ll].y=shen[ll-1].y-1;
			ll++;x=shen[ll-1].x;y=shen[ll-1].y;
			if (x==-1||x==R||y==-1||y==D||map[x][y]=='+')
			{
				fafe=1;
				break;
			}
			if (map[x][y]=='#')
			{
				fen++;
				wu=1;
			}
			CX;CY;SCP;map[x][y]='+';
			printf("+");
			if (!wu)
			{
				x=shen[0].x;y=shen[0].y;
				CX;CY;SCP;map[x][y]=' ';
		        printf(" ");
				for (i=0;i

 

 

 

 

vc版-.-所有定义都要在最前面。。。

 

#include
#include
#include
#include
#include
#include 
#include
#define CX coord.X=x
#define CY coord.Y=y
#define SCP SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord)
char map[60][30];
struct node{
	int x,y;
}shen[1000];
char xiang[4]={'w','a','s','d'}; 
void dong();
void gui();
int kai();
int youxi();
int xuan();
void jiesu();
int main()
{
	COORD coord;
	int x,y,xx,lp,kp,nan[4]={300,400,200,100};
	system("color 74");
	gui();
	dong();
	while (1)
	{
		lp=kai();
		if (lp==2)
		{
			printf("\n\n\n谢谢来玩贪吃蛇!!\n欢迎下次再玩-.-\n");
			return 0;
		}
		xx=xuan();
		kp=youxi(nan[xx],xx);
		x=51;y=14;
	    CX;CY;SCP;
	    printf("            ");//消游戏中显示的得分... 
		if (kp==-1)
		{
			x=51;y=12;
			CX;CY;SCP;
			printf("游戏中退出-.-请重新选择...");
		}
		else
		{
			x=51;y=12;
			CX;CY;SCP;
			printf("本次游戏得分为:%d",kp*10*xx);
		}
	}
	Sleep(100000);
	return 0;
}
int xuan()//困难程度
{
	COORD coord;
	int x,y,xx;
	for (x=0;x<50;x++)
	for (y=0;y<24;y++)
	{
		CX;CY;SCP;
		printf(" ");
	}
	x=0;y=0;CX;CY;SCP;
	printf("请选择游戏困难程度:\n");
	printf("1.简单模式\n");
	printf("2.一般模式\n");
	printf("3.困难模式\n");
	scanf("%d",&xx);
	return xx;
}
void dong()//开始动画 
{
	COORD coord;
	int x=20,y=11,i,R=24;
	CX;CY;SCP;
	printf("贪吃蛇!"); 
	for (i=0;i<10;i++)
	{
		x=i;
		for (y=x;y1&&zhiling!=xiang[p-2])//不然方向直接反向时,会直接死亡。。。 
			{
				if (zhiling=='w')
				p=0;
				else if (zhiling=='a')
				p=1;
				else if (zhiling=='s')
				p=2;
				else if (zhiling=='d')
				p=3;
				else if (zhiling==' ')//暂停 
				{
					zhiling='1';//改变一下-.-不然一直暂停... 
					while (1)
					{
						if(kbhit())
						{
							kp=getch();
		                    if (kp=='1')
		                    break;
		                    else if (kp=='0')
		                    {
		                    	return -1;
							}
						}
	                    
						Sleep(100);
					}
				}
			}
			
		}
		if (xiang[p]=='w')
		{
			shen[ll].x=shen[ll-1].x;
			shen[ll].y=shen[ll-1].y-1;
			ll++;x=shen[ll-1].x;y=shen[ll-1].y;
			if (x==-1||x==R||y==-1||y==D||map[x][y]=='+')
			{
				fafe=1;
				break;
			}
			if (map[x][y]=='#')
			{
				fen++;
				wu=1;
			}
			CX;CY;SCP;map[x][y]='+';
			printf("+");
			if (!wu)
			{
				x=shen[0].x;y=shen[0].y;
				CX;CY;SCP;map[x][y]=' ';
		        printf(" ");
				for (i=0;i_>游戏失败");
	Sleep(2000);
}

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(娱乐而已)