贪吃蛇源码(C语言版)-学习版

这篇博客介绍了一个使用C语言编写的贪吃蛇游戏,包括游戏设置、难度选择、界面定制和双人模式。游戏包含隐藏关卡和彩蛋,如石头剪刀布小游戏,同时提供了分数记录和时间计时功能。博主分享了完整的源代码,并邀请读者尝试找出隐藏关卡。
摘要由CSDN通过智能技术生成

项目说明

学习c语言的时候做的一个小游戏,很简陋,很多地方还可以优化,有彩蛋,有bug,还送了个剪刀石头布的小游戏
直接上图!!!!!

主界面

主界面

游戏设置界面

在这里插入图片描述

游戏难度界面

在这里插入图片描述

界面设置

在这里插入图片描述
在这里插入图片描述

游戏模式界面

在这里插入图片描述

游玩示意图

单人
在这里插入图片描述
双人
在这里插入图片描述
闯关
在这里插入图片描述
暂停
在这里插入图片描述

彩蛋

有个隐藏关卡,搞忘怎么触发了!!!!有兴趣自己去找吧

石头剪刀布

在这里插入图片描述

完整代码

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
#include <time.h>
#include <string.h>
typedef struct
{
    int x;
    int y;
}SNAKE;

long start,stop;//保存程序的开始和结束打点数
SNAKE snake[100];//蛇
SNAKE snake1[100];
int highscore;//最高分
int cq=0;//出拳数
int TARGET=1,BORDER=2;// 靶子,边框
int nn=0,mm=5,kk=2;//nn地图颜色mm边框颜色 kk靶子颜色
int snake_length;//蛇长度
int snake_length1;
int map_high,map_wide;//地图长 宽
int score=0,score2=0;//得分
char input;
char A='s',B=72;//接收用户输入控制蛇移动
int food_x,food_y;//确认食物的位置
int flag=0,flag5,flag1,flag11,flag22;//接口
int i,j;
float t=70;//蛇的速度
int mapmap=1;//判断地图大小是否设置过
char ch;//保存input
int c;//判断是否是wasd及空格以外的字符
int CHECKPOINT=1;//关卡
int mode=4;
int xx[100][100]={0};//地图障碍2
int go;//双人模式输赢 
void HideCursor()
{
    CONSOLE_CURSOR_INFO cursor_info = {1, 0};
    SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}
