赞
踩
学习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~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。