项目说明
学习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~