void gotoxy(int x,int y)
{
    HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
    COORD pos;
    pos.X = x;
    pos.Y = y;
    SetConsoleCursorPosition(handle,pos);
}
int TIME()//计时函数
{
	stop=clock();
	return (stop-start)/CLK_TCK;
 }
 void color(int nn)//颜色
{
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),nn);
}
int score1(int fs)//最高历史记录
{
	int sss=0;
    FILE *f=fopen("最高记录.txt","a+");
    fscanf(f,"%d",&sss);
    if(sss>=fs)
    {
		fclose(f);
		return sss;
	}
    else
    {
		FILE *ff=fopen("最高记录.txt","w+");
		fprintf(ff,"%d",fs); fclose(ff);
		return fs;
	}
}
void menu1()//蛇图形
{
	color(4);
	printf("\t\t /^\\/^\\");
	color(2);
	printf("\n\t     ___");
	color(4);
	printf("|__|  o|");
	color(2);
	printf("\n      v     /");
	color(4);
	printf("\t    \\_/");
	color(2);
	printf(" \\");
	color(4);
	printf("\n      \\____|__________/");
	color(2);
	printf("  \\\n\t   \\_______\t  \\\n\t           |\t  |\n\t          /\t  /\n\t        /\t /");
	printf("\n\t      /        /\t\t\t       \\");
	printf("\n\t     /        /\t\t\t               \\");
	printf("\n\t    /        /                 -               \\ \\");
	printf("\n\t   /        /               -~    ~-           \\  \\");
	printf("\n\t  <        <             -~         ~-         |   |");
	printf("\n\t   \\       \\           -~            ~-       /    |  ");
	printf("\n\t    \\       \\        -~                ~-    /     / ");
	printf("\n\t     \\       ~++++++ ~        ~-~        ~ --     -~ ");
	printf("\n\t      -~                    -~     ~-             -~ ");
	printf("\n\t       -~                -~          ~-          -~ ");
	printf("\n\t        -~             -~             ~-       -~  ");
	printf("\n\t          -~—++++++-~                  -~___-~  \n ");
//	printf("                  开始游戏后请全屏模式进行游戏\n");
}
void menu2()//功能选择区
{
	int a,b;
	HideCursor();
	int n,err=1;//n:输入 err:输错次数,满10清空
	char explain;//玩法说明中接受字符
	printf("                        欢迎进入C语言小游戏\n");
    color(4);	printf("\t\t\t    贪吃蛇大作战\n");
	color(6);
	printf("\t     ◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎\n");
	printf("\t     ◎                                          ◎\n");
	printf("\t     ◎");color(15);
	printf("       1.开始游戏      2.游戏设置");color(6);
	printf("         ◎\n");
	printf("\t     ◎                                          ◎\n");
	printf("\t     ◎");color(15);
	printf("       3.退出游戏      4.玩法说明");color(6);
	printf("         ◎\n");
	printf("\t     ◎                                          ◎\n");
	printf("\t     ◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎\n");
	flag:n=getch();
	switch(n)
	{
		case 49: system("CLS");if(mode==2)CHECKPOINT=1;
		game(); break;
		case 50: system("CLS");menu1();gameset();break;
		case 51: printf("游戏已退出!");exit(0);break;
		case 52: system("CLS");color(6);printf("\tw\\W       向上!");printf("\n\ts\\S       向下!");
										printf("\n\ta\\A       向左!");printf("\n\td\\D       向右!");
										printf("\n\t空格       暂停!");
										printf("\n\t双人模式p2;↑↓←→");
							   color(9);printf("\n\t游戏制作人:岑徐节,陈宏,吴泽杰,雷磊,唐小林,杨宇朗");
							   color(6);printf("\n\n\t>>按q返回主菜单<<");
								while(1)
								{
									explain=getch();
									if(explain=='q')
									{
										system("CLS");
										break;
									}
								}
								main();
    	default:printf("\n\t     输入非法!请重新输入:"); fflush(stdin); err++;
														if(err%10==0){
														system("CLS"); main();break;	}goto flag;
	}
}
void game()//游戏函数
{
	start=clock();
	score=0;
	HideCursor() ;
    highscore=score1(score);
    char R[10];
    startmap();
    food();
    if(flag5)
    R[10]="R";
    while (1)
    {
    	flag3:R[10]='0';
    	if(mode==4)//双人 
    	{if(snake1[0].y==0||xx[snake1[0].y][snake1[0].x]==2||snake1[0].y==map_wide-1||snake1[0].x==map_high-1||snake1[0].x==0)
		goto death;} 
    	if(xx[snake[0].y][snake[0].x]==3||snake[0].y==0||xx[snake[0].y][snake[0].x]==2||snake[0].y==map_wide-1||snake[0].x==map_high-1||snake[0].x==0)
     {if(xx[snake[0].y][snake[0].x]==3)
     {
     	if(mode==1) mode=3;
     	else  	mode=1;
			 if(mode==3)
     {snake[0].x=snake[0].x;
    	snake[0].y=snake[0].y-33;goto flag;}
     	else	if(mode==1)
     {snake[0].x=snake[0].x;
    	snake[0].y=snake[0].y+33;	goto flag;}
	 }


		highscore=score1(score);
     	flag6:printf("游戏结束!\n");
	
        death:  gameagain();

		 snake[0].x=map_high/2;
    	snake[0].y=map_wide/2;

	 }
    flag:show();
        updatewithoutinput();
        updatewithinput();
        color(770);if(mode!=4){printf("最高纪录:%d                 ",highscore);printf("目前得分:%d\t",score); printf("         已用时%d秒",TIME());}
					else{printf("p1得分:%d\t",score);printf("p2得分:%d\t             ",score2);printf("         已用时%d秒",TIME());}
        color(660);if(mode!=4){printf("\n操作说明:w\\W  向上  s\\S  向下    a\\A  向左  d\\D  向右  '空格'  暂停  ");}
					else  {printf("\np1:w\\W 向上 s\\S 向下 a\\A 向左 d\\D 向右    '空格' 暂停     p2:↑↓←→ ");
					}					
        color(0);
		for(i=0;i<snake_length||i<snake_length1;i++)
		{	if(	(snake[0].x==snake1[i].x)&&(snake[0].y==snake1[i].y)){
					go=1;goto flag6;
				}
			if((i>=2&&(snake[0].x==snake[i].x)&&(snake[0].y==snake[i].y)))
				{
			
					if(i==2)
					{
						switch(input)
						    {
						    	case 'W':
						        case 'w':snake[0].y+=2;break;
						        case 'S':
						        case 's':snake[0].y-=2;break;
						        case 'A':
						        case 'a':snake[0].x+=2;break;
						        case 'D':
								case 'd':snake[0].x-=2;break;		 
				
									}
						       
					}
				 	else //if(mode==1)
				 	{
					 goto flag6;
					 }
					
				 }
		}
		if(mode==4)
		{
				for(i=0;i<snake_length1||i<snake_length;i++)
				{
					if(	(snake1[0].x==snake[i].x)&&(snake1[0].y==snake[i].y)){
					go=2; goto flag6;
				}
					if(i>=2&&(snake1[0].x==snake1[i].x)&&(snake1[0].y==snake1[i].y))
						{
							if(i==2)
							{
								switch(input)
								    {
								    			 
								        case 72:if(mode==4){snake1[0].y+=2;break;}
								        case 80:if(mode==4){snake1[0].y-=2;break;}
								        case 75:if(mode==4){snake1[0].x+=2;break;}
								        case 77:if(mode==4){snake1[0].x-=2;break;}
								    
											}
								       
							}
						 	else
						 	{
						 		
							 goto flag6;
							 }
					
						 }
				}	
		}
   	
    }
}
void gameagain()//死亡界面
{
	int n;system("cls");
	if(mode!=4){
		int aa[15][37]={0};//	五角星
	 aa[0][18]=1;    for(j=17;j<20;j++)
	 aa[1][j]=1;	 for(j=16;j<21;j++)
	 aa[2][j]=1;     for(j=15;j<22;j++)
	 aa[3][j]=1;	 for(j=14;j<23;j++)
	 aa[4][j]=1;	 for(j=1;j<36;j++)
	 aa[5][j]=1;	 for(j=4;j<33;j++)
	 aa[6][j]=1;	 for(j=7;j<15;j++)
	 aa[7][j]=1;	 for(j=15;j<16;j++)
	 aa[7][j]=2;	 for(j=16;j<24;j++)
	 aa[7][j]=1;	 for(j=10;j<27;j++)
	 aa[8][j]=1;	 for(j=12;j<25;j++)
	 aa[9][j]=1;	 for(j=11;j<26;j++)
	 aa[10][j]=1;	 for(j=10;j<18;j++)
	 aa[11][j]=1;	 for(j=19;j<27;j++)
	 aa[11][j]=1;	 for(j=9;j<15;j++)
	 aa[12][j]=1;	 for(j=22;j<28;j++)
	 aa[12][j]=1;	 for(j=8;j<12;j++)
	 aa[13][j]=1;	 for(j=25;j<29;j++)
	 aa[13][j]=1;	 for(j=7;j<9;j++)
	 aa[14][j]=1;	 for(j=28;j<30;j++)
	 aa[14][j]=1;	 aa[15][6]=1,aa[15][31]=1;
	 for(i=0;i<15;i++)
	 {
	 	printf("\t\t");
	 	for(j=0;j<37;j++)
	   {
	 		if(aa[i][j]==1)
	 		{
	   			color(6);printf("*");
	 		}
	 		else if(aa[i][j]==2)
			 {
			 color(5);printf("得分:%d",score);
	 	     }
			 else printf(" ");
	   } printf("\n");
	 }
	}
	else{
		printf("\n\n\n\n\n\n\n\n");
		color(5);printf("\t\t\t\t双人模式\t\t\n");
	}
	
	 if(mode==4)
	 {
	 	  color(9);
	printf("\t     ○○○○○○○○○○○○○○○○○○○○○○○○\n");
	printf("\t     ○                                            ○\n");
	printf("\t     ○                                            ○\n");
	
	if(go==1)printf("\t\t\t\t  p2获胜\n");
	if(go==2)printf("\t\t\t\t  p1获胜\n");color(9);
	
		printf("\t     ○ ");color(2);
	printf("\tp1得分:%d\tp2得分:%d\t",score,score2);color(9);
	printf("   ○\n");
		printf("\t     ○ ");color(15);
	printf("\t\tr.重 新 游 戏\t\t");color(9);
	printf("   ○\n");
		printf("\t     ○ ");color(15);
	printf("\t\tm.返 回 菜 单\t\t");color(9);
	printf("   ○\n");
		printf("\t     ○ ");color(15);
	printf("\t\te.退 出 游 戏\t\t");color(9);
	printf("   ○\n");
	printf("\t     ○                                            ○\n");
	printf("\t     ○                                            ○\n");
	printf("\t     ○○○○○○○○○○○○○○○○○○○○○○○○\n");
	 }
	 else
	 {
	  color(9);
	printf("\t     ○○○○○○○○○○○○○○○○○○○○○○○○\n");
	printf("\t     ○                                            ○\n");
	printf("\t     ○                                            ○\n");
		printf("\t     ○ ");color(15);
	printf("\t\tr.重 新 游 戏\t\t");color(9);
	printf("   ○\n");
		printf("\t     ○ ");color(15);
	printf("\t\tq.继 续 游 戏\t\t");color(9);
	printf("   ○\n");
		printf("\t     ○ ");color(15);
	printf("\t\tm.返 回 菜 单\t\t");color(9);
	printf("   ○\n");
		printf("\t     ○ ");color(15);
	printf("\t\te.退 出 游 戏\t\t");color(9);
	printf("   ○\n");
	printf("\t     ○                                            ○\n");
	printf("\t     ○                                            ○\n");
	printf("\t     ○○○○○○○○○○○○○○○○○○○○○○○○\n");	
	 }
   
	flag4:n=getch();
	if(mode==4){
		if(n==113||n==81)
		  n=1;
	}
	switch(n)
	{
		case 82:
		case 114:   system("CLS");if(mode==3)mode=1;if(mode==2)CHECKPOINT=1;
											 for(i=0;i<=99;i++)
											 	for(j=0;j<=99;j++)
												 	xx[i][j]=0;
													if(mode==4){
														score=0;
														score2=0;
													}

													 for(i=1;i<=snake_length;i++)
										   			   {
												        snake[i].x=snake[i-1].x;
												        snake[i].y=snake[i-1].y;
										   			  }game();getch();break;
		case 77:
		case 109: system("CLS");main();break;
		case 81:
		case 113:  system("CLS");
				 color(1);
                  cq=0;
					char gamer;  // 玩家出拳
				    int computer,gamer1=0,computer1=0;  // 电脑出拳
				    int result;  // 比赛结果
				    while (1)
					{
						color(1);
					system("CLS");
					printf("\t     ---------------------------------------------\n");
					printf("\t     |                    猜拳                   |\n");
				    printf("\t     |                                           |\n");
					printf("\t     |               ");color(4);
					printf("规则:三局俩胜制") ;color(1);
					printf("            |\n");
					printf("\t     |                                           |\n");
					printf("\t     |      e.结束游戏          m.返回主菜单     |\n");
					printf("\t     ---------------------------------------------\n");
					flag1:color(7);
				       printf("\n");
				        printf("\t\tA:剪刀\n\t\tB:石头\n\t\tC:布\n");
						printf("\t\t第%d次出拳:",cq+1);
				      flag:  scanf("\t%c",&gamer);
				        switch (gamer){
				            case 65 : case 97:  // A | a
				                gamer=4; break;
				            case 66 : case 98:  // B | b
				                gamer=7; break;
				            case 67 : case 99:  // C | c
				                gamer=10; break;
				            case 69 : case 101: exit(0);break;
				            case 77: case 109: system("CLS");main();break;
				            default:
				            	color(3);
				                printf("\t\t你的选择为 %c 选择错误!请重新输入你要出的拳头:",gamer);
				                printf("");
				                goto flag;
				                break;
				       }
				        srand((unsigned)time(NULL));  // 随机数种子
				        computer=rand()%3;  // 产生随机数并取余,得到电脑出拳
				        result=(int)gamer+computer;  // gamer 为 char 类型,数学运算时要强制转换类型
				        printf("\t\t电脑出了");
				       switch (computer)
				        {
				            case 0:printf("\t\t剪刀\n");break; //4    1
				            case 1:printf("\t\t石头\n");break; //7  2
				            case 2:printf("\t\t\n");break;   //10 3
				       }
				        printf("\t\t你出了     ");
				        switch (gamer)
				        {
				            case 4:printf("\t\t剪刀\n");break;
				           case 7:printf("\t\t石头\n");break;
				           case 10:printf("\t\t\n");break;
				        }
				        if (result==6||result==7||result==11){color(6); printf("\t\t\t你赢了!");gamer1++;
						printf("\n\t     ---------------------------------------------\n");
						}
				       else if (result==5||result==9||result==10){color(6);printf("\t\t\t电脑赢了!");computer1++;
					   printf("\n\t     ---------------------------------------------\n");
					   }
				       else {color(6);printf("\t\t\t平手");
					   printf("\n\t     ---------------------------------------------\n");goto flag1;
						}
						Sleep(1000);
				        cq++;
				        if(cq==3)
				        break;
				    }
				     if(computer1>gamer1)
				     {
				     	printf("\t\t复活失败!!!即将返回主菜单......");
				     	score=0;
				     		Sleep(2000);
						 system("CLS");
				     	main();}
					 if(snake_length>=1)//进入下一关全部位置一样
             for(i=1;i<=snake_length;i++)
   			   {
		        snake[i].x=snake[i-1].x;
		        snake[i].y=snake[i-1].y;
   			  }
				    system("CLS");printf("复活成功");Sleep(2000); system("CLS");
				    break;
		case 69:
		case 101:  printf("游戏已退出!");exit(0);break;
		default:printf("\t\t输入错误,请重新输入!!!\n");fflush(stdin);goto flag4;
	}
}
void startmap()//确认开始地图 及初始化蛇
{
	if(mapmap==1)
	{
		map_high=35;
    	map_wide=35;
	}if(mode==1||mode==2)
	{
		snake[0].x=map_high/2;
    snake[0].y=map_wide/2;
    snake_length=1;
	}
    
    if(mode==4)
    {
     snake[0].x=10;
    snake[0].y=10;
    snake_length=1;
	 snake1[0].x=20;
    snake1[0].y=20;
    snake_length1=1;
	}
}
void food()//产生食物
 {
 	 srand((unsigned)time(NULL));
     food_x=rand()%(map_high-2)+1;
     food_y=rand()%(map_wide-2)+1;
 }
 int snakehit(int x,int y)
 {
     int k;
     int flag2,flag22;
     flag2=0;flag22=0;
     for(k=0;(k<=snake_length);k++)
         if(snake[k].x==y&&snake[k].y==x)
         {
		 	if(k==0)
			 flag2=2;
			 else
			 flag2=1;
             break;
         }
         for(k=0;k<=snake_length1;k++)
          if(snake1[k].x==y&&snake1[k].y==x)
          {
		 	if(k==0)
			 flag22=2;
			 else
			 flag22=1;
             break;
         }
    if(x==0&&y==0) return 3;
    if(flag2==1||flag22==1)
        return 1;
    else
    if(flag2==2||flag22==2)
    	return 2;
        else
		return 3;
 }
 void show()//输出地图
 {
  HideCursor() ;
    int i,j;
     gotoxy(0,0);if(mode==1){printf("\t\t\t\t");color(550);printf("一般模式\n",CHECKPOINT);}
    else if(mode==3){printf("\t\t\t\t");color(550);printf("隐藏关卡\n",CHECKPOINT);}
	 				else if(mode==3){printf("\t\t\t\t");color(550);printf("第%d关\n",CHECKPOINT);}
	 				else if(mode==4){printf("\t\t\t\t");color(550);printf("双人模式\n",CHECKPOINT);}
     for(i=0;i<map_wide;i++)
     {
         for(j=0;j<map_high;j++)
     {
	 		flag=0;
            flag=snakehit(i,j);
          if(mode==4){flag1=0; flag1=snakehit(i,j); }
		  
         if(mode==4?flag==1||flag1==1||flag1==2||flag==2:flag==1||flag==2)
		 {
		 	if(snakehit(i,j)==2)
		 	{
		 		if(i==snake1[0].y&&j==snake1[0].x)color(2);
		 		else color(6);
            printf("●");
			}
            else //if((i!=0&&j!=0))
		 	{

		 		 color(4);
            printf("◆");
			}
			}
        else
            if(i==food_y&&j==food_x)
            {
            	int a,b;
            	flag1:for(a=0;a<=snake_length;a++)
            	{
            		if(food_y==snake[a].y&&food_x==snake[a].x)
            		{
						food();
						goto flag1;
					}
				}
				flag2: if(xx[food_y][food_x]==2)
				{
					food();
						goto flag2;
				}
						 	color(kk);
				switch(TARGET)
				{
				 case 1:printf("▲");break;
				 case 2:printf("●");break;
				 case 3:printf("★");break;
				 case 4:printf("◇");break;
				 case 5:printf("☆");break;
				 }
			}
         else
        {
			checkpoint(i,j,xx);
		 }
     }
     printf("\n");
     }
     Sleep(t);
 }
void checkpoint(int i,int j,int xx[][100])//关卡
{
	if(i==0||i==map_wide-1||j==0||j==map_high-1)
	 		{
	 			if(mode==1){

	 				if((i==34)&&(j>=1&&j<=5))
						xx[i][j]=3;
					if((i==0)&&(j>=1&&j<=5))
						xx[i][j]=2;
						color(mm);
				}
				else if(mode==3){

	 				if((i==0)&&(j>=1&&j<=5))
						xx[i][j]=3;
					if((i==34)&&(j>=1&&j<=5))
						xx[i][j]=2;
						color(13);
				 }
				 else if(mode==4)color(90);
				 else if(mode==2)color(mm);
	 		    switch(BORDER)
				{
				 case 1:printf("卐");break;
				 case 2:printf("■");break;
				 case 3:printf("⊕");break;
				 case 4:printf("◎");break;
				 case 5:printf("■");break;
				 case 6:printf("口");break;
				 }
			}
			else if(mode==1||mode==3||mode==4)
			{

				if(mode==3)
				{
				if((i==20)&&(j==10||j==11||j==12||j==13||j==14||j==15||j==16||j==18||j==19||j==20||j==21||j==22||j==23||j==24)
						||(i==19||i==18||i==17||i==16||i==15||i==14||i==13||i==12||i==11)&&(j==10||j==18))
								 {   color(5);printf("■");xx[i][j]=2;	}
								 else {color(7);printf("■");	}
				}
			else	{for(i=0;i<=99;i++)
			 			for(j=0;j<=99;j++)
				 			xx[i][j]=0;color(nn);if(mode==4)color(17);printf("■");
			}
			}
				else 
				switch(CHECKPOINT){
				        case 1:if((i==5||i==27)&&(j==6||j==7||j==8||j==25||j==26||j==27))
								 {   color(5);printf("■");xx[i][j]=2;	}
								 else {color(nn);printf("■");	}break;
						case 2:if(((i==5||i==27)&&(j==6||j==7||j==8||j==25||j==26||j==27))
								||((j==6||j==27)&&(i==6||i==7||i==8||i==25||i==26||i==24))
								||(i==8||i==24)&&(j==15||j==16||j==17||j==18))
								 {   color(5);printf("■");xx[i][j]=2;}
								 else {color(nn);printf("■");	}break;
						case 3:if((i==5||i==6||i==7||i==8||i==9||i==10||i==11||i==12||i==13)&&(j==10||j==24)
						          ||(i==13)&&(j==1||j==2||j==3||j==4||j==5||j==6||j==7||j==8||j==9||j==25||j==26||j==27||j==28||j==29||j==30||j==31||j==32||j==33)
								  ||(i==25)&&(j>=11&&j<=23))
								 {   color(5);printf("■");xx[i][j]=2;}
								 else {color(nn);printf("■");	}break;
						case 4:if((j==8)&&(i>=5&&i<=28&&i%2==0)
									||(i==6||i==28)&&(j>7&&j<=25&&j%2==0)
									||(j==13)&&(i>=11&&i<=23)
									||(i==11||i==23)&&(j>13&&j<=24)
									||(j==24&&((i>=6&&i<=11)||(i>=23&&i<=28))))
						 			{   color(5);printf("■");xx[i][j]=2;}
						 			 else {color(nn);printf("■");	}break;
					flag:case 5:if(i==4&&(j>=4&&j<=10))
					 {   color(5);printf("■");xx[i][j]=2;	}
								 else {color(nn);printf("■");	}break;
						case 6:if((i==12||i==24)&&(j==14)
						            ||(i==13)&&(j==14)
						            ||(i==19)&&(j==19)
						            ||(i==14||i==11||i==23)&&(j==15)
									||(i==15||i==10||i==22)&&(j==16)
									||(i==16||i==9||i==21)&&(j==17)
									||(i==17||i==8||i==20)&&(j==18)
 		                            ||(i==18||i==7||i==19)&&(j==19)
 		                     		||(i==5||i==11)&&(j==4)
 		                     		||(i==6)&&(j==4)
						            ||(i==9)&&(j==6)
 		                            ||(i==4||i==7||i==10)&&(j==5)
 		                            ||(i==3||i==8)&&(j==6)
                              		||(i==5||i==11)&&(j==28)
                              		||(i==6)&&(j==28)
						            ||(i==9)&&(j==30)
 		                            ||(i==4||i==7||i==10)&&(j==29)
 		                            ||(i==3||i==8)&&(j==30)
									)
						 			{   color(5);printf("■");xx[i][j]=2;}
						 			 else {color(nn);printf("■");	}break;
                		case 7:if(
						        (j==6)&&(i==5||i==7||i==9||i==11||i==13||i==15||i==17||i==19||i==21||i==23||i==24)
								||(j==28)&&(i==5||i==7||i==9||i==11||i==13||i==15||i==17||i==19||i==21||i==23||i==24)
						        ||(i==5)&&(j==7)||(i==7)&&(j==9)||(i==9)&&(j==11)||(i==11)&&(j==13)||(i==13)&&(j==15)
						        ||(i==15)&&(j==17)||(i==17)&&(j==19)||(i==19)&&(j==21)||(i==21)&&(j==23)||(i==23)&&(j==25)||(i==5||i==24)&&(j==27)
						        ||(i==6)&&(j==25)||(i==8)&&(j==23)||(i==10)&&(j==21)||(i==12)&&(j==19)||(i==14)&&(j==17)
						        ||(i==16)&&(j==15)||(i==18)&&(j==13)||(i==20)&&(j==11)||(i==22)&&(j==9)||(i==24)&&(j==7)
								)

						 			{   color(5);printf("■");xx[i][j]=2;}
						 			 else {color(nn);printf("■");	}break;
				     	case 8:if((j==2)&&(i==32)||(j==3)&&(i==30)||(j==4)&&(i==28)||(j==5)&&(i==26)||(j==6)&&(i==24)||(j==7)&&(i==22)||(j==8)&&(i==20)||(j==9)&&(i==18)
						        ||(j==10)&&(i==16)||(j==11)&&(i==14)||(j==12)&&(i==12)||(j==13)&&(i==10)||(j==14)&&(i==8)||(j==15)&&(i==6)||(j==16)&&(i==4)||(j==17)&&(i==2)
						        ||(j==32)&&(i==32)||(j==31)&&(i==30)||(j==30)&&(i==28)||(j==29)&&(i==26)||(j==28)&&(i==24)||(j==27)&&(i==22)||(j==26)&&(i==20)||(j==25)&&(i==18)
						        ||(j==24)&&(i==16)||(j==23)&&(i==14)||(j==22)&&(i==12)||(j==21)&&(i==10)||(j==20)&&(i==8)||(j==19)&&(i==6)||(j==18)&&(i==4)||(j==17)&&(i==2)
						        ||(i==24)&&(j>7&&j<27)
								||(i==14)&&(j>12&&j<22))

						 			{   color(5);printf("■");xx[i][j]=2;}
						 			 else {color(nn);printf("■");	}break;
				     	case 9:if((j==11)&&(i==5||i==7||i==9||i==11||i==13||i==15||i==17||i==19||i==21||i==23||i==25||i==27||i==29)
						||(i==16)&&(j==13)||(i==15)&&(j==14)||(i==14)&&(j==15)||(i==13)&&(j==16)||(i==12)&&(j==17)||(i==11)&&(j==18)||(i==10)&&(j==19)||(i==9)&&(j==20)||(i==8)&&(j==21)||(i==7)&&(j==22)||(i==6)&&(j==23)||(i==5)&&(j==24)
						||(i==18)&&(j==13)||(i==19)&&(j==14)||(i==20)&&(j==15)||(i==21)&&(j==16)||(i==22)&&(j==17)||(i==23)&&(j==18)||(i==24)&&(j==19)||(i==25)&&(j==20)||(i==26)&&(j==21)||(i==27)&&(j==22)||(i==28)&&(j==23)||(i==29)&&(j==24)
						||(i==29)&&(j==13||j==15||j==17||j==19||j==21||j==23)||(i==5)&&(j==13||j==15||j==17||j==19||j==21||j==23)
						)
						 			{   color(5);printf("■");xx[i][j]=2;}
						 			 else {color(nn);printf("■");	}break;
                        case 10:if((j==11)&&(i==5||i==7||i==9||i==11||i==13||i==15||i==17||i==19||i==21||i==23||i==25||i==27||i==29)
                        ||(i==18)&&(j>12&&j<24)
                        ||(i==5)&&(j==13||j==15||j==17||j==19||j==21||j==23)
						||(i==29)&&(j==13||j==15||j==17||j==19||j==21||j==23)
                        ||(j==25)&&(i==5||i==7||i==9||i==11||i==13||i==15||i==17||i==19||i==21||i==23||i==25||i==27||i==29)
                        )
						 			{   color(5);printf("■");xx[i][j]=2;}
						 			 else {color(nn);printf("■");	}break;
							case 11:if(((i==19||i==15)&&(j==14||j==16||j==18||j==20))||((j==14||j==20)&&i==17)||((i==4||i==29)&&((j>=4&&j<=13)||(j>=20&&j<=29)))
						||((i==2||i==6||i==27||i==31)&&(j>=12&&j<=20))
						)
							 	 {   color(5);printf("■");xx[i][j]=2;	}
								 else {color(nn);printf("■");	}break;
					    case 12:if(((i==4||i==29)&&((j>=4&&j<=14)||(j>=20&&j<=30)))||((j==4||j==30)&&(i>=4&&i<=30))
						||((j==14||j==20)&&(i==7||i==10||i==26||i==23))||((j==9||j==25)&&(i==13||i==20))||((i==10||i==23)&&((j>=9&&j<=14)||(j>=20&&j<=25)))
						||((i==17)&&((j>=9&&j<=14)||(j>=20&&j<=25))))
							 	 {   color(5);printf("■");xx[i][j]=2;	}
								 else {color(nn);printf("■");	}break;
						case 13:if((((i>=3&&i<=4)||i==6||i==7)&&(j==15||j==16||j==18||j==19))||((i==9||i==20)&&(j==13||j==21))
						||((i==10||i==21)&&(j==12||j==22))||((i>=9&&i<=15)&&(j==16||j==18))||((i==11||i==22)&&(j==11||j==23))
						||(i==12&&(j==10||j==24))||(i==13&&(j==9||j==25))||((i==39||i==30)&&(j>=8&&j<=25)) )
							 	 {   color(5);printf("■");xx[i][j]=2;	}
								 else {color(nn);printf("■");	}break;
						case 14:if(((i==3||i==29)&&(j>=4&&j<=30))||((i>=15&&i<=29)&&j==4)||(j==30&&(i>=4&&i<=15))||(j==4&&(i==5||i==7||i==9||i==11||i==13))
						||(j==30&&(i==27||i==25||i==23||i==21||i==19||i==17))||(i==15&&(j==6||j==8||j==10||j==12||j==14||j==16||j==18||j==20||j==22||j==24||j==26||j==28))
						||(i==19&&(j==14||j==16||j==18||j==20))||((j==14||j==20)&&i==17)
						)
							 	 {   color(5);printf("■");xx[i][j]=2;	}
								 else {color(nn);printf("■");	}break;
						case 15:if(((j==10||j==12||j==21||j==23)&&((i>=3&&i<=12)||(i>=18&&i<=32)))||((i==14||i==16)&&((j>=2&&j<=8)||(j>=26&&j<=32)))
						||((i==25||i==27)&&((j>=3&&j<=8)||(j>=25&&j<=31)))
						||(i==5&&((j>=2&&j<=4)||(j<=8&&j>=7)||(j>=25&&j<=28)||(j<=32&&j>=30)))
						||(i==7&&((j>=3&&j<=8)||(j>=26&&j<=32)))||((i==5||i==25)&&(j>=15&&j<=18))
						)
							 	 {   color(5);printf("■");xx[i][j]=2;	}
								 else {color(nn);printf("■");}break;
						 case 16:if(((i==3||i==19)&&(j==6||j==8||j==10||j==12||j==14||j==16||j==18||j==20||j==22||j==24||j==26||j==28))||((j==6||j==28)&&
						(i==5||i==7||i==9||i==11||i==13||i==15||i==17||i==19))||((j==12||j==22)&&(i==21||i==23||i==25||i==27||i==29))||(i==5&&((j>=9&&j<=11)
						||(j>=23&&j<=25)))||((i==14&&(j>=14&&j<=20)))||(i==15&&(j>=16&&j<=18))||(i==11&&(j>=16&&j<=18))||(i==12&&j==17)
						||(i==7&&(j==10||j==24))
						)
							 	 {   color(5);printf("■");xx[i][j]=2;	}
								 else {color(nn);printf("■");	}break;
						case 17:if(((i==2||i==30)&&((j==2||j==4||j==6||j==8||j==9||j==11||j==13||j==15)||(j==19||j==21||j==23||j==25||j==26||j==28||j==30||j==32)))
						||((j==2||j==15||j==19||j==32)&&(i==4||i==6||i==8||i==10||i==12
						||i==14||i==16||i==18||i==20||i==22||i==24||i==26||i==28))||((i==15||i==19)&&(j==16||j==18))||((i==27||i==25)&&((j>=7&&j<=10)||(j>=24&&j<=27)))
						)
							 	 {   color(5);printf("■");xx[i][j]=2;	}
								 else {color(nn);printf("■");	}break;

								 default :goto flag;
			     }
}
 void updatewithinput()
{

   	int n=1,m=0;
	flag1:  if(kbhit())  input=getch();
	switch(input)
	{
		case 'W':
        case 'w':A=input;break;
        case 'S':
        case 's':A=input;break;
        case 'A':
        case 'a':A=input;break;
       	case 'D':
        case 'd':A=input;break;
        case -32:input=getch();
        case 72:B=input;break;
        case 80:B=input;break;
        case 75:B=input;break;
		case 77:B=input;break;
		case ' ':system("cls");printf("\n\n\t\t\t      ◎已暂停◎");char C[20]={'f','o','u','n','d','t','h','e','e','g','g'},a[20];
										 color(n%14+1); n++;
   									 if(!strcmp(C,C))
   									 {
									   printf(" \n                     *********           *********             \n");
										printf("                *****************   *****************            \n");
										printf("               ****************************************           \n");
										printf("             *******************************************           \n");
										printf("            *********************************************          \n");
										printf("            *********************************************          \n");
										printf("            *********************************************           \n");
										printf("            *********************************************           \n");
										printf("            *********************************************           \n");
										printf("            *********************************************           \n");
										printf("             *******************************************            \n");
										printf("              *****************************************             \n");
										printf("               ***************************************            \n");
										printf("                *************************************             \n");
										printf("                 ***********************************             \n");
										printf("                  *********************************             \n");
										printf("                    *****************************             \n");
										printf("                      *************************            \n");
										printf("                        *********************             \n");
										printf("                           ***************              \n");
										printf("                              *********              \n");
										printf("                                 ***            \n");
												}
										Sleep(1000);	goto flag1;fflush(stdin);break;
										
											
	}
    switch(A)
    {
    	case 'W':
        case 'w':snake[0].y--;ch='w';break;
        case 'S':
        case 's':snake[0].y++;ch='s';break;
        case 'A':
        case 'a':snake[0].x--;ch='a';break;
       	case 'D':
        case 'd':snake[0].x++;ch='d';break;
       
    }
    if(mode==4)
     switch(B)
    {
    
        case 72:snake1[0].y--;break;
        case 80:snake1[0].y++;break;
        case 75:snake1[0].x--;break;
		case 77:snake1[0].x++;break;

    }
}

void updatewithoutinput()//与输入无关的更新
{
	int j;
    flag5=0;
    if(snake[0].x==food_x&&snake[0].y==food_y||snake1[0].x==food_x&&snake1[0].y==food_y)
    {   
    	if(mode==1||mode==3||mode==4)
    	{
    		
		if(snake[0].x==food_x&&snake[0].y==food_y){snake_length++;score+=5;
			}	
		if(snake1[0].x==food_x&&snake1[0].y==food_y){snake_length1++;score2+=5;
			}
		}
       else
       {score+=CHECKPOINT*5;
        snake_length++;
        if(snake_length%3==0)
            {
            	int i,j;
			 for(i=0;i<=99;i++)
			 	for(j=0;j<=99;j++)
				 	xx[i][j]=0;
					CHECKPOINT++;snake[0].x=20;	snake[0].y=20;
		 if(snake_length>=1)//进入下一关全部位置一样
        for(i=1;i<=snake_length;i++)
   			 {
		        snake[i].x=snake[i-1].x;
		        snake[i].y=snake[i-1].y;
   			 }
		}
	   }
 food();
    }

	 	if(snake_length>=1)
        for(i=snake_length;i>0;i--)
    {
        snake[i].x=snake[i-1].x;
        snake[i].y=snake[i-1].y;
    }
    	 	if(snake_length1>=1)
        for(i=snake_length1;i>0;i--)
    {
        snake1[i].x=snake1[i-1].x;
        snake1[i].y=snake1[i-1].y;
    }
 }
 void colorselect()//颜色表
 {
 printf("\t\t1.");	color(16);printf("黑色\n");
  color(1);printf("\t\t2.");printf("蓝色\n");
  color(2);printf("\t\t3.");printf("绿色\n");
  color(3);printf("\t\t4.");printf("湖蓝色\n");
  color(4);printf("\t\t5.");printf("红色\n");
  color(5);printf("\t\t6.");printf("紫色\n");
  color(6);printf("\t\t7.");printf("黄色\n");
  color(7);printf("\t\t8.");printf("白色\n");
  color(8);printf("\t\t9.");printf("灰色\n");
  color(9);printf("\t\t10.");printf("淡蓝色\n");
  color(10);printf("\t\t11.");printf("淡绿色\n");
  color(11);printf("\t\t12.");printf("淡浅绿色\n");
  color(12);printf("\t\t13.");printf("淡红色\n");
  color(13);printf("\t\t14.");printf("淡紫色\n");
  color(14);printf("\t\t15.");printf("淡黄色\n");
  color(15);printf("\t\t16.");printf("亮白色\n");

 }
 void gameset()//设置
{
	int n;
	color(13);
	printf("\t     |╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳ | \n");
	printf("\t     |╳╳                                        ╳╳ | \n");
	printf("\t     |╳╳              ");color(330);
	printf("1.游 戏 难 度");color(13);
	printf("             ╳╳ | \n");printf("\t     |╳╳                                        ╳╳ | \n");
	printf("\t     |╳╳              ");color(330);
	printf("2.界 面 设 置");color(13);
	printf("             ╳╳ | \n");printf("\t     |╳╳                                        ╳╳ | \n");
	printf("\t     |╳╳              ");color(330);
	printf("3.返 回 菜 单");color(13);
	printf("             ╳╳ | \n");printf("\t     |╳╳                                        ╳╳ | \n");
	printf("\t     |╳╳              ");color(330);
	printf("4.游 戏 模 式");color(13);
	printf("             ╳╳ | \n");printf("\t     |╳╳                                        ╳╳ | \n");

	printf("\t     |╳╳                                        ╳╳ | \n");
	printf("\t     |╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳ | \n");
	flag4:n=getch();
	switch(n)
	{
		case 49: system("CLS");menu1();gamelevel(); break;
		case 50: system("CLS");menu1();gameinterface();break;
		case 51: system("CLS");main();break;
		case 52: system("CLS");

			printf("\t     ---------------------------------------------\n");
			printf("\t     |                                           |\n");
		    printf("\t     |                                           |\n");
			printf("\t     |                游 戏 模 式                |\n");
			printf("\t     |            --默认:一般模式--             |\n");
			printf("\t     ---------------------------------------------\n");
			color(3);printf("\t\t0.双人模式\n");
			color(4);printf("\t\t1.一般模式\n");
			color(5);printf("\t\t2.闯关模式\n");
			color(6);printf("\t\t5.返回上一级\n");
			color(7);printf("\t\t6.返回菜单  \n");
			int s;
	        flag:s=getch(	);
				switch(s)
	{
			case 48: mode=4;printf("\t\t已选择双人模式!!!放回主菜单中.....\n");Sleep(1500);system("CLS");main();break;
		case 49: mode=1;snake1[0].x=0;snake1[0].y=0;("\t\t已选择一般模式!!!放回主菜单中.....\n");Sleep(1500);system("CLS");main();break;
		case 50: mode=2;map_high=35;map_wide=35;
											for(i=0;i<=99;i++)
											 	for(j=0;j<=99;j++)
												 	xx[i][j]=0;printf("\t\t已选择闯关模式!!!放回主菜单中.....\n");Sleep(1500);system("CLS");main();break;
		case 53: system("CLS");menu1();gameset();break;
		case 54: system("CLS");main();break;
		default:printf("\t\t输入错误,请重新输入!!!\n");fflush(stdin);goto flag;
	}
		break;
		default:printf("\t\t输入错误,请重新输入!!!\n");fflush(stdin);goto flag4;
	}
}
void gamelevel()//蛇速度
{
	int n;
	color(2);
	printf("\t     ---------------------------------------------\n");
    color(4);
	printf("\t     |                  1.简单                   |\n");
	printf("\t     |                  2.一般                   |\n");
	printf("\t     |                  3.困难                   |\n");
	printf("\t     |                  4.专家                   |\n");
	printf("\t     |                  5.地狱                   |\n");
	printf("\t     |                                           |\n");
	printf("\t     |   6.返回主菜单             7.返回上一级   |\n");
	printf("\t     |                                           |\n");
	color(2);
	printf("\t     |            默认:一般模式                 |\n");
	printf("\t     ---------------------------------------------\n");
	if(kbhit)
   flag4:	n=getch(	);
	switch(n)
	{
		case 49: t=100; color(7);printf("\n\t     设置成功!!!已选择简单难度。\n\t     即将返回上一级......");Sleep(1800);system("CLS");menu1();gameset();break;
		case 50: t=70;color(7);printf("\n\t     设置成功!!!已选择一般难度。\n\t     即将返回上一级......");Sleep(1800);system("CLS");menu1();gameset();break;
		case 51: t=40;color(7);printf("\n\t     设置成功!!!已选择困难难度。\n\t     即将返回上一级......");Sleep(1800);system("CLS");menu1();gameset();break;
	    case 52: t=20;color(7);printf("\n\t     设置成功!!!已选择专家难度n\t     即将返回上一级......");Sleep(1800);system("CLS");menu1();gameset();break;
		case 53: t=1;color(7);printf("\n\t     设置成功!!!已选择地狱难度。\n\t     即将返回上一级......");Sleep(1800);system("CLS");menu1();gameset();break;
		case 54:system("CLS");main();break;
		case 55:system("CLS");menu1();gameset();break;
		default: printf("\n\t     输入非法!请重新输入:");fflush(stdin);goto flag4;
	}
}
void gameinterface()//界面设置
{
    color(1);
	printf("\t     ▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂\n");
	printf("\t     |                                            |\n");
    color(2);
	printf("\t     |                1.地图大小                  |\n");
    printf("\t     |                                            |\n");
    color(5);
	printf("\t     |                2.地图颜色                  |\n");
	color(3);
	printf("\t     |                                            |\n");
	printf("\t     |                3.靶子设置                  |\n");
	printf("\t     |                                            |\n");
	color(4);
	printf("\t     |                4.边界设置                  |\n");
	printf("\t     |                                            |\n");
	color(6);
	printf("\t     |   5.返回上一级             6.返回主菜单    |\n");
	color(1);
	printf("\t     |                                            |\n");
	printf("\t     ﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌\n");
	int n;
	flag:n=getch(	);
	switch(n)
	{
		case 49: system("CLS");mapsize();break;
		case 50: system("CLS"); mapcolor();break;
		case 51: system("CLS");target();break;
		case 52: system("CLS");border();break;
		case 53: system("CLS");menu1();gameset();break;
		case 54: system("CLS");main();break;
		default:printf("\t\t输入错误,请重新输入!!!\n");fflush(stdin);goto flag;
	}

}
void border()//边界设置
{
	 flag6:	 color(1);
	printf("\t     ---------------------------------------------\n");
	printf("\t     |                                            |\n");
    printf("\t     |                                            |\n");
	printf("\t     |                 边界设置                   |\n");
	printf("\t     |                                            |\n");
	printf("\t     |                                            |\n");
	printf("\t     ---------------------------------------------\n");
	color(4);printf("\t\t1.边界样式\n");
	color(5);printf("\t\t2.边界颜色\n");
	color(6);printf("\t\t5.返回上一级\n");
	color(7);printf("\t\t6.返回菜单  \n");
		int n;

	flag1:	n=getch();
	switch(n)
	{
		case 49:system("CLS");
		color(1);
		printf("\t     ---------------------------------------------\n");
		printf("\t     |                                           |\n");
    	printf("\t     |                                           |\n");
		printf("\t     |                 边界样式                  |\n");
		printf("\t     |                                           |\n");
		printf("\t     |               4.开始设置                  |\n");
		printf("\t     |               5.返回上一级                |\n");
		printf("\t     |               6.返回菜单                  |\n");
		printf("\t     ---------------------------------------------\n");
		int k;
		flag5:k=getch();
		switch(k)
		{
			case 52:system("CLS");
			        color(5);printf("\t\t1.");printf("卍\n");
			  		color(5);printf("\t\t2.");printf("▇\n");
			  		color(5);printf("\t\t3.");printf("⊕\n");
			  		color(5);printf("\t\t4.");printf("◎\n");
			  		color(5);printf("\t\t5.");printf("■\n");
			  		color(5);printf("\t\t6.");printf("口\n");
			  		printf("\t\t请输入选项(enter确认):");
			        scanf("%d",&BORDER);
			         color(14);
			         printf("\n\t\t设置成功!!!");
			         Sleep(1500);
			        system("CLS");
			  		break;
			case 53:system("CLS");goto flag6;break;
  			case 54:system("CLS");main();break;
  			default :printf("\t\t输入错误,请重新输入!!!\n");goto flag5;
		 }
  		case 50:system("CLS");
		color(1);
		printf("\t     ---------------------------------------------\n");
		printf("\t     |                                            |\n");
    	printf("\t     |                                            |\n");
		printf("\t     |                 边界颜色                   |\n");
		printf("\t     |               4.开始设置                   |\n");
		printf("\t     |               5.返回上一级                 |\n");
		printf("\t     |               6.返回菜单                   |\n");
		printf("\t     ---------------------------------------------\n");
		int j;
	flag3:	j=getch();
		switch(j)
		{
			case 52:system("CLS");	colorselect();
								   color(8);
								 printf("\t\t请输入选项(enter确认):");
								  flag: scanf("%d",&mm);
								  if(mm>17||mm<1)
								  {
								  	printf("\t\t设置失败,请重新输入:");
								  	goto flag;
								  }
								  --mm;
								  color(14);
								   printf("\n\t\t设置成功!!!");
								   Sleep(1500);system("CLS");
								  		break;
			case 53:system("CLS");goto flag6;break;
  			case 54:system("CLS");main();break;
  			default :printf("\t\t输入错误,请重新输入!!!\n");goto flag3;
		}
  	case 53:system("CLS"); menu1();gameinterface();
  	case 54:system("CLS");main();break;
  	default :printf("\t\t输入错误,请重新输入!!!\n");goto flag1;
	}
	menu1();
	gameinterface();
}
void target()//靶子设置
{
	int n;
   flag1: color(1);
	printf("\t     ---------------------------------------------\n");
	printf("\t     |                                            |\n");
    printf("\t     |                                            |\n");
	printf("\t     |                 靶子设置                   |\n");
	printf("\t     |                                            |\n");
	printf("\t     |                                            |\n");
	printf("\t     ---------------------------------------------\n");
	color(4);printf("\t\t1.靶子样式\n");
	color(5);printf("\t\t2.靶子颜色\n");
	color(6);printf("\t\t5.返回上一级\n");
	color(7);printf("\t\t6.返回菜单  \n");
flag4:	n=getch();
	switch(n)
	{
		int s;
		case 49:system("CLS");
		color(1);
		printf("\t     ---------------------------------------------\n");
		printf("\t     |                                           |\n");
    	printf("\t     |                                           |\n");
		printf("\t     |                 靶子样式                  |\n");
		printf("\t     |               4.开始设置                  |\n");
		printf("\t     |               5.返回上一级                |\n");
		printf("\t     |               6.返回菜单                  |\n");
		printf("\t     ---------------------------------------------\n");
	flag3:	s=getch();
	    switch(s)
	{
	case 52:system("CLS");
		color(5);printf("\t\t1.");printf("▲\n");
  		color(5);printf("\t\t2.");printf("●\n");
  		color(5);printf("\t\t3.");printf("★\n");
  		color(5);printf("\t\t4.");printf("◇\n");
  		color(5);printf("\t\t5.");printf("☆\n");
  		printf("\t\t请输入选项(enter确认):");
        scanf("%d",&TARGET);
         color(14);
         printf("\n\t\t设置成功!!!");
         Sleep(1500);
        system("CLS");goto flag1;
  		break;
  	case 53:system("CLS");goto flag1;break;
  	case 54:system("CLS");main();break;
  	default :printf("\t\t输入错误,请重新输入!!!\n");goto flag3;
  }
  		case 50:system("CLS");
		color(1);
		printf("\t     ---------------------------------------------\n");
		printf("\t     |                                            |\n");
    	printf("\t     |                                            |\n");
		printf("\t     |                 靶子颜色                   |\n");
		printf("\t     |               4.开始设置                   |\n");
		printf("\t     |               5.返回上一级                 |\n");
		printf("\t     |               6.返回菜单                   |\n");
		printf("\t     ---------------------------------------------\n");
		int k;
		flag5:k=getch();
		switch(k)
		{
			case 52:system("CLS");	colorselect();
						   color(8);
						 printf("\t\t请输入选项(enter确认):");
						  flag: scanf("%d",&kk);
						  if(kk>17||kk<1)
						  {
						  	printf("\t\t设置失败,请重新输入:");
						  	goto flag;
						  }
						  --kk;
						  color(14);
						   printf("\n\t\t设置成功!!!");
						   Sleep(1500);system("CLS");goto flag1;
						  		break;
			case 53:system("CLS");goto flag1;break;
  			case 54:system("CLS");main();break;
  			default :printf("\t\t输入错误,请重新输入!!!\n");goto flag5;
		}

  	case 53:system("CLS"); menu1();gameinterface();
  	case 54:system("CLS");main();break;
  	default :printf("\t\t输入错误,请重新输入!!!\n");goto flag4;
	}
	menu1();
	gameinterface();
}
void mapsize()//地图大小
{
	int n;
	 color(1);
	printf("\t     ---------------------------------------------\n");
	printf("\t     |                 地图大小                  |\n");
    printf("\t     |                                           |\n");
	printf("\t     |               4.开始设置                  |\n");
	printf("\t     |               5.返回上一级                |\n");
	printf("\t     |               6.返回菜单                  |\n");
	printf("\t     ---------------------------------------------\n");
flag:n=getch();
	switch(n)
	{
		case 52:if(mode==2){color(3);printf("\t\t现在是闯关模式,不能设置地图大小!!!返回上一级中......");Sleep(1500);
  			system("CLS");menu1();gameinterface();

		}system("CLS");color(3);printf("\t\t提示:建议地图高,宽请设置  10  以上\n");
			color(4);printf("\t\t请输入地图的宽(enter确认):");scanf("%d",&map_wide);
			color(5);printf("\t\t请输入地图的高(enter确认):");scanf("%d",&map_high);
			map_high+=2;map_wide+=2;
			mapmap=2;
			color(14);
  			 printf("\n\t\t设置成功!!!");
   			Sleep(1500);
  			system("CLS");
 			menu1();
  			gameset();break;
  		case 53: system("CLS");menu1();gameinterface();break;
  		case 54: system("CLS");main();break;
  		default :printf("\t\t输入错误,请重新输入!!!\n");goto flag;
	}

}
void mapcolor()//地图颜色
{
	int n;
	 color(1);
	printf("\t     ---------------------------------------------\n");
	printf("\t     |                                           |\n");
    printf("\t     |                                           |\n");
	printf("\t     |                 地图颜色                  |\n");
	printf("\t     |                                           |\n");
	printf("\t     |                4.开始设置                 |\n");
	printf("\t     |                5.返回上一级               |\n");
	printf("\t     |                6.返回菜单                 |\n");
	printf("\t     ---------------------------------------------\n");
	 flag2:n=getch();
	switch(n)
	{
		case 52:system("CLS");colorselect();
			  color(8);
			  printf("\t\t请输入选项(enter确认):");
			 flag: scanf("%d",&nn);
			   if(nn>17||nn<1)
			  {
			  	printf("\t\t设置失败,请重新输入:");
			  	goto flag;
			  }
			  --nn;
			  color(14);
			   printf("\n\t\t设置成功!!!");
			   Sleep(1500);
			  system("CLS");
			  menu1();
			 gameinterface();
		case 53: system("CLS");menu1();gameinterface();break;
  		case 54: system("CLS");main();break;
  		default :printf("\t\t输入错误,请重新输入!!!\n");goto flag2;
	}

}

void main()
{
    system("mode con cols=70 lines=39");//控制台高70 长39 
    //settextstyle(DEFAULT_FONT,1,20); 
    menu1();
	menu2();
}

结束语

所有的结局,都是新的开始
学习记录 end~

用windows api 做的贪吃蛇 #include #include"resource.h" #include"Node.h" #include #include TCHAR szAppname[] = TEXT("Snack_eat"); #define SIDE (x_Client/80) #define x_Client 800 #define y_Client 800 #define X_MAX 800-20-SIDE //点x的范围 #define Y_MAX 800-60-SIDE //点y的范围 #define TIME_ID 1 #define SECOND 100 #define NUM_POINT 10 //点的总个数 #define ADD_SCORE 10 LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { HWND hwnd; //窗口句柄 MSG msg; //消息 WNDCLASS wndclass; //窗口类 HACCEL hAccel;//加速键句柄 wndclass.style = CS_HREDRAW | CS_VREDRAW; //窗口的水平和垂直尺寸被改变时,窗口被重绘 wndclass.lpfnWndProc = WndProc; //窗口过程为WndProc函数 wndclass.cbClsExtra = 0; //预留额外空间 wndclass.cbWndExtra = 0; //预留额外空间 wndclass.hInstance = hInstance; //应用程序的实例句柄,WinMain的第一个参数 wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION); //设置图标 wndclass.hCursor = LoadCursor(NULL, IDC_ARROW); //载入预定义的鼠标指针 wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); //设置画刷 wndclass.lpszMenuName = szAppname; //设置菜单 wndclass.lpszClassName = szAppname; //设置窗口类的名字 if (!RegisterClass(&wndclass))//注册窗口类 { MessageBox(NULL, TEXT("这个程序需要windows NT!"), szAppname, MB_ICONERROR); return 0; } hwnd = CreateWindow(szAppname, TEXT("Snack_eat"),//CreateWindow函数调用时,WndProc将受到WM_CREATE WS_OVERLAPPEDWINDOW&~WS_THICKFRAME& ~WS_MAXIMIZEBOX,//普通的层叠窗口&禁止改变大小&禁止最大化 CW_USEDEFAULT, //初始x坐标(默认) CW_USEDEFAULT, //初始y坐标 x_Client, //初始x方向尺寸 770 y_Client, //初始y方向尺寸 750 NULL, //父窗口句柄 NULL, //窗口菜单句柄 hInstance, //程序实例句柄 WinMain函数中第二个参数 NULL); //创建参数 ShowWindow(hwnd, iCmdShow);//显示窗口,iCmdShow是WinMain的第四个参数,决定窗口在屏幕中的初始化显示形式,例:SW_SHOWNORMAL表示正常显示 UpdateWindow(hwnd);//使窗口客户区重绘,通过向WndProc发送一条WM_PAINT消息而完成的 hAccel = LoadAccelerators(hInstance, szAppname);//加载加速键 while (GetMessage(&msg, NULL, 0, 0)) { if (!TranslateAccelerator(hwnd, hAccel, &msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } }/* while (GetMessage(&msg, NULL, 0, 0))//GetMessage函数从消息队列中得到消息,填充msg。如果msg.message等于WM_QUIT,返回0,否则返回非0 { TranslateMessage(&msg);//将msg返回给windows已进行某些键盘消息的转换 DispatchMessage(&msg);//将msg再次返回给windows }*/ return msg.wParam;//msg.wParam是PostQuitMessage函数的参数值,通常是0 } ...
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜菜bu菜

夏日炎炎 有你超甜

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值