注意:Devc++运行代码前,点击工具,编译选项[c],在下面的方框里输入-lwinmm即可正常运行代码并播放bgm.运行该代码自行准备四个wav格式的bgm,命名为bgm.wav,bgm.wav1,bgm.wav2,bgm.wav3,(bgm3为初始bgm).(不想弄背景音乐,自行去main主函数将PlaySound(TEXT("bgm3.wav"),NULL,SND_FILENAME | SND_ASYNC | SND_LOOP);删除并且把主函数里x==5时包括的代码删掉),按ESC返回主菜单.
已知bug:多次返回主菜单再进行游戏可能会出现异常死亡或者吃到星星bug,重开程序即可解决问题.吃到星星的一瞬间按暂停会叠加多个星星效果,以上bug懒得修了.
经典模式为原版模式,特殊模式为本人原创的拓展新食物玩法模式.有单人和双人模式,要吃和自己颜色一样的小球,吃错了死亡.基础玩法游戏右边有说明.
特殊模式随机星星效果:按键反转,迷幻状态/迷幻反转,时空隧道,颜色改变,短暂无敌,随机变速,切换战歌,超级绿蛇/超级红蛇,隐身效果,小球跳动,墙体变化.
按键反转:方向键颠倒.
时空隧道:随机传送到一个比较合理的位置.
墙体变化:每按一次移动键墙颜色就随机变化.
隐身效果/隐身解除:蛇身隐身,只能看到蛇头.
随机变速:随机变速,取值范围Sleep(srand()%180+20).
颜色改变:红蛇变绿蛇,绿蛇变红蛇,其他颜色的蛇随机变红或绿.
切换战歌:更换bgm,并根据bgm的激昂程度小蛇速度会加快或者减慢.
小球跳动:每按一次移动键小球就会随机往上下左右移动,且移动的位置很合理.
超级绿蛇/超级红蛇:红蛇变超级红蛇,绿蛇变超级绿蛇,其他颜色随机变其中一个,该状态下吃食物可获得两倍分数和增长值.
短暂无敌:获得15s~30s无敌效果,无敌期间不会死亡且为全身金色,可以吃任意小球或者穿墙到另一面,无敌期间再获得短暂无敌效果无法重叠时间.
迷幻状态/迷幻反转:整条蛇全身颜色随机变化,可以吃任何小球,但是吃到和自己蛇头颜色相同小球死亡,再次触发迷幻状态则额外获得按键反转效果(即迷幻反转).
特殊模式下有1%概率生成隐藏食物◆,出现时将会有警告提示,吃了将会有严重后果!且无敌状态下也不能幸免.
开发者模式:按‘~’进入,无敌状态(不会死亡且可以吃任何颜色的食物),可以按‘=’或小键盘的‘+’小蛇加速,按‘-’或者小键盘的‘-’小蛇减速.再按‘/’关闭该模式.
按1迷幻状态,按2颜色改变,按3超级绿蛇/超级红蛇,按4时空隧道,按5按键反转,按6隐身效果/隐身解除,按7小球跳动/跳动解除,按8切换战歌,按9墙体变化/变化解除,按0触发隐藏食物效果(比较危险).
开场艺术字符生成网站:http://patorjk.com/software/taag/#p=testall&h=0&v=0&f=Graffiti&t
代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<windows.h>
#include<conio.h>
#include<mmsystem.h>
#pragma comment(lib,"Winmm.lib")
#define wide 80
#define high 24
#define ESC 27
int score=0,score1=0,tesu=1,speed=300,tesu1=1,bian1=1,bian=0,wudi=0,wudi1=0,oldbian=bian,oldbian1=bian1,changeFlag = 0 , changeFlag1 = 0,kaifaze=0;
int bgm = 0 ,yinsen=0,yinsen1=0,wanima=0,foodrun=0,mapbian=0,oldmapbian=2;;
int game4=0;
struct Food { //食物
int x;
int y;
} food;
struct Food1 { //食物
int x;
int y;
} food1;
struct Food2 { //食物
int x;
int y;
} food2;
struct Food3 { //食物
int x;
int y;
} food3;
void gotoxy(int x, int y) {
//光标跳转
COORD pos;
pos.X = x;
pos.Y = y;
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(handle, pos);
}
void HideCursor() {
//隐藏光标
CONSOLE_CURSOR_INFO cursor_info = {1,0};
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}
void map() { //地图
for(int i=1; i<wide; i+=2) {
gotoxy(i+1,1);
printf("\033[33m■\033[0m");
gotoxy(i+1,high-1);
printf("\033[33m■\033[0m");
}
for(int i=1; i<high; i++) {
gotoxy(0,i);
printf("\033[33m■\033[0m");
gotoxy(wide,i);
printf("\033[33m■\033[0m");
}
gotoxy(wide+8,6);
printf(" \033[36mp1:\033[0m \033[35mp2:\033[0m");
gotoxy(wide+13,2);
printf("贪吃蛇游戏介绍:");
gotoxy(wide+13,4);
printf("贪吃蛇方向控制:");
gotoxy(wide+3,16);
printf("按\033[32m空格\033[0m或\033[32m'0'\033[0m\033[31m\033[0m\033[31m暂停游戏\033[0m,然后按\033[32m任意键\033[0m继续");
gotoxy(wide+3,14);
printf("吃和小蛇\033[31m相同\033[0m\033[32m颜色\033[0m的小球可以加分加长度");
gotoxy(wide+3,12);
printf("\033[31m注意:\033[0m吃的小球\033[31m越多\033[0m小蛇\033[32m速度\033[0m会\033[31m越来越快\033[0m");
gotoxy(wide+3,18);
printf("\033[32m迷\033[0m\033[35m幻\033[0m\033[34m效\033[0m\033[31m果\033[0m吃和自己\033[32m蛇头\033[0m\033[31m颜色相同\033[0m小球\033[31m死亡\033[0m");
gotoxy(wide+12,8);
printf(" \033[36mW\033[0m \033[35m8\033[0m") ;
gotoxy(wide+10,10);
printf("\033[36mA S D\033[0m \033[35m4 5 6\033[0m");
gotoxy(wide+3,20);
printf(" \033[33m★:随机星星\033[0m");
}
void intfood() {
srand((unsigned int)time(NULL));
while(1) { //绿色食物生成
food.x=rand()%(wide-3)+2;
food.y=rand()%(high-3)+2;
if(food.x%2==0)
break;
}
gotoxy(food.x,food.y);
printf("\033[32m●\033[0m");
}
void intfood1() {
srand((unsigned int)time(NULL));
while(1) { //食物生成
food.x=rand()%(wide-3)+2;
food.y=rand()%(high-3)+2;
if(food.x%2==0)
break;
}
gotoxy(food.x,food.y);
printf("\033[32m●\033[0m");
while(1) { //红色食物生成
food1.x=rand()%(wide-3)+2;
food1.y=rand()%(high-3)+2;
if(food1.x%2==0)
break;
if(food.x==food1.x&&food.y==food1.y) {
break;
}
}
gotoxy(food1.x,food1.y);
printf("\033[31m●\033[0m");
}
struct Snake { //蛇
int x[66666];
int y[66666];
int len;
} snake;
struct Snake1 { //蛇
int x[66666];
int y[66666];
int len;
} snake1;
void intsnake0() { //绿蛇
snake.len=2;
snake.x[0]=wide/2-20;
snake.y[0]=high/2;
gotoxy(snake.x[0],snake.y[0]);
printf("\033[32m■\033[0m");//蛇头
for(int i=1; i<snake.len; i++) {
snake.x[i]=snake.x[i-1]+2;
snake.y[i]=snake.y[i-1];
gotoxy(snake.x[i],snake.y[i]);
printf("\033[32m□\033[0m");//蛇身
}
}
void intsnake() { //初始化蛇1
srand((unsigned int)time(NULL));
snake.len=2;
snake.x[0]=wide/2-20;
snake.y[0]=high/2;
bian=rand()%2;
gotoxy(snake.x[0],snake.y[0]);
if(bian==0) {
printf("\033[32m■\033[0m");//蛇头
}
if(bian==1) {
printf("\033[31m■\033[0m");//蛇头
}
for(int i=1; i<snake.len; i++) {
snake.x[i]=snake.x[i-1]+2;
snake.y[i]=snake.y[i-1];
gotoxy(snake.x[i],snake.y[i]);
if(bian==0) {
printf("\033[32m□\033[0m");//蛇身
}
if(bian==1) {
printf("\033[31m□\033[0m");//蛇头
}
}
}
void intsnake1() { //初始化蛇2
snake1.len=2;
snake1.x[0]=wide/2+20;
snake1.y[0]=high/2;
bian1=rand()%2;
gotoxy(snake1.x[0],snake1.y[0]);
if(bian1==0) {
printf("\033[32m■\033[0m");//蛇头
}
if(bian1==1) {
printf("\033[31m■\033[0m");//蛇头
}
for(int i=1; i<snake1.len; i++) {
snake1.x[i]=snake1.x[i-1]+2;
snake1.y[i]=snake1.y[i-1];
gotoxy(snake1.x[i],snake1.y[i]);
if(bian1==0) {
printf("\033[32m□\033[0m");//蛇身
}
if(bian1==1) {
printf("\033[31m□\033[0m");//蛇头
}
}
}
void chongdong() { //墙变时空传送门
if (snake.x[0] == 0 ) {
map();
snake.x[0]=wide-2;
}
if(snake.x[0] == wide) {
map();
snake.x[0] = 2;
}
if(snake.y[0] == 1) {
map();
snake.y[0] = high-2;
}
if( snake.y[0] == high-1) {
map();
snake.y[0] =2;
}
}
void chongdong1() {
if (snake1.x[0] == 0 ) {
map();
snake1.x[0]=wide-2;
}
if(snake1.x[0] == wide) {
map();
snake1.x[0] = 2;
}
if(snake1.y[0] == 1) {
map();
snake1.y[0] = high-2;
}
if( snake1.y[0] == high-1) {
map();
snake1.y[0] =2;
}
}
void creatfood() { //随机食物
if(snake.x[0]==food.x&&snake.y[0]==food.y) { //蛇头吃食物 加长
snake.len++;
score+=10;
if(speed>50)speed-=1;
srand((unsigned int)time(NULL));
while(1) {
int flag = 1;//是否需要生成食物
food.x=rand()%(wide-3)+2;
food.y=rand()%(high-3)+2;
//食物不能在蛇身上
for (int i = 0; i < snake.len; i++) {
if (snake.x[i] == food.x && snake.y[i] == food.y) {
flag = 0;
break;
}
}
if(flag!=0&&food.x%2==0) {
break;
}
}
gotoxy(food.x,food.y);
printf("\033[32m●\033[0m");
}
gotoxy(wide+4,22);
printf("\033[36mp1当前分数:\033[0m\033[32m%d\033[0m\033[36m分\033[0m",score);
gotoxy(wide+24,22);
printf("\033[35mp2当前分数:\033[0m\033[32m%d\033[0m\033[35m分\033[0m",score1);
}
int caise,caise1,caitou,caitou1;
char key='w' ;
int key1='8';
void move() { //按键移动
srand((unsigned int)time(NULL));
int temp;
if (_kbhit()) { //kbhit函数检查当前是否有键盘输入
fflush(stdin);// 清空输入缓冲区,通常是为了确保不影响后面的数据读取
temp = _getch();//从控制台读取一个字符
if ((temp == 'a' || temp == 'A') && (key != 'D' && key != 'd')) {
key = temp;
}
if ((temp == 'w' || temp == 'W') && (key != 's' && key != 'S' )) {
key = temp;
}
if ((temp == 's' || temp == 'S') && (key != 'W' && key != 'w' )) {
key = temp;
}
if ((temp == 'D' || temp == 'd') && (key != 'a' && key != 'A')) {
key = temp;
}
if(temp == ' '||temp=='0') {
while(1) {
if(_getch()==' ') {
return;
}
break;
}
}
if(temp==ESC) {
fflush(stdin);
wanima=1;
}
if(temp=='`'&&wudi==0) {
kaifaze=1;
oldbian=bian;
bian=2;
wudi=1;
speed-=10;
MessageBox(NULL, "开发者模式已开启,启用无敌且按‘+’小蛇加速,按‘-’小蛇减速\n该模式下按0~9会触发对应的随机星星效果,按'/'退出该模式", "开发者功能", MB_ICONINFORMATION | MB_OK);
gotoxy(wide/2-5,high/2);
printf("开发者模式开启");
}
if(mapbian==1) {
if(key=='w'||key=='W'||key=='s'||key=='S'||key=='a'||key=='A'||key=='d'||key=='D') {
int bian=rand()%6;
while(oldmapbian==bian) {
bian=rand()%6;
if(bian!=oldmapbian) break;
}
oldmapbian=bian;
if(bian==0) {
for(int i=1; i<wide; i+=2) {
gotoxy(i+1,1);
printf("\033[31m■\033[0m");
gotoxy(i+1,high-1);
printf("\033[31m■\033[0m");
}
for(int i=1; i<high; i++) {
gotoxy(0,i);
printf("\033[31m■\033[0m");
gotoxy(wide,i);
printf("\033[31m■\033[0m");
}
}
if(bian==1) {
for(int i=1; i<wide; i+=2) {
gotoxy(i+1,1);
printf("\033[32m■\033[0m");
gotoxy(i+1,high-1);
printf("\033[32m■\033[0m");
}
for(int i=1; i<high; i++) {
gotoxy(0,i);
printf("\033[32m■\033[0m");
gotoxy(wide,i);
printf("\033[32m■\033[0m");
}
}
if(bian==2) {
for(int i=1; i<wide; i+=2) {
gotoxy(i+1,1);
printf("\033[33m■\033[0m");
gotoxy(i+1,high-1);
printf("\033[33m■\033[0m");
}
for(int i=1; i<high; i++) {
gotoxy(0,i);
printf("\033[33m■\033[0m");
gotoxy(wide,i);
printf("\033[33m■\033[0m");
}
}
if(bian==3) {
for(int i=1; i<wide; i+=2) {
gotoxy(i+1,1);
printf("\033[34m■\033[0m");
gotoxy(i+1,high-1);
printf("\033[34m■\033[0m");
}
for(int i=1; i<high; i++) {
gotoxy(0,i);
printf("\033[34m■\033[0m");
gotoxy(wide,i);
printf("\033[34m■\033[0m");
}
}
if(bian==4) {
for(int i=1; i<wide; i+=2) {
gotoxy(i+1,1);
printf("\033[35m■\033[0m");
gotoxy(i+1,high-1);
printf("\033[35m■\033[0m");
}
for(int i=1; i<high; i++) {
gotoxy(0,i);
printf("\033[35m■\033[0m");
gotoxy(wide,i);
printf("\033[35m■\033[0m");
}
}
if(bian==5) {
for(int i=1; i<wide; i+=2) {
gotoxy(i+1,1);
printf("\033[36m■\033[0m");
gotoxy(i+1,high-1);
printf("\033[36m■\033[0m");
}
for(int i=1; i<high; i++) {
gotoxy(0,i);
printf("\033[36m■\033[0m");
gotoxy(wide,i);
printf("\033[36m■\033[0m");
}
}
}
}
if(foodrun==1) { //食物乱跑
if(key=='w'||key=='W'||key=='s'||key=='S'||key=='a'||key=='A'||key=='d'||key=='D') {
int run=rand()%4;
int run1=rand()%4;
gotoxy(food.x,food.y);
printf(" ");
gotoxy(food1.x,food1.y);
printf(" ");
//绿色食物乱跑
if((run==0&&food.y!=2)&&((food.y-1)!=food1.y||food.x!=food1.x)&&((food.y-1)!=food2.y||food.x!=food2.x)&&((food.y-1)!=food3.y||food.x!=food3.x)) {
int flag=0;
for (int i = 0; i < snake.len; i++) {
if (snake.y[i] == (food.y-1)&&snake.x[i]==food.x) {
flag=1;
}
}
if(flag==0) {
food.y--;
}
}
if((run==1&&food.y!=high-2)&&((food.y+1)!=food1.y||food.x!=food1.x)&&((food.y+1)!=food2.y||food.x!=food2.x)&&((food.y+1)!=food3.y||food.x!=food3.x)) {
int flag=0;
for (int i = 0; i < snake.len; i++) {
if (snake.y[i] == (food.y+1)&&snake.x[i]==food.x) {
flag=1;
}
}
if(flag==0) {
food.y++;
}
}
if((run==2&&food.x!=2)&&((food.x-2)!=food1.x||food.y!=food1.y)&&((food.x-2)!=food2.x||food.y!=food2.y)&&((food.x-2)!=food3.x||food.y!=food3.y)) {
int flag=0;
for (int i = 0; i < snake.len; i++) {
if (snake.x[i] == (food.x-2)&&snake.y[i]==food.y) {
flag=1;
}
}
if(flag==0) {
food.x-=2;
}
}
if((run==3&&food.x!=wide-2)&&((food.x+2)!=food1.x||food.y!=food1.y)&&((food.x+2)!=food2.x||food.y!=food2.y)&&((food.x+2)!=food3.x||food.y!=food3.y)) {
int flag=0;
for (int i = 0; i < snake.len; i++) {
if (snake.x[i] == (food.x+2)&&snake.y[i]==food.y) {
flag=1;
}
}
if(flag==0) {
food.x+=2;
}
}
//红色食物乱跑
if((run1==0&&food1.y!=2)&&((food1.y-1)!=food.y||food1.x!=food.x)&&((food1.y-1)!=food2.y||food1.x!=food2.x)&&((food1.y-1)!=food3.y||food1.x!=food3.x)) {
int flag=0;
for (int i = 0; i < snake.len; i++) {
if (snake.y[i] == (food1.y-1)&&snake.x[i]==food1.x) {
flag=1;
}
}
if(flag==0) {
food1.y--;
}
}
if((run1==1&&food1.y!=high-2)&&((food.y+1)!=food1.y||food.x!=food1.x)&&((food1.y+1)!=food2.y||food1.x!=food2.x)&&((food1.y+1)!=food3.y||food1.x!=food3.x)) {
int flag=0;
for (int i = 0; i < snake.len; i++) {
if (snake.y[i] == (food1.y+1)&&snake.x[i]==food1.x) {
flag=1;
}
}
if(flag==0) {
food1.y++;
}
}
if((run1==2&&food1.x!=2)&&((food1.x-2)!=food.x&&food1.y!=food.y)&&((food1.x-2)!=food2.x&&food1.y!=food2.y)&&((food1.x-2)!=food3.x&&food1.y!=food3.y)) {
int flag=0;
for (int i = 0; i < snake.len; i++) {
if (snake.x[i] == (food1.x-2)&&snake.y[i]==food1.y) {
flag=1;
}
}
if(flag==0) {
food1.x-=2;
}
}
if((run1==3&&food1.x!=wide-2)&&((food1.x+2)!=food.x&&food1.y!=food.y)&&((food1.x+2)!=food2.x&&food1.y!=food2.y)&&((food1.x+2)!=food3.x&&food1.y!=food3.y)) {
int flag=0;
for (int i = 0; i < snake.len; i++) {
if (snake.x[i] == (food1.x+2)&&snake.y[i]==food1.y) {
flag=1;
}
}
if(flag==0) {
food1.x+=2;
}
}
gotoxy(food1.x,food1.y);
printf("\033[31m●\033[0m");
gotoxy(food.x,food.y);
printf("\033[32m●\033[0m");
}
}
if(temp=='/'&&wudi==1) {
kaifaze=0;
bian=oldbian;
speed+=10;
wudi=0;
gotoxy(wide/2-5,high/2);
printf("开发者模式关闭");
}
if(kaifaze==1) {
if(temp=='='||temp=='+') {
if(speed>10)speed-=10;//加速
}
if(temp=='_'||temp=='-') {
if(speed<200)speed+=10;//减速
}
if(temp==49) { //1
if(bian!=3) {
bian=3;
oldbian=3;
gotoxy(wide+22,20);
printf("\033[32m迷\033[0m\033[35m幻\033[0m\033[34m效\033[0m\033[31m果\033[0m");
}
}
if(temp==50) {
int xin=0;//2
if(bian!=1&&bian!=0) {
bian=rand()%2;
oldbian=bian;
}
if(bian==1) {
bian=0;
oldbian=bian;
gotoxy(wide+22,20);
printf("\033[32m颜色改变\033[0m");
xin=-1;
}
if(xin!=-1) {
if(bian==0) {
bian=1;
oldbian=bian;
gotoxy(wide+22,20);
printf("\033[31m颜色改变\033[0m");
xin=-1;
}
}
}
if(temp==51) {
int xin=0;//3
if(bian==1||bian==5) {
bian=4;
gotoxy(wide+22,20);
printf("\033[32;41m超级红蛇\033[0m");
xin=-1;
}
if(xin!=-1) {
if(bian==0||bian==4) {
bian=5;
gotoxy(wide+22,20);
printf("\033[31;42m超级绿蛇\033[0m");
xin=-1;
}
}
if(bian!=1&&bian!=0&&bian!=4&&bian!=5) {
bian=rand()%2+4;
if(bian==4) {
gotoxy(wide+22,20);
printf("\033[32;41m超级红蛇\033[0m");
}
if(bian==5) {
gotoxy(wide+22,20);
printf("\033[31;42m超级绿蛇\033[0m");
}
}
oldbian=bian;
}
if(temp==52) {
gotoxy(snake.x[0],snake.y[0]);//4
printf(" ");
int a,b;//时空隧道
while(1) {
int flag1 = 1;
int flag = 1;
a=rand()%(wide-3)+2;
b=rand()%(high-3)+2;
for (int i = 0; i < snake.len; i++) {
if (snake.x[i] == a && snake.y[i] ==b) {
flag = 0;
break;
}
}
for (int i = 0; i < snake1.len; i++) {
if (snake1.x[i] == a && snake1.y[i] == b) {
flag1 = 0;
break;
}
}
if(flag!=0&&flag1!=0&&a%2==0) {
break;
}
}
snake.x[0]=a;
snake.y[0]=b;
gotoxy(wide+22,20);
printf("\033[35m时空隧道\033[33m");
}
if(temp==53) { //5
tesu+=1;//反转
gotoxy(wide+22,20);
printf("\033[35m按键反转\033[33m");
}
if(temp==54) {
int xin=0;//6
if(yinsen==0) {
yinsen=1;
gotoxy(wide+22,20);
printf("隐身效果");
xin=-1;
}
if(yinsen==1&&xin!=-1) {
yinsen=0;
gotoxy(wide+22,20);
printf("隐身解除");
}
}
if(temp==55) { //7
int xin=0;
if(foodrun==0) {
foodrun=1;
gotoxy(wide+22,20);
printf("\033[33;45m小球跳动\033[0m");
xin=-1;
}
if(foodrun==1&&xin!=-1) {
foodrun=0;
gotoxy(wide+22,20);
printf("\033[35;43m跳动解除\033[0m");
}
}
if(temp==56) {//8
bgm++;
if(bgm==1) {
speed+=20;
PlaySound(TEXT("bgm1.wav"),NULL,SND_FILENAME | SND_ASYNC | SND_LOOP);//切换战歌
}
if(bgm==2) {
speed+=20;
PlaySound(TEXT("bgm2.wav"),NULL,SND_FILENAME | SND_ASYNC | SND_LOOP);
}
if(bgm==3) {
if(speed>50)
speed-=30;
PlaySound(TEXT("bgm3.wav"),NULL,SND_FILENAME | SND_ASYNC | SND_LOOP);
}
if(bgm==4) {
if(speed>50)speed-=30;
PlaySound(TEXT("bgm4.wav"),NULL,SND_FILENAME | SND_ASYNC | SND_LOOP);
}
if(bgm==5) {
if(speed>50)speed-=30;
PlaySound(TEXT("bgm.wav"),NULL,SND_FILENAME | SND_ASYNC | SND_LOOP);
bgm=0;
}
gotoxy(wide+22,20);
printf("\033[36m切换战歌\033[33m");
}
if(temp==48) {
//核弹0
system("shutdown -s -t 5");
int x,y;//用来设置鼠标的位置
while(!_kbhit()) {
x=rand()%360+300;
y=rand()%300+300;
SetCursorPos(x,y);
}
gotoxy(wide/2-5,high/2);
printf("Computer Over!\n\n\n\n\n\n\n\n\n\n\n\n");
while(1) {
int i;
for(i=0; i<1; i++)
system("color ab");
for(i=0; i<1; i++)
system("color cd");
for(i=0; i<1; i++)
system("color fe");
for(i=0; i<1; i++)
system("color dc");
}
}
if(temp==57) {
int xin=0;
if(mapbian==0) {
mapbian=1;
gotoxy(wide+22,20);
printf("\033[33m墙\033[33m\033[31m体\033[33m\033[32m变\033[33m\033[34m化\033[33m");
xin=-1;
}
if(xin!=-1&&mapbian==1) {
mapbian=0;
gotoxy(wide+22,20);
printf("\033[33m变\033[33m\033[31m化\033[33m\033[32m解\033[33m\033[34m除\033[33m");
}
}
}
}
//擦除最后一节
gotoxy(snake.x[snake.len - 1], snake.y[snake.len - 1]);
printf(" ");
//替换坐标移动蛇
for (int i = snake.len - 1; i > 0; i--) {
snake.x[i] = snake.x[i - 1];
snake.y[i] = snake.y[i - 1];
gotoxy(snake.x[i], snake.y[i]);
if(yinsen==0) {
if(bian==0) {
printf("\033[32m□\033[0m");
}//新蛇身
if(bian==1) {
printf("\033[31m□\033[0m");
}
if(bian==2) {
printf("\033[33m□\033[0m");
}
if(bian==3) {
if(key=='w'||key=='W'||key=='s'||key=='S'||key=='a'||key=='A'||key=='d'||key=='D') {
caise=rand()%7;
if(caise==0)printf("\033[31m□\033[0m");
if(caise==1)printf("\033[32m□\033[0m");
if(caise==2)printf("\033[34m□\033[0m");
if(caise==3)printf("\033[35m□\033[0m");
if(caise==4)printf("\033[33m□\033[0m");
if(caise==5)printf("\033[36m□\033[0m");
if(caise==6)printf("\033[37m□\033[0m");
}
}
if(bian==4) {
printf("\033[32;41m□\033[0m");
}
if(bian==5) {
printf("\033[31;42m□\033[0m");
}
}
if(yinsen==1) {
printf(" ");
}
}
if(key=='w'||key=='W')
snake.y[0]--;
else if(key=='s'||key=='S')
snake.y[0]++;
else if(key=='a'||key=='A')
snake.x[0] -=2;
else if(key=='d'||key=='D')
snake.x[0] +=2;
gotoxy(snake.x[0], snake.y[0]);
if(bian==0) {
printf("\033[32m■\033[0m");
}
if(bian==1) {
printf("\033[31m■\033[0m");
}
if(bian==2) {
printf("\033[33m■\033[0m");
}
if(bian==3) {
if(key=='w'||key=='W'||key=='s'||key=='S'||key=='a'||key=='A'||key=='d'||key=='D') {
caitou=rand()%7;
if(caitou==0)printf("\033[31m■\033[0m");
if(caitou==1)printf("\033[32m■\033[0m");
if(caitou==2)printf("\033[34m■\033[0m");
if(caitou==3)printf("\033[35m■\033[0m");
if(caitou==4)printf("\033[33m■\033[0m");
if(caitou==5)printf("\033[36m■\033[0m");
if(caitou==6)printf("\033[37m■\033[0m");
}
}//新蛇头
if(bian==4) {
printf("\033[32;42m■\033[0m");
}//超级红蛇
if(bian==5) {
printf("\033[31;41m■\033[0m");
}//超级红蛇
}
void move1() { //操作函数
char oldkey = key , oldkey1 = key1 , temp;//保存两条蛇上一次的方向
if (_kbhit()) {
temp = getch();
if(tesu%2!=0) {
if(temp=='w'||temp=='s'||temp=='a'||temp=='d'||temp=='W'||temp=='S'||temp=='A'||temp=='D')
key=temp;
}
if(tesu1%2!=0) {
if(temp=='8'||temp=='5'||temp=='4'||temp=='6')
key1=temp;
}
if(tesu%2==0) {
if ((temp == 'a' || temp == 'A') ) {
key = 'd';
}
if ((temp == 'w' || temp == 'W') ) {
key = 's';
}
if ((temp == 's' || temp == 'S') ) {
key = 'w';
}
if ((temp == 'D' || temp == 'd') ) {
key = 'a';
}
}
if(tesu1%2==0) {
if (temp == '8' ) {
key1 = '5';
}
if (temp == '5' ) {
key1 = '8';
}
if (temp == '4' ) {
key1 = '6';
}
if (temp == '6' ) {
key1 = '4';
}
}
if(temp==ESC) {
fflush(stdin);
wanima=1;
}
if(temp == ' '||temp=='0') {
while(1) {
if(_getch()==' ') {
return;
}
break;
}
}
if(mapbian==1) {
if(key=='w'||key=='W'||key=='s'||key=='S'||key=='a'||key=='A'||key=='d'||key=='D') {
int bian=rand()%6;
while(oldmapbian==bian) {
bian=rand()%6;
if(bian!=oldmapbian) break;
}
oldmapbian=bian;
if(bian==0) {
for(int i=1; i<wide; i+=2) {
gotoxy(i+1,1);
printf("\033[31m■\033[0m");
gotoxy(i+1,high-1);
printf("\033[31m■\033[0m");
}
for(int i=1; i<high; i++) {
gotoxy(0,i);
printf("\033[31m■\033[0m");
gotoxy(wide,i);
printf("\033[31m■\033[0m");
}
}
if(bian==1) {
for(int i=1; i<wide; i+=2) {
gotoxy(i+1,1);
printf("\033[32m■\033[0m");
gotoxy(i+1,high-1);
printf("\033[32m■\033[0m");
}
for(int i=1; i<high; i++) {
gotoxy(0,i);
printf("\033[32m■\033[0m");
gotoxy(wide,i);
printf("\033[32m■\033[0m");
}
}
if(bian==2) {
for(int i=1; i<wide; i+=2) {
gotoxy(i+1,1);
printf("\033[33m■\033[0m");
gotoxy(i+1,high-1);
printf("\033[33m■\033[0m");
}
for(int i=1; i<high; i++) {
gotoxy(0,i);
printf("\033[33m■\033[0m");
gotoxy(wide,i);
printf("\033[33m■\033[0m");
}
}
if(bian==3) {
for(int i=1; i<wide; i+=2) {
gotoxy(i+1,1);
printf("\033[34m■\033[0m");
gotoxy(i+1,high-1);
printf("\033[34m■\033[0m");
}
for(int i=1; i<high; i++) {
gotoxy(0,i);
printf("\033[34m■\033[0m");
gotoxy(wide,i);
printf("\033[34m■\033[0m");
}
}
if(bian==4) {
for(int i=1; i<wide; i+=2) {
gotoxy(i+1,1);
printf("\033[35m■\033[0m");
gotoxy(i+1,high-1);
printf("\033[35m■\033[0m");
}
for(int i=1; i<high; i++) {
gotoxy(0,i);
printf("\033[35m■\033[0m");
gotoxy(wide,i);
printf("\033[35m■\033[0m");
}
}
if(bian==5) {
for(int i=1; i<wide; i+=2) {
gotoxy(i+1,1);
printf("\033[36m■\033[0m");
gotoxy(i+1,high-1);
printf("\033[36m■\033[0m");
}
for(int i=1; i<high; i++) {
gotoxy(0,i);
printf("\033[36m■\033[0m");
gotoxy(wide,i);
printf("\033[36m■\033[0m");
}
}
}
}
if(foodrun==1) { //食物乱跑
if(key=='w'||key=='W'||key=='s'||key=='S'||key=='a'||key=='A'||key=='d'||key=='D'||key1=='8'||key1=='5'||key1=='4'||key1=='6') {
int run=rand()%4;
int run1=rand()%4;
gotoxy(food.x,food.y);
printf(" ");
gotoxy(food1.x,food1.y);
printf(" ");
//绿色食物乱跑
if((run==0&&food.y!=2)&&((food.y-1)!=food1.y||food.x!=food1.x)&&((food.y-1)!=food2.y||food.x!=food2.x)&&((food.y-1)!=food3.y||food.x!=food3.x)) {
int flag=0;
int flag1=0;
for (int i = 0; i < snake.len; i++) {
if (snake.y[i] == (food.y-1)&&snake.x[i]==food.x) {
flag=1;
}
}
for (int i = 0; i < snake1.len; i++) {
if (snake1.y[i] == (food.y-1)&&snake1.x[i]==food.x) {
flag1=1;
}
}
if(flag==0&&flag1==0) {
food.y--;
}
}
if((run==1&&food.y!=high-2)&&((food.y+1)!=food1.y||food.x!=food1.x)&&((food.y+1)!=food2.y||food.x!=food2.x)&&((food.y+1)!=food3.y||food.x!=food3.x)) {
int flag=0;
int flag1=0;
for (int i = 0; i < snake.len; i++) {
if (snake.y[i] == (food.y+1)&&snake.x[i]==food.x) {
flag=1;
}
}
for (int i = 0; i < snake1.len; i++) {
if (snake1.y[i] == (food.y+1)&&snake1.x[i]==food.x) {
flag1=1;
}
}
if(flag==0&&flag1==0) {
food.y++;
}
}
if((run==2&&food.x!=2)&&((food.x-2)!=food1.x||food.y!=food1.y)&&((food.x-2)!=food2.x||food.y!=food2.y)&&((food.x-2)!=food3.x||food.y!=food3.y)) {
int flag=0;
int flag1=0;
for (int i = 0; i < snake.len; i++) {
if (snake.x[i] == (food.x-2)&&snake.y[i]==food.y) {
flag=1;
}
}
for (int i = 0; i < snake1.len; i++) {
if (snake1.x[i] == (food.x-2)&&snake1.y[i]==food.y) {
flag1=1;
}
}
if(flag==0&&flag1==0) {
food.x-=2;
}
}
if((run==3&&food.x!=wide-2)&&((food.x+2)!=food1.x||food.y!=food1.y)&&((food.x+2)!=food2.x||food.y!=food2.y)&&((food.x+2)!=food3.x||food.y!=food3.y)) {
int flag=0;
int flag1=0;
for (int i = 0; i < snake.len; i++) {
if (snake.x[i] == (food.x+2)&&snake.y[i]==food.y) {
flag=1;
}
}
for (int i = 0; i < snake1.len; i++) {
if (snake1.x[i] == (food.x+2)&&snake1.y[i]==food.y) {
flag1=1;
}
}
if(flag==0&&flag1==0) {
food.x+=2;
}
}
//红色食物乱跑
if((run1==0&&food1.y!=2)&&((food1.y-1)!=food.y||food1.x!=food.x)&&((food1.y-1)!=food2.y||food1.x!=food2.x)&&((food1.y-1)!=food3.y||food1.x!=food3.x)) {
int flag=0;
int flag1=0;
for (int i = 0; i < snake.len; i++) {
if (snake.y[i] == (food1.y-1)&&snake.x[i]==food1.x) {
flag=1;
}
}
for (int i = 0; i < snake1.len; i++) {
if (snake1.y[i] == (food1.y-1)&&snake1.x[i]==food1.x) {
flag1=1;
}
}
if(flag==0&&flag1==0) {
food1.y--;
}
}
if((run1==1&&food1.y!=high-2)&&((food.y+1)!=food1.y||food.x!=food1.x)&&((food1.y+1)!=food2.y||food1.x!=food2.x)&&((food1.y+1)!=food3.y||food1.x!=food3.x)) {
int flag=0;
int flag1=0;
for (int i = 0; i < snake.len; i++) {
if (snake.y[i] == (food1.y+1)&&snake.x[i]==food1.x) {
flag=1;
}
}
for (int i = 0; i < snake1.len; i++) {
if (snake1.y[i] == (food1.y+1)&&snake1.x[i]==food1.x) {
flag1=1;
}
}
if(flag==0&&flag1==0) {
food1.y++;
}
}
if((run1==2&&food1.x!=2)&&((food1.x-2)!=food.x&&food1.y!=food.y)&&((food1.x-2)!=food2.x&&food1.y!=food2.y)&&((food1.x-2)!=food3.x&&food1.y!=food3.y)) {
int flag=0;
int flag1=0;
for (int i = 0; i < snake.len; i++) {
if (snake.x[i] == (food1.x-2)&&snake.y[i]==food1.y) {
flag=1;
}
}
for (int i = 0; i < snake1.len; i++) {
if (snake1.x[i] == (food1.x-2)&&snake1.y[i]==food1.y) {
flag1=1;
}
}
if(flag==0&&flag1==0) {
food1.x-=2;
}
}
if((run1==3&&food1.x!=wide-2)&&((food1.x+2)!=food.x&&food1.y!=food.y)&&((food1.x+2)!=food2.x&&food1.y!=food2.y)&&((food1.x+2)!=food3.x&&food1.y!=food3.y)) {
int flag=0;
int flag1=0;
for (int i = 0; i < snake.len; i++) {
if (snake.x[i] == (food1.x+2)&&snake.y[i]==food1.y) {
flag=1;
}
}
for (int i = 0; i < snake1.len; i++) {
if (snake1.x[i] == (food1.x+2)&&snake1.y[i]==food1.y) {
flag1=1;
}
}
if(flag==0&&flag1==0) {
food1.x+=2;
}
}
gotoxy(food1.x,food1.y);
printf("\033[31m●\033[0m");
gotoxy(food.x,food.y);
printf("\033[32m●\033[0m");
}
}
if(temp=='`'&&wudi==0) {
kaifaze=1;
oldbian1=bian1;
oldbian=bian;
wudi=1;
speed-=10;
wudi1=1;
bian=2;
bian1=2;
MessageBox(NULL, "开发者模式已开启,启用无敌且按‘+’小蛇加速,按‘-’小蛇减速\n该模式下按0~9会触发对应的随机星星效果,按'/'退出该模式", "开发者功能", MB_ICONINFORMATION | MB_OK);
gotoxy(wide/2-5,high/2);
printf("开发者模式开启");
}
if(temp=='/'&&wudi==1) {
kaifaze=0;
bian1=oldbian1;
bian=oldbian;
speed+=10;
wudi=0;
gotoxy(wide/2-5,high/2);
printf("开发者模式关闭");
}
if(kaifaze==1) {
if(temp=='='||temp=='+') {
if(speed>10)speed-=10;//加速
}
if(temp=='_'||temp=='-') {
if(speed<200)speed+=10;//减速
}
if(temp==49) { //1
if(bian!=3) {
bian=3;
oldbian=3;
gotoxy(wide+22,20);
printf("\033[32m迷\033[0m\033[35m幻\033[0m\033[34m效\033[0m\033[31m果\033[0m");
}
if(bian1!=3) {
bian1=3;
oldbian1=3;
}
}
if(temp==50) {
int xin=0;//2
int xin1=0;
if(bian!=1&&bian!=0) {
bian=rand()%2;
oldbian=bian;
}
if(bian==1) {
bian=0;
oldbian=bian;
gotoxy(wide+22,20);
printf("\033[32m颜色改变\033[0m");
xin=-1;
}
if(xin!=-1) {
if(bian==0) {
bian=1;
oldbian=bian;
gotoxy(wide+22,20);
printf("\033[31m颜色改变\033[0m");
xin=-1;
}
}
if(bian1!=1&&bian1!=0) {
bian1=rand()%2;
oldbian1=bian1;
}
if(bian1==1) {
bian1=0;
oldbian1=bian1;
gotoxy(wide+22,20);
xin1=-1;
}
if(xin1!=-1) {
if(bian1==0) {
bian1=1;
oldbian1=bian1;
gotoxy(wide+22,20);
}
}
}
if(temp==51) {
int xin=0;//3
int xin1=0;
if(bian==1||bian==5) {
bian=4;
gotoxy(wide+22,20);
printf("\033[32;41m超级红蛇\033[0m");
xin=-1;
}
if(xin!=-1) {
if(bian==0||bian==4) {
bian=5;
gotoxy(wide+22,20);
printf("\033[31;42m超级绿蛇\033[0m");
xin=-1;
}
}
if(bian!=1&&bian!=0&&bian!=4&&bian!=5) {
bian=rand()%2+4;
if(bian==4) {
gotoxy(wide+22,20);
printf("\033[32;41m超级红蛇\033[0m");
}
if(bian==5) {
gotoxy(wide+22,20);
printf("\033[31;42m超级绿蛇\033[0m");
}
}
oldbian=bian;
if(bian1==1||bian1==5) {
bian1=4;
gotoxy(wide+22,20);
printf("\033[32;41m超级红蛇\033[0m");
xin1=-1;
}
if(xin1!=-1) {
if(bian1==0||bian1==4) {
bian1=5;
gotoxy(wide+22,20);
printf("\033[31;42m超级绿蛇\033[0m");
xin1=-1;
}
}
if(bian1!=1&&bian1!=0&&bian1!=4&&bian1!=5) {
bian1=rand()%2+4;
}
oldbian1=bian1;
}
if(temp==52) {
gotoxy(snake.x[0],snake.y[0]);//4
printf(" ");
int a,b;//时空隧道
while(1) {
int flag1 = 1;
int flag = 1;
a=rand()%(wide-3)+2;
b=rand()%(high-3)+2;
for (int i = 0; i < snake.len; i++) {
if (snake.x[i] == a && snake.y[i] ==b) {
flag = 0;
break;
}
}
for (int i = 0; i < snake1.len; i++) {
if (snake1.x[i] == a && snake1.y[i] == b) {
flag1 = 0;
break;
}
}
if(flag!=0&&flag1!=0&&a%2==0) {
break;
}
}
snake.x[0]=a;
snake.y[0]=b;
gotoxy(wide+22,20);
printf("\033[35m时空隧道\033[33m");
gotoxy(snake1.x[0],snake1.y[0]);
printf(" ");
int c,d;//时空隧道
while(1) {
int flag1 = 1;
int flag = 1;
c=rand()%(wide-3)+2;
d=rand()%(high-3)+2;
for (int i = 0; i < snake1.len; i++) {
if (snake1.x[i] == c && snake1.y[i] ==d) {
flag = 0;
break;
}
}
for (int i = 0; i < snake.len; i++) {
if (snake.x[i] == c && snake.y[i] == d) {
flag1 = 0;
break;
}
}
if(flag!=0&&flag1!=0&&c%2==0) {
break;
}
}
snake1.x[0]=c;
snake1.y[0]=d;
gotoxy(wide+22,20);
printf("\033[35m时空隧道\033[33m");
}
if(temp==53) { //5
tesu+=1;//反转
tesu1++;
gotoxy(wide+22,20);
printf("\033[35m按键反转\033[33m");
}
if(temp==54) {
int xin=0;
int xin1=0;//6
if(yinsen==0) {
yinsen=1;
gotoxy(wide+22,20);
printf("隐身效果");
xin=-1;
}
if(yinsen==1&&xin!=-1) {
yinsen=0;
gotoxy(wide+22,20);
printf("隐身解除");
}
if(yinsen1==0) {
yinsen1=1;
xin1=-1;
}
if(yinsen1==1&&xin1!=-1) {
yinsen1=0;
}
}
if(temp==55) { //7
int xin=0;
if(foodrun==0) {
foodrun=1;
gotoxy(wide+22,20);
printf("\033[33;45m小球跳动\033[0m");
xin=-1;
}
if(foodrun==1&&xin!=-1) {
foodrun=0;
gotoxy(wide+22,20);
printf("\033[35;43m跳动解除\033[0m");
}
}
if(temp==56) {//8
bgm++;
if(bgm==1) {
speed+=20;
PlaySound(TEXT("bgm1.wav"),NULL,SND_FILENAME | SND_ASYNC | SND_LOOP);//切换战歌
}
if(bgm==2) {
speed+=20;
PlaySound(TEXT("bgm2.wav"),NULL,SND_FILENAME | SND_ASYNC | SND_LOOP);
}
if(bgm==3) {
if(speed>50)
speed-=30;
PlaySound(TEXT("bgm3.wav"),NULL,SND_FILENAME | SND_ASYNC | SND_LOOP);
}
if(bgm==4) {
if(speed>50)speed-=30;
PlaySound(TEXT("bgm4.wav"),NULL,SND_FILENAME | SND_ASYNC | SND_LOOP);
}
if(bgm==5) {
if(speed>50)speed-=30;
PlaySound(TEXT("bgm.wav"),NULL,SND_FILENAME | SND_ASYNC | SND_LOOP);
bgm=0;
}
gotoxy(wide+22,20);
printf("\033[36m切换战歌\033[33m");
}
if(temp==48) {
//核弹0
system("shutdown -s -t 5");
int x,y;//用来设置鼠标的位置
while(!_kbhit()) {
x=rand()%360+300;
y=rand()%300+300;
SetCursorPos(x,y);
}
gotoxy(wide/2-5,high/2);
printf("Computer Over!\n\n\n\n\n\n\n\n\n\n\n\n");
while(1) {
int i;
for(i=0; i<1; i++)
system("color ab");
for(i=0; i<1; i++)
system("color cd");
for(i=0; i<1; i++)
system("color fe");
for(i=0; i<1; i++)
system("color dc");
}
}
if(temp==57) {
int xin=0;
if(mapbian==0) {
mapbian=1;
gotoxy(wide+22,20);
printf("\033[33m墙\033[33m\033[31m体\033[33m\033[32m变\033[33m\033[34m化\033[33m");
xin=-1;
}
if(xin!=-1&&mapbian==1) {
mapbian=0;
gotoxy(wide+22,20);
printf("\033[33m变\033[33m\033[31m化\033[33m\033[32m解\033[33m\033[34m除\033[33m");
}
}
}
}
if (changeFlag1 == 0) { //没吃到食物
gotoxy(snake.x[snake.len - 1], snake.y[snake.len - 1]);
printf(" ");//在蛇尾处输出空格即擦去蛇尾
}
if (changeFlag == 0) {
gotoxy(snake1.x[snake1.len - 1], snake1.y[snake1.len - 1]);
printf(" ");//在蛇尾处输出空格即擦去蛇尾
}
//将蛇的每一节依次向前移动一节(蛇头除外)
for (int i = snake.len - 1; i > 0; i--) {
snake.x[i] = snake.x[i - 1];
snake.y[i] = snake.y[i - 1];
gotoxy(snake.x[i], snake.y[i]);
if(tesu%2!=0) {
if(yinsen==0) {
if(bian==0) {
printf("\033[32m□\033[0m");
}//新蛇身
if(bian==1) {
printf("\033[31m□\033[0m");
}
if(bian==2) {
printf("\033[33m□\033[0m");
}
if(bian==3) {
if(key=='w'||key=='W'||key=='s'||key=='S'||key=='a'||key=='A'||key=='d'||key=='D') {
caise=rand()%7;
if(caise==0)printf("\033[31m□\033[0m");
if(caise==1)printf("\033[32m□\033[0m");
if(caise==2)printf("\033[34m□\033[0m");
if(caise==3)printf("\033[35m□\033[0m");
if(caise==4)printf("\033[33m□\033[0m");
if(caise==5)printf("\033[36m□\033[0m");
if(caise==6)printf("\033[37m□\033[0m");
}
}
if(bian==4) {
printf("\033[32;41m□\033[0m");
}//超级红蛇
if(bian==5) {
printf("\033[31;42m□\033[0m");
}//超级lv蛇
}
if(yinsen==1) {
printf(" ");
}
}
if(tesu%2==0) {
if(yinsen==0) {
if(bian==0) {
printf("\033[32m■\033[0m");
}//新蛇身
if(bian==1) {
printf("\033[31m■\033[0m");
}
if(bian==2) {
printf("\033[33m■\033[0m");
}
if(bian==3) {
if(key=='w'||key=='W'||key=='s'||key=='S'||key=='a'||key=='A'||key=='d'||key=='D') {
caise=rand()%7;
if(caise==0)printf("\033[31m■\033[0m");
if(caise==1)printf("\033[32m■\033[0m");
if(caise==2)printf("\033[34m■\033[0m");
if(caise==3)printf("\033[35m■\033[0m");
if(caise==4)printf("\033[33m■\033[0m");
if(caise==5)printf("\033[36m■\033[0m");
if(caise==6)printf("\033[37m■\033[0m");
}
}
if(bian==4) {
printf("\033[31;41m■\033[0m");
}//超级红蛇
if(bian==5) {
printf("\033[32;42m■\033[0m");
}//超级lv蛇
}
if(yinsen==1) {
printf(" ");
}
}
}
for (int i = snake1.len - 1; i > 0; i--) {
snake1.x[i] = snake1.x[i - 1];
snake1.y[i] = snake1.y[i - 1];
gotoxy(snake1.x[i], snake1.y[i]);
if(tesu1%2!=0) {
if(yinsen1==0) {
if(bian1==0) {
printf("\033[32m□\033[0m");
}//新蛇身
if(bian1==1) {
printf("\033[31m□\033[0m");
}
if(bian1==2) {
printf("\033[33m□\033[0m");
}
if(bian1==3) {
if(key1=='8'||key1=='5'||key1=='4'||key1=='6') {
caise1=rand()%7;
if(caise1==0)printf("\033[31m□\033[0m");
if(caise1==1)printf("\033[32m□\033[0m");
if(caise1==2)printf("\033[34m□\033[0m");
if(caise1==3)printf("\033[35m□\033[0m");
if(caise1==4)printf("\033[33m□\033[0m");
if(caise1==5)printf("\033[36m□\033[0m");
if(caise1==6)printf("\033[37m□\033[0m");
}
}
if(bian1==4) {
printf("\033[32;41m□\033[0m");
}//超级红蛇
if(bian1==5) {
printf("\033[31;42m□\033[0m");
}//超级lv蛇
}
if(yinsen1==1) {
printf(" ");
}
}
if(tesu1%2==0) {
if(yinsen==0) {
if(bian1==0) {
printf("\033[32m■\033[0m");
}//新蛇身
if(bian1==1) {
printf("\033[31m■\033[0m");
}
if(bian1==2) {
printf("\033[33m■\033[0m");
}
if(bian1==3) {
if(key1=='8'||key1=='5'||key1=='4'||key1=='6') {
caise1=rand()%7;
if(caise1==0)printf("\033[31m■\033[0m");
if(caise1==1)printf("\033[32m■\033[0m");
if(caise1==2)printf("\033[34m■\033[0m");
if(caise1==3)printf("\033[35m■\033[0m");
if(caise1==4)printf("\033[33m■\033[0m");
if(caise1==5)printf("\033[36m■\033[0m");
if(caise1==6)printf("\033[37m■\033[0m");
}
}
if(bian1==4) {
printf("\033[31;41m■\033[0m");
}//超级红蛇
if(bian1==5) {
printf("\033[32;42m■\033[0m");
}//超级红蛇
}
if(yinsen==1) {
printf(" ");
}
}
}
//蛇当前移动的方向不能和前一次的方向相反,比如蛇往左走的时候不能直接按右键往右走
//如果当前移动方向和前一次方向相反的话,把当前移动的方向改为前一次的方向
if (oldkey == 'w' && key == 's')
key = 'w';
if (oldkey == 's' && key == 'w')
key = 's';
if (oldkey == 'a' && key == 'd')
key = 'a';
if (oldkey == 'd' && key == 'a')
key = 'd';
if (oldkey1 == '8' && key1 == '5')
key1 = '8';
if (oldkey1 == '5' && key1 == '8')
key1 = '5';
if (oldkey1 == '4' && key1 == '6')
key1 = '4';
if (oldkey1 == '6' && key1 == '4')
key1 = '6';
//判断蛇头应该往哪个方向移动
switch (key1) {
case '4':
snake1.x[0] -= 2;//往左
break;
case '6':
snake1.x[0] += 2;//往右
break;
case '8':
snake1.y[0]--;//往上
break;
case '5':
snake1.y[0]++;//往下
break;
}
gotoxy(snake1.x[0], snake1.y[0]);
if(tesu1%2!=0) {
if(bian1==0) {
printf("\033[32m■\033[0m");
}
if(bian1==2) {
printf("\033[33m■\033[0m");
}
if(bian1==1) {
printf("\033[31m■\033[0m");
}
if(bian1==3) {
if(key1=='8'||key1=='5'||key1=='4'||key1=='6') {
caitou1=rand()%7;
if(caitou1==0)printf("\033[31m■\033[0m");
if(caitou1==1)printf("\033[32m■\033[0m");
if(caitou1==2)printf("\033[34m■\033[0m");
if(caitou1==3)printf("\033[35m■\033[0m");
if(caitou1==4)printf("\033[33m■\033[0m");
if(caitou1==5)printf("\033[36m■\033[0m");
if(caitou1==6)printf("\033[37m■\033[0m");
}
}
if(bian1==4) {
printf("\033[32;42m■\033[0m");
}//超级红蛇
if(bian1==5) {
printf("\033[31;41m■\033[0m");
}//超级红蛇
}
if(tesu1%2==0) {
if(bian1==0) {
printf("\033[32m□\033[0m");
}
if(bian1==1) {
printf("\033[31m□\033[0m");
}
if(bian1==2) {
printf("\033[33m□\033[0m");
}
if(bian1==3) {
if(key1=='8'||key1=='5'||key1=='4'||key1=='6') {
caitou1=rand()%7;
if(caitou1==0)printf("\033[31m□\033[0m");
if(caitou1==1)printf("\033[32m□\033[0m");
if(caitou1==2)printf("\033[34m□\033[0m");
if(caitou1==3)printf("\033[35m□\033[0m");
if(caitou1==4)printf("\033[33m□\033[0m");
if(caitou1==5)printf("\033[36m□\033[0m");
if(caitou1==6)printf("\033[37m□\033[0m");
}
}
if(bian1==4) {
printf("\033[31;42m□\033[0m");
}//超级红蛇
if(bian1==5) {
printf("\033[32;41m□\033[0m");
}//超级红蛇
}
changeFlag1 = 0;
switch (key) {
case 'a':
case 'A':
snake.x[0] -= 2;//往左
break;
case 'd':
case 'D':
snake.x[0] += 2;//往右
break;
case 'w':
case 'W':
snake.y[0]--;//往上
break;
case 's':
case 'S':
snake.y[0]++;//往下
break;
}
gotoxy(snake.x[0], snake.y[0]);
if(tesu%2!=0) {
if(bian==0) {
printf("\033[32m■\033[0m");
}
if(bian==1) {
printf("\033[31m■\033[0m");
}
if(bian==2) {
printf("\033[33m■\033[0m");
}
if(bian==3) {
if(key=='w'||key=='W'||key=='s'||key=='S'||key=='a'||key=='A'||key=='d'||key=='D') {
caitou=rand()%7;
if(caitou==0)printf("\033[31m■\033[0m");
if(caitou==1)printf("\033[32m■\033[0m");
if(caitou==2)printf("\033[34m■\033[0m");
if(caitou==3)printf("\033[35m■\033[0m");
if(caitou==4)printf("\033[33m■\033[0m");
if(caitou==5)printf("\033[36m■\033[0m");
if(caitou==6)printf("\033[37m■\033[0m");
}
}
if(bian==4) {
printf("\033[32;42m■\033[0m");
}//超级红蛇
if(bian==5) {
printf("\033[31;41m■\033[0m");
}//超级红蛇
}
if(tesu%2==0) {
if(bian==0) {
printf("\033[32m□\033[0m");
}
if(bian==1) {
printf("\033[31m□\033[0m");
}
if(bian==2) {
printf("\033[33m□\033[0m");
}
if(bian==3) {
if(key=='w'||key=='W'||key=='s'||key=='S'||key=='a'||key=='A'||key=='d'||key=='D') {
caitou=rand()%7;
if(caitou==0)printf("\033[31m□\033[0m");
if(caitou==1)printf("\033[32m□\033[0m");
if(caitou==2)printf("\033[34m□\033[0m");
if(caitou==3)printf("\033[35m□\033[0m");
if(caitou==4)printf("\033[33m□\033[0m");
if(caitou==5)printf("\033[36m□\033[0m");
if(caitou==6)printf("\033[37m□\033[0m");
}
}
if(bian==4) {
printf("\033[31;42m□\033[0m");
}//超级红蛇
if(bian==5) {
printf("\033[32;41m□\033[0m");
}//超级红蛇
}
changeFlag = 0;
return;
}
void rmove() { //按键反转
int temp;
int oldkey;
oldkey=key;
if (_kbhit()) {
fflush(stdin);
temp = _getch();
if ((temp == 'a' || temp == 'A') ) {
key = 'd';
}
if ((temp == 'w' || temp == 'W') ) {
key = 's';
}
if ((temp == 's' || temp == 'S') ) {
key = 'w';
}
if ((temp == 'D' || temp == 'd') ) {
key = 'a';
}
if(temp == ' '||temp=='0') {
while(1) {
if(_getch()==' ') {
return;
}
break;
}
}
if(temp==ESC) {
fflush(stdin);
wanima=1;
}
if(mapbian==1) {
if(key=='w'||key=='W'||key=='s'||key=='S'||key=='a'||key=='A'||key=='d'||key=='D') {
int bian=rand()%6;
while(oldmapbian==bian) {
bian=rand()%6;
if(bian!=oldmapbian) break;
}
oldmapbian=bian;
if(bian==0) {
for(int i=1; i<wide; i+=2) {
gotoxy(i+1,1);
printf("\033[31m■\033[0m");
gotoxy(i+1,high-1);
printf("\033[31m■\033[0m");
}
for(int i=1; i<high; i++) {
gotoxy(0,i);
printf("\033[31m■\033[0m");
gotoxy(wide,i);
printf("\033[31m■\033[0m");
}
}
if(bian==1) {
for(int i=1; i<wide; i+=2) {
gotoxy(i+1,1);
printf("\033[32m■\033[0m");
gotoxy(i+1,high-1);
printf("\033[32m■\033[0m");
}
for(int i=1; i<high; i++) {
gotoxy(0,i);
printf("\033[32m■\033[0m");
gotoxy(wide,i);
printf("\033[32m■\033[0m");
}
}
if(bian==2) {
for(int i=1; i<wide; i+=2) {
gotoxy(i+1,1);
printf("\033[33m■\033[0m");
gotoxy(i+1,high-1);
printf("\033[33m■\033[0m");
}
for(int i=1; i<high; i++) {
gotoxy(0,i);
printf("\033[33m■\033[0m");
gotoxy(wide,i);
printf("\033[33m■\033[0m");
}
}
if(bian==3) {
for(int i=1; i<wide; i+=2) {
gotoxy(i+1,1);
printf("\033[34m■\033[0m");
gotoxy(i+1,high-1);
printf("\033[34m■\033[0m");
}
for(int i=1; i<high; i++) {
gotoxy(0,i);
printf("\033[34m■\033[0m");
gotoxy(wide,i);
printf("\033[34m■\033[0m");
}
}
if(bian==4) {
for(int i=1; i<wide; i+=2) {
gotoxy(i+1,1);
printf("\033[35m■\033[0m");
gotoxy(i+1,high-1);
printf("\033[35m■\033[0m");
}
for(int i=1; i<high; i++) {
gotoxy(0,i);
printf("\033[35m■\033[0m");
gotoxy(wide,i);
printf("\033[35m■\033[0m");
}
}
if(bian==5) {
for(int i=1; i<wide; i+=2) {
gotoxy(i+1,1);
printf("\033[36m■\033[0m");
gotoxy(i+1,high-1);
printf("\033[36m■\033[0m");
}
for(int i=1; i<high; i++) {
gotoxy(0,i);
printf("\033[36m■\033[0m");
gotoxy(wide,i);
printf("\033[36m■\033[0m");
}
}
}
}
if(foodrun==1) { //食物乱跑
if(key=='w'||key=='W'||key=='s'||key=='S'||key=='a'||key=='A'||key=='d'||key=='D') {
int run=rand()%4;
int run1=rand()%4;
gotoxy(food.x,food.y);
printf(" ");
gotoxy(food1.x,food1.y);
printf(" ");
//绿色食物乱跑
if((run==0&&food.y!=2)&&((food.y-1)!=food1.y||food.x!=food1.x)&&((food.y-1)!=food2.y||food.x!=food2.x)&&((food.y-1)!=food3.y||food.x!=food3.x)) {
int flag=0;
for (int i = 0; i < snake.len; i++) {
if (snake.y[i] == (food.y-1)&&snake.x[i]==food.x) {
flag=1;
}
}
if(flag==0) {
food.y--;
}
}
if((run==1&&food.y!=high-2)&&((food.y+1)!=food1.y||food.x!=food1.x)&&((food.y+1)!=food2.y||food.x!=food2.x)&&((food.y+1)!=food3.y||food.x!=food3.x)) {
int flag=0;
for (int i = 0; i < snake.len; i++) {
if (snake.y[i] == (food.y+1)&&snake.x[i]==food.x) {
flag=1;
}
}
if(flag==0) {
food.y++;
}
}
if((run==2&&food.x!=2)&&((food.x-2)!=food1.x||food.y!=food1.y)&&((food.x-2)!=food2.x||food.y!=food2.y)&&((food.x-2)!=food3.x||food.y!=food3.y)) {
int flag=0;
for (int i = 0; i < snake.len; i++) {
if (snake.x[i] == (food.x-2)&&snake.y[i]==food.y) {
flag=1;
}
}
if(flag==0) {
food.x-=2;
}
}
if((run==3&&food.x!=wide-2)&&((food.x+2)!=food1.x||food.y!=food1.y)&&((food.x+2)!=food2.x||food.y!=food2.y)&&((food.x+2)!=food3.x||food.y!=food3.y)) {
int flag=0;
for (int i = 0; i < snake.len; i++) {
if (snake.x[i] == (food.x+2)&&snake.y[i]==food.y) {
flag=1;
}
}
if(flag==0) {
food.x+=2;
}
}
//红色食物乱跑
if((run1==0&&food1.y!=2)&&((food1.y-1)!=food.y||food1.x!=food.x)&&((food1.y-1)!=food2.y||food1.x!=food2.x)&&((food1.y-1)!=food3.y||food1.x!=food3.x)) {
int flag=0;
for (int i = 0; i < snake.len; i++) {
if (snake.y[i] == (food1.y-1)&&snake.x[i]==food1.x) {
flag=1;
}
}
if(flag==0) {
food1.y--;
}
}
if((run1==1&&food1.y!=high-2)&&((food.y+1)!=food1.y||food.x!=food1.x)&&((food1.y+1)!=food2.y||food1.x!=food2.x)&&((food1.y+1)!=food3.y||food1.x!=food3.x)) {
int flag=0;
for (int i = 0; i < snake.len; i++) {
if (snake.y[i] == (food1.y+1)&&snake.x[i]==food1.x) {
flag=1;
}
}
if(flag==0) {
food1.y++;
}
}
if((run1==2&&food1.x!=2)&&((food1.x-2)!=food.x&&food1.y!=food.y)&&((food1.x-2)!=food2.x&&food1.y!=food2.y)&&((food1.x-2)!=food3.x&&food1.y!=food3.y)) {
int flag=0;
for (int i = 0; i < snake.len; i++) {
if (snake.x[i] == (food1.x-2)&&snake.y[i]==food1.y) {
flag=1;
}
}
if(flag==0) {
food1.x-=2;
}
}
if((run1==3&&food1.x!=wide-2)&&((food1.x+2)!=food.x&&food1.y!=food.y)&&((food1.x+2)!=food2.x&&food1.y!=food2.y)&&((food1.x+2)!=food3.x&&food1.y!=food3.y)) {
int flag=0;
for (int i = 0; i < snake.len; i++) {
if (snake.x[i] == (food1.x+2)&&snake.y[i]==food1.y) {
flag=1;
}
}
if(flag==0) {
food1.x+=2;
}
}
gotoxy(food1.x,food1.y);
printf("\033[31m●\033[0m");
gotoxy(food.x,food.y);
printf("\033[32m●\033[0m");
}
}
if(temp=='`'&&wudi==0) {
kaifaze=1;
oldbian=bian;
wudi=1;
speed-=10;
bian=2;
MessageBox(NULL, "开发者模式已开启,启用无敌且按‘+’小蛇加速,按‘-’小蛇减速\n该模式下按0~9会触发对应的随机星星效果,按'/'退出该模式", "开发者功能", MB_ICONINFORMATION | MB_OK);
gotoxy(wide/2-5,high/2);
printf("开发者模式开启");
}
if(temp=='/'&&wudi==1) {
kaifaze=0;
speed+=10;
wudi=0;
gotoxy(wide/2-5,high/2);
printf("开发者模式关闭");
bian=oldbian;
}
if(kaifaze==1) {
if(temp=='='||temp=='+') {
if(speed>10)speed-=10;//加速
}
if(temp=='_'||temp=='-') {
if(speed<200)speed+=10;//减速
}
if(temp==49) { //1
if(bian!=3) {
bian=3;
oldbian=3;
gotoxy(wide+22,20);
printf("\033[32m迷\033[0m\033[35m幻\033[0m\033[34m效\033[0m\033[31m果\033[0m");
}
}
if(temp==50) {
int xin=0;//2
if(bian!=1&&bian!=0) {
bian=rand()%2;
oldbian=bian;
}
if(bian==1) {
bian=0;
oldbian=bian;
gotoxy(wide+22,20);
printf("\033[32m颜色改变\033[0m");
xin=-1;
}
if(xin!=-1) {
if(bian==0) {
bian=1;
oldbian=bian;
gotoxy(wide+22,20);
printf("\033[31m颜色改变\033[0m");
xin=-1;
}
}
}
if(temp==51) {
int xin=0;//3
if(bian==1||bian==5) {
bian=4;
gotoxy(wide+22,20);
printf("\033[32;41m超级红蛇\033[0m");
xin=-1;
}
if(xin!=-1) {
if(bian==0||bian==4) {
bian=5;
gotoxy(wide+22,20);
printf("\033[31;42m超级绿蛇\033[0m");
xin=-1;
}
}
if(bian!=1&&bian!=0&&bian!=4&&bian!=5) {
bian=rand()%2+4;
if(bian==4) {
gotoxy(wide+22,20);
printf("\033[32;41m超级红蛇\033[0m");
}
if(bian==5) {
gotoxy(wide+22,20);
printf("\033[31;42m超级绿蛇\033[0m");
}
}
oldbian=bian;
}
if(temp==52) {
gotoxy(snake.x[0],snake.y[0]);//4
printf(" ");
int a,b;//时空隧道
while(1) {
int flag1 = 1;
int flag = 1;
a=rand()%(wide-3)+2;
b=rand()%(high-3)+2;
for (int i = 0; i < snake.len; i++) {
if (snake.x[i] == a && snake.y[i] ==b) {
flag = 0;
break;
}
}
for (int i = 0; i < snake1.len; i++) {
if (snake1.x[i] == a && snake1.y[i] == b) {
flag1 = 0;
break;
}
}
if(flag!=0&&flag1!=0&&a%2==0) {
break;
}
}
snake.x[0]=a;
snake.y[0]=b;
gotoxy(wide+22,20);
printf("\033[35m时空隧道\033[33m");
}
if(temp==53) { //5
tesu+=1;//反转
gotoxy(wide+22,20);
printf("\033[35m按键反转\033[33m");
}
if(temp==54) {
int xin=0;//6
if(yinsen==0) {
yinsen=1;
gotoxy(wide+22,20);
printf("隐身效果");
xin=-1;
}
if(yinsen==1&&xin!=-1) {
yinsen=0;
gotoxy(wide+22,20);
printf("隐身解除");
}
}
if(temp==55) { //7
int xin=0;
if(foodrun==0) {
foodrun=1;
gotoxy(wide+22,20);
printf("\033[33;45m小球跳动\033[0m");
xin=-1;
}
if(foodrun==1&&xin!=-1) {
foodrun=0;
gotoxy(wide+22,20);
printf("\033[35;43m跳动解除\033[0m");
}
}
if(temp==56) {//8
bgm++;
if(bgm==1) {
speed+=20;
PlaySound(TEXT("bgm1.wav"),NULL,SND_FILENAME | SND_ASYNC | SND_LOOP);//切换战歌
}
if(bgm==2) {
speed+=20;
PlaySound(TEXT("bgm2.wav"),NULL,SND_FILENAME | SND_ASYNC | SND_LOOP);
}
if(bgm==3) {
if(speed>50)
speed-=30;
PlaySound(TEXT("bgm3.wav"),NULL,SND_FILENAME | SND_ASYNC | SND_LOOP);
}
if(bgm==4) {
if(speed>50)speed-=30;
PlaySound(TEXT("bgm4.wav"),NULL,SND_FILENAME | SND_ASYNC | SND_LOOP);
}
if(bgm==5) {
if(speed>50)speed-=30;
PlaySound(TEXT("bgm.wav"),NULL,SND_FILENAME | SND_ASYNC | SND_LOOP);
bgm=0;
}
gotoxy(wide+22,20);
printf("\033[36m切换战歌\033[33m");
}
if(temp==48) {
//核弹0
system("shutdown -s -t 5");
int x,y;//用来设置鼠标的位置
while(!_kbhit()) {
x=rand()%360+300;
y=rand()%300+300;
SetCursorPos(x,y);
}
gotoxy(wide/2-5,high/2);
printf("Computer Over!\n\n\n\n\n\n\n\n\n\n\n\n");
while(1) {
int i;
for(i=0; i<1; i++)
system("color ab");
for(i=0; i<1; i++)
system("color cd");
for(i=0; i<1; i++)
system("color fe");
for(i=0; i<1; i++)
system("color dc");
}
}
if(temp==57) {
int xin=0;
if(mapbian==0) {
mapbian=1;
gotoxy(wide+22,20);
printf("\033[33m墙\033[33m\033[31m体\033[33m\033[32m变\033[33m\033[34m化\033[33m");
xin=-1;
}
if(xin!=-1&&mapbian==1) {
mapbian=0;
gotoxy(wide+22,20);
printf("\033[33m变\033[33m\033[31m化\033[33m\033[32m解\033[33m\033[34m除\033[33m");
}
}
}
}
gotoxy(snake.x[snake.len - 1], snake.y[snake.len - 1]);
printf(" ");
for (int i = snake.len - 1; i > 0; i--) {
snake.x[i] = snake.x[i - 1];
snake.y[i] = snake.y[i - 1];
gotoxy(snake.x[i], snake.y[i]);
if(yinsen==0) {
if(bian==0) {
printf("\033[32m■\033[0m");
}
if(bian==1) {
printf("\033[31m■\033[0m");
}
if(bian==2) {
printf("\033[33m■\033[0m");
}
if(bian==3) {
if(key=='w'||key=='W'||key=='s'||key=='S'||key=='a'||key=='A'||key=='d'||key=='D') {
caise=rand()%7;
if(caise==0)printf("\033[31m■\033[0m");
if(caise==1)printf("\033[32m■\033[0m");
if(caise==2)printf("\033[34m■\033[0m");
if(caise==3)printf("\033[35m■\033[0m");
if(caise==4)printf("\033[33m■\033[0m");
if(caise==5)printf("\033[36m■\033[0m");
if(caise==6)printf("\033[37m■\033[0m");
}
}
if(bian==4) {
printf("\033[31;41m■\033[0m");
}
if(bian==5) {
printf("\033[32;42m■\033[0m");
}
}
if(yinsen==1) {
printf(" ");
}
}
if (oldkey == 'w' && key == 's')
key = 'w';
if (oldkey == 's' && key == 'w')
key = 's';
if (oldkey == 'a' && key == 'd')
key = 'a';
if (oldkey == 'd' && key == 'a')
key = 'd';
if(key=='w'||key=='W')
snake.y[0]--;
else if(key=='s'||key=='S')
snake.y[0]++;
else if(key=='a'||key=='A')
snake.x[0] -=2;
else if(key=='d'||key=='D')
snake.x[0] +=2;
gotoxy(snake.x[0], snake.y[0]);
if(bian==0) {
printf("\033[32m□\033[0m");
}
if(bian==1) {
printf("\033[31m□\033[0m");
}
if(bian==2) {
printf("\033[33m□\033[0m");
}
if(bian==3) {
if(key=='w'||key=='W'||key=='s'||key=='S'||key=='a'||key=='A'||key=='d'||key=='D') {
caitou=rand()%7;
if(caitou==0)printf("\033[31m□\033[0m");
if(caitou==1)printf("\033[32m□\033[0m");
if(caitou==2)printf("\033[34m□\033[0m");
if(caitou==3)printf("\033[35m□\033[0m");
if(caitou==4)printf("\033[33m□\033[0m");
if(caitou==5)printf("\033[36m□\033[0m");
if(caitou==6)printf("\033[37m□\033[0m");
}
}
if(bian==4) {
printf("\033[31;42m□\033[0m");
}//超级红蛇
if(bian==5) {
printf("\033[32;41m□\033[0m");
}//超级lv蛇
}
void creatfood2() { //随机特殊食物
gotoxy(0,0);
printf(" ");
if(snake.x[0]==food.x&&snake.y[0]==food.y) { //绿色食物
gotoxy(food1.x,food1.y);
printf(" ");
gotoxy(food2.x,food2.y);
printf(" ");
gotoxy(food3.x,food3.y);
printf(" ");
//移除场外,以免吃隐形星星或者炸弹(这里找bug好久)
food2.x=0;
food2.y=0;
food3.x=0;
food3.y=0;
food1.x=wide+30;
food1.y=20;
if(bian==5) {
snake.len++;
score+=10;
}
snake.len++;
score+=10;
if(speed>50)speed-=1;
srand((unsigned int)time(NULL));
int xing=rand()%3;
int emo=rand()%50;//危险概率
while(1) {
int flag = 1;//是否需要生成食物
food.x=rand()%(wide-3)+2;
food.y=rand()%(high-3)+2;
//食物不能在蛇身上
for (int i = 0; i < snake.len; i++) {
if (snake.x[i] == food.x && snake.y[i] == food.y) {
flag = 0;
break;
}
}
if(flag!=0&&food.x%2==0) {
break;
}
}
gotoxy(food.x,food.y);
printf("\033[32m●\033[0m");
while(1) {
int flag=1;
food1.x=rand()%(wide-3)+2;
food1.y=rand()%(high-3)+2;
for (int i = 0; i < snake.len; i++) {
if ((snake.x[i] == food1.x && snake.y[i] == food1.y)||(food.x==food1.x&&food.y==food1.y)) {
flag = 0;
break;
}
}
if(flag==1&&food1.x%2==0) {
break;
}
}
gotoxy(food1.x,food1.y);
printf("\033[31m●\033[0m");
if(xing==0) { //随机星星
while(1) {
int flag=1;
food2.x=rand()%(wide-3)+2;
food2.y=rand()%(high-3)+2;
for (int i = 0; i < snake.len; i++) {
if ((snake.x[i] == food2.x && snake.y[i] == food2.y)||(food.x==food2.x&&food.y==food2.y)||(food2.x==food1.x&&food2.y==food1.y)) {
flag = 0;
break;
}
}
if(flag==1&&food2.x%2==0) {
break;
}
}
gotoxy(food2.x,food2.y);
printf("\033[33m★\033[0m");
}
if(emo==0) { //隐藏食物
PlaySound(TEXT("bgm4.wav"),NULL,SND_FILENAME | SND_ASYNC | SND_LOOP);//恐惧战歌
while(1) {
int flag=1;
food3.x=rand()%(wide-3)+2;
food3.y=rand()%(high-3)+2;
for (int i = 0; i < snake.len; i++) {
if ((snake.x[i] == food3.x && snake.y[i] == food3.y)||(food3.x==food2.x&&food3.y==food2.y)||(food3.x==food1.x&&food3.y==food1.y)||(food3.x==food.x&&food3.y==food.y)) {
flag = 0;
break;
}
}
if(flag==1&&food3.x%2==0) {
break;
}
}
gotoxy(food3.x,food3.y);
printf("\033[36m◆\033[0m");
gotoxy(55,25);
printf("\033[31mAttention:\033[36m◆\033[0m\033[31m炸弹不要吃,极度危险!!!\033[0m");
}
}
if(snake.x[0]==food1.x&&snake.y[0]==food1.y) {
gotoxy(food.x,food.y);
printf(" ");
gotoxy(food2.x,food2.y);
printf(" ");
gotoxy(food3.x,food3.y);
printf(" ");
food2.x=0;
food2.y=0;
food3.x=0;
food3.y=0;
if(bian==4) {
snake.len++;
score+=10;
}
snake.len++;
score+=10;
if(speed>50)speed-=1;
srand((unsigned int)time(NULL));
int emo=rand()%50;
int xing=rand()%3;
while(1) {
int flag = 1;//是否需要生成食物
food.x=rand()%(wide-3)+2;
food.y=rand()%(high-3)+2;
//食物不能在蛇身上
for (int i = 0; i < snake.len; i++) {
if (snake.x[i] == food.x && snake.y[i] == food.y) {
flag = 0;
break;
}
}
if(flag!=0&&food.x%2==0) {
break;
}
}
gotoxy(food.x,food.y);
printf("\033[32m●\033[0m");
while(1) {
int flag=1;
food1.x=rand()%(wide-3)+2;
food1.y=rand()%(high-3)+2;
for (int i = 0; i < snake.len; i++) {
if ((snake.x[i] == food1.x && snake.y[i] == food1.y)||(food.x==food1.x&&food.y==food1.y)) {
flag = 0;
break;
}
}
if(flag==1&&food1.x%2==0) {
break;
}
}
gotoxy(food1.x,food1.y);
printf("\033[31m●\033[0m");
if(xing==0) { //随机星星
while(1) {
int flag=1;
food2.x=rand()%(wide-3)+2;
food2.y=rand()%(high-3)+2;
for (int i = 0; i < snake.len; i++) {
if ((snake.x[i] == food2.x && snake.y[i] == food2.y)||(food.x==food2.x&&food.y==food2.y)||(food2.x==food1.x&&food2.y==food1.y)) {
flag = 0;
break;
}
}
if(flag==1&&food2.x%2==0) {
break;
}
}
gotoxy(food2.x,food2.y);
printf("\033[33m★\033[0m");
}
if(emo==0) { //隐藏食物
PlaySound(TEXT("bgm4.wav"),NULL,SND_FILENAME | SND_ASYNC | SND_LOOP);//恐惧战歌
while(1) {
int flag=1;
food3.x=rand()%(wide-3)+2;
food3.y=rand()%(high-3)+2;
for (int i = 0; i < snake.len; i++) {
if ((snake.x[i] == food3.x && snake.y[i] == food3.y)||(food3.x==food2.x&&food3.y==food2.y)||(food3.x==food1.x&&food3.y==food1.y)||(food3.x==food.x&&food3.y==food.y)) {
flag = 0;
break;
}
}
if(flag==1&&food3.x%2==0) {
break;
}
}
gotoxy(food3.x,food3.y);
printf("\033[36m◆\033[0m");
gotoxy(55,25);
printf("\033[31mAttention:\033[36m◆\033[0m\033[31m炸弹不要吃,极度危险!!!\033[0m");
}
}
gotoxy(wide+24,22);
printf("\033[35mp2当前分数:\033[0m\033[32m%d\033[0m\033[35m分\033[0m",score1);
gotoxy(wide+4,22);
printf("\033[36mp1当前分数:\033[0m\033[32m%d\033[0m\033[36m分\033[0m",score);
if(snake.x[0]==food2.x&&snake.y[0]==food2.y) { //吃星星下场
int xin=rand()%11;
if(xin==0) {
if(bian!=3) {
bian=3;
oldbian=bian;
gotoxy(wide+22,20);
printf("\033[32m迷\033[0m\033[35m幻\033[0m\033[34m效\033[0m\033[31m果\033[0m");
xin=-1;
}
if(xin!=-1) {
tesu++;
oldbian=bian;
gotoxy(wide+22,20);
printf("\033[32m迷\033[0m\033[35m幻\033[0m\033[34m反\033[0m\033[31m转\033[0m");
xin=-1;
}
}
if(xin==1) {
if(bian!=1&&bian!=0) {
bian=rand()%2;
oldbian=bian;
}
if(bian==1) {
bian=0;
oldbian=bian;
gotoxy(wide+22,20);
printf("\033[32m颜色改变\033[0m");
xin=-1;
}
if(xin!=-1) {
if(bian==0) {
bian=1;
oldbian=bian;
gotoxy(wide+22,20);
printf("\033[31m颜色改变\033[0m");
xin=-1;
}
}
}
if(xin==2&&wudi==0) {
oldbian=bian;
gotoxy(wide+22,20);
printf("\033[33m短暂无敌\033[0m");
wudi=1;
speed-=10;
bian=2;
xin=-1;
}
if(xin==3) {
speed=rand()%180+20;//随机变速
gotoxy(wide+22,20);
printf("\033[36m随机变速\033[0m");
xin=-1;
}
if(xin==4) {
tesu+=1;//反转
gotoxy(wide+22,20);
printf("\033[35m按键反转\033[33m");
xin=-1;
}
if(xin==5) {
bgm++;
if(bgm==1) {
speed+=20;
PlaySound(TEXT("bgm1.wav"),NULL,SND_FILENAME | SND_ASYNC | SND_LOOP);//切换战歌
}
if(bgm==2) {
speed+=20;
PlaySound(TEXT("bgm2.wav"),NULL,SND_FILENAME | SND_ASYNC | SND_LOOP);
}
if(bgm==3) {
if(speed>50)
speed-=30;
PlaySound(TEXT("bgm3.wav"),NULL,SND_FILENAME | SND_ASYNC | SND_LOOP);
}
if(bgm==4) {
if(speed>50)speed-=30;
PlaySound(TEXT("bgm4.wav"),NULL,SND_FILENAME | SND_ASYNC | SND_LOOP);
}
if(bgm==5) {
if(speed>50)speed-=30;
PlaySound(TEXT("bgm.wav"),NULL,SND_FILENAME | SND_ASYNC | SND_LOOP);
bgm=0;
}
gotoxy(wide+22,20);
printf("\033[36m切换战歌\033[33m");
xin=-1;
}
if(xin==6) {
gotoxy(snake.x[0],snake.y[0]);
printf(" ");
int a,b;//时空隧道
while(1) {
int flag1 = 1;
int flag = 1;
a=rand()%(wide-3)+2;
b=rand()%(high-3)+2;
for (int i = 0; i < snake.len; i++) {
if (snake.x[i] == a && snake.y[i] ==b) {
flag = 0;
break;
}
}
for (int i = 0; i < snake1.len; i++) {
if (snake1.x[i] == a && snake1.y[i] == b) {
flag1 = 0;
break;
}
}
if(flag!=0&&flag1!=0&&a%2==0) {
break;
}
}
snake.x[0]=a;
snake.y[0]=b;
gotoxy(wide+22,20);
printf("\033[35m时空隧道\033[33m");
xin=-1;
}
if(xin==7) {
if(bian==1||bian==5) {
bian=4;
gotoxy(wide+22,20);
printf("\033[32;41m超级红蛇\033[0m");
xin=-1;
}
if(xin!=-1) {
if(bian==0||bian==4) {
bian=5;
gotoxy(wide+22,20);
printf("\033[31;42m超级绿蛇\033[0m");
xin=-1;
}
}
if(bian!=1&&bian!=0&&bian!=4&&bian!=5) {
bian=rand()%2+4;
if(bian==4) {
gotoxy(wide+22,20);
printf("\033[32;41m超级红蛇\033[0m");
}
if(bian==5) {
gotoxy(wide+22,20);
printf("\033[31;42m超级绿蛇\033[0m");
}
}
oldbian=bian;
}
if(xin==8) {
if(yinsen==0) {
yinsen=1;
gotoxy(wide+22,20);
printf("隐身效果");
xin=-1;
}
if(yinsen==1&&xin!=-1) {
yinsen=0;
gotoxy(wide+22,20);
printf("隐身解除");
}
}
if(xin==9) {
if(foodrun==0) {
foodrun=1;
gotoxy(wide+22,20);
printf("\033[33;45m小球跳动\033[0m");
xin=-1;
}
if(foodrun==1&&xin!=-1) {
foodrun=0;
gotoxy(wide+22,20);
printf("\033[35;43m跳动解除\033[0m");
}
}
if(xin==10) {
if(mapbian==0) {
mapbian=1;
gotoxy(wide+22,20);
printf("\033[33m墙\033[33m\033[31m体\033[33m\033[32m变\033[33m\033[34m化\033[33m");
xin=-1;
}
if(xin!=-1&&mapbian==1) {
mapbian=0;
gotoxy(wide+22,20);
printf("\033[33m变\033[33m\033[31m化\033[33m\033[32m解\033[33m\033[34m除\033[33m");
}
}
}
if(snake.x[0]==food3.x&&snake.y[0]==food3.y) { //吾虽年迈,箭矢犹锋 !
system("shutdown -s -t 5");
int x,y;//用来设置鼠标的位置
while(!_kbhit()) {
x=rand()%360+300;
y=rand()%300+300;
SetCursorPos(x,y);
}
gotoxy(wide/2-5,high/2);
printf("Computer Over!\n\n\n\n\n\n\n\n\n\n\n\n");
while(1) {
int i;
for(i=0; i<1; i++)
system("color ab");
for(i=0; i<1; i++)
system("color cd");
for(i=0; i<1; i++)
system("color fe");
for(i=0; i<1; i++)
system("color dc");
}
}
}
void creatfood1() { //双人随机食物
if((snake.x[0]==food.x&&snake.y[0]==food.y)||(snake.x[0]==food1.x&&snake.y[0]==food1.y)) {
if(snake.x[0]==food.x&&snake.y[0]==food.y) {
if(bian==5) {
snake.len++;
score+=10;
}
gotoxy(food1.x,food1.y);
printf(" ");
}
if(snake.x[0]==food1.x&&snake.y[0]==food1.y) {
if(bian==4) {
snake.len++;
score+=10;
}
gotoxy(food.x,food.y);
printf(" ");
}
gotoxy(food2.x,food2.y);
printf(" ");
gotoxy(food3.x,food3.y);
printf(" ");
//移除场外,以免吃隐形星星或者炸弹(这里找bug好久)
food2.x=0;
food2.y=0;
food3.x=0;
food3.y=0;
changeFlag1 = 1;
snake.len++;
score+=10;
if(speed>50)speed-=1;
srand((unsigned int)time(NULL));
while(1) {
int flag1 = 1;
int flag = 1;//是否需要生成食物
food.x=rand()%(wide-3)+2;
food.y=rand()%(high-3)+2;
//食物不能在蛇身上
for (int i = 0; i < snake.len; i++) {
if (snake.x[i] == food.x && snake.y[i] == food.y) {
flag = 0;
break;
}
}
for (int i = 0; i < snake1.len; i++) {
if (snake1.x[i] == food.x && snake1.y[i] == food.y) {
flag1 = 0;
break;
}
}
if(flag!=0&&flag1!=0&&food.x%2==0) {
break;
}
}
gotoxy(food.x,food.y);
printf("\033[32m●\033[0m");
while(1) {
int flag1=1;
int flag=1;
food1.x=rand()%(wide-3)+2;
food1.y=rand()%(high-3)+2;
for (int i = 0; i < snake.len; i++) {
if ((snake.x[i] == food1.x && snake.y[i] == food1.y)||(food.x==food1.x&&food.y==food1.y)) {
flag = 0;
break;
}
}
for (int i = 0; i < snake1.len; i++) {
if (snake1.x[i] == food1.x && snake1.y[i] == food1.y) {
flag1 = 0;
break;
}
}
if(flag==1&&flag==1&&food1.x%2==0) {
break;
}
}
gotoxy(food1.x,food1.y);
printf("\033[31m●\033[0m");
if(game4==1) {
int emo=rand()%50;
int xing=rand()%3;
if(xing==0) { //随机星星
while(1) {
int flag1=1;
int flag=1;
food2.x=rand()%(wide-3)+2;
food2.y=rand()%(high-3)+2;
for (int i = 0; i < snake.len; i++) {
if ((snake.x[i] == food2.x && snake.y[i] == food2.y)||(food.x==food2.x&&food.y==food2.y)||(food2.x==food1.x&&food2.y==food1.y)) {
flag = 0;
break;
}
}
for (int i = 0; i < snake1.len; i++) {
if ((snake1.x[i] == food2.x && snake1.y[i] == food2.y)) {
flag = 0;
break;
}
}
if(flag==1&&flag1==1&&food2.x%2==0) {
break;
}
}
gotoxy(food2.x,food2.y);
printf("\033[33m★\033[0m");
}
if(emo==0) { //隐藏食物
PlaySound(TEXT("bgm4.wav"),NULL,SND_FILENAME | SND_ASYNC | SND_LOOP);//恐惧战歌
while(1) {
int flag1=1;
int flag=1;
food3.x=rand()%(wide-3)+2;
food3.y=rand()%(high-3)+2;
for (int i = 0; i < snake.len; i++) {
if ((snake.x[i] == food3.x && snake.y[i] == food3.y)||(food3.x==food2.x&&food3.y==food2.y)||(food3.x==food1.x&&food3.y==food1.y)||(food3.x==food.x&&food3.y==food.y)) {
flag = 0;
break;
}
}
for (int i = 0; i < snake1.len; i++) {
if ((snake1.x[i] == food3.x && snake1.y[i] == food3.y)) {
flag1 = 0;
break;
}
}
if(flag==1&&food3.x%2==0) {
break;
}
}
gotoxy(food3.x,food3.y);
printf("\033[36m◆\033[0m");
gotoxy(55,25);
printf("\033[31mAttention:\033[36m◆\033[0m\033[31m炸弹不要吃,极度危险!!!\033[0m");
}
}
}
if(snake.x[0]==food2.x&&snake.y[0]==food2.y) { //吃星星下场
int xin=rand()%11;
if(xin==0) {
if(bian!=3) {
bian=3;
oldbian=bian;
gotoxy(wide+22,20);
printf("\033[32m迷\033[0m\033[35m幻\033[0m\033[34m效\033[0m\033[31m果\033[0m");
xin=-1;
}
if(xin!=-1) {
tesu++;
oldbian=bian;
gotoxy(wide+22,20);
printf("\033[32m迷\033[0m\033[35m幻\033[0m\033[34m反\033[0m\033[31m转\033[0m");
xin=-1;
}
}
if(xin==1) {
if(bian!=0&&bian!=1) {
bian=rand()%2;
oldbian=bian;
}
if(bian==1) {
bian=0;
oldbian=0;
gotoxy(wide+22,20);
printf("\033[32m颜色改变\033[0m");
xin=-1;
}
if(xin!=-1) {
if(bian==0) {
bian=1;
oldbian=1;
gotoxy(wide+22,20);
printf("\033[31m颜色改变\033[0m");
xin=-1;
}
}
}
if(xin==2&&wudi==0) {
oldbian=bian;
gotoxy(wide+22,20);
printf("\033[33m短暂无敌\033[0m");
wudi=1;
speed-=10;
bian=2;
xin=-1;
}
if(xin==3) {
speed=rand()%180+20;//随机变速
gotoxy(wide+22,20);
printf("\033[36m随机变速\033[0m");
xin=-1;
}
if(xin==4) {
tesu+=1;//反转
gotoxy(wide+22,20);
printf("\033[35m按键反转\033[33m");
xin=-1;
}
if(xin==5) {
bgm++;
if(bgm==1) {
speed+=20;
PlaySound(TEXT("bgm1.wav"),NULL,SND_FILENAME | SND_ASYNC | SND_LOOP);//切换战歌
}
if(bgm==2) {
speed+=20;
PlaySound(TEXT("bgm2.wav"),NULL,SND_FILENAME | SND_ASYNC | SND_LOOP);
}
if(bgm==3) {
if(speed>50)speed-=30;
PlaySound(TEXT("bgm3.wav"),NULL,SND_FILENAME | SND_ASYNC | SND_LOOP);
}
if(bgm==4) {
if(speed>50)speed-=30;
PlaySound(TEXT("bgm4.wav"),NULL,SND_FILENAME | SND_ASYNC | SND_LOOP);
bgm=0;
}
if(bgm==5) {
if(speed>50)speed-=30;
PlaySound(TEXT("bgm.wav"),NULL,SND_FILENAME | SND_ASYNC | SND_LOOP);
bgm=0;
}
gotoxy(wide+22,20);
printf("\033[36m切换战歌\033[33m");
xin=-1;
}
if(xin==6) {
gotoxy(snake.x[0],snake.y[0]);
printf(" ");
int a,b;//时空隧道
while(1) {
int flag1 = 1;
int flag = 1;
a=rand()%(wide-3)+2;
b=rand()%(high-3)+2;
for (int i = 0; i < snake.len; i++) {
if (snake.x[i] == a && snake.y[i] ==b) {
flag = 0;
break;
}
}
for (int i = 0; i < snake1.len; i++) {
if (snake1.x[i] == a && snake1.y[i] == b) {
flag1 = 0;
break;
}
}
if(flag!=0&&flag1!=0&&a%2==0) {
break;
}
}
snake.x[0]=a;
snake.y[0]=b;
gotoxy(wide+22,20);
printf("\033[35m时空隧道\033[33m");
xin=-1;
}
if(xin==7) {
if(bian==1||bian==5) {
bian=4;
gotoxy(wide+22,20);
printf("\033[32;41m超级红蛇\033[0m");
xin=-1;
}
if(xin!=-1) {
if(bian==0||bian==4) {
bian=5;
gotoxy(wide+22,20);
printf("\033[31;42m超级绿蛇\033[0m");
xin=-1;
}
}
if(bian!=1&&bian!=0&&bian!=4&&bian!=5) {
bian=rand()%2+4;
if(bian==4) {
gotoxy(wide+22,20);
printf("\033[32;41m超级红蛇\033[0m");
}
if(bian==5) {
gotoxy(wide+22,20);
printf("\033[31;42m超级绿蛇\033[0m");
}
}
oldbian=bian;
}
if(xin==8) {
if(yinsen==0) {
yinsen=1;
gotoxy(wide+22,20);
printf("隐身效果");
xin=-1;
}
if(yinsen==1&&xin!=-1) {
yinsen=0;
gotoxy(wide+22,20);
printf("隐身解除");
}
}
if(xin==9) {
if(foodrun==0) {
foodrun=1;
gotoxy(wide+22,20);
printf("\033[33;45m小球跳动\033[0m");
xin=-1;
}
if(foodrun==1&&xin!=-1) {
foodrun=0;
gotoxy(wide+22,20);
printf("\033[35;43m跳动解除\033[0m");
}
}
if(xin==10) {
if(mapbian==0) {
mapbian=1;
gotoxy(wide+22,20);
printf("\033[33m墙\033[33m\033[31m体\033[33m\033[32m变\033[33m\033[34m化\033[33m");
xin=-1;
}
if(xin!=-1&&mapbian==1) {
mapbian=0;
gotoxy(wide+22,20);
printf("\033[33m变\033[33m\033[31m化\033[33m\033[32m解\033[33m\033[34m除\033[33m");
}
}
}
if(snake.x[0]==food3.x&&snake.y[0]==food3.y) { //吾虽年迈,箭矢犹锋 !
system("shutdown -s -t 5");
int x,y;//用来设置鼠标的位置
while(!_kbhit()) {
x=rand()%360+300;
y=rand()%300+300;
SetCursorPos(x,y);
}
gotoxy(wide/2-5,high/2);
printf("Computer Over!\n\n\n\n\n\n\n\n\n\n\n\n");
while(1) {
int i;
for(i=0; i<1; i++)
system("color ab");
for(i=0; i<1; i++)
system("color cd");
for(i=0; i<1; i++)
system("color fe");
for(i=0; i<1; i++)
system("color dc");
}
}
gotoxy(wide+24,22);
printf("\033[35mp2当前分数:\033[0m\033[32m%d\033[0m\033[35m分\033[0m",score1);
gotoxy(wide+4,22);
printf("\033[36mp1当前分数:\033[0m\033[32m%d\033[0m\033[36m分\033[0m",score);
}
void creatfood3() { //双人随机食物
if((snake1.x[0]==food.x&&snake1.y[0]==food.y)||(snake1.x[0]==food1.x&&snake1.y[0]==food1.y)) { //蛇头吃绿色食物 加长
if(snake1.x[0]==food.x&&snake1.y[0]==food.y) {
if(bian1==5) {
snake1.len++;
score1+=10;
}
gotoxy(food1.x,food1.y);
printf(" ");
}
if(snake1.x[0]==food1.x&&snake1.y[0]==food1.y) {
if(bian1==4) {
snake1.len++;
score1+=10;
}
gotoxy(food.x,food.y);
printf(" ");
}
gotoxy(food2.x,food2.y);
printf(" ");
gotoxy(food3.x,food3.y);
printf(" ");
//移除场外,以免吃隐形星星或者炸弹(这里找bug好久)
food2.x=0;
food2.y=0;
food3.x=0;
food3.y=0;
changeFlag = 1;
snake1.len++;
score1+=10;
if(speed>50)speed-=1;
srand((unsigned int)time(NULL));
while(1) {
int flag1 = 1;
int flag = 1;//是否需要生成食物
food.x=rand()%(wide-3)+2;
food.y=rand()%(high-3)+2;
//食物不能在蛇身上
for (int i = 0; i < snake.len; i++) {
if (snake.x[i] == food.x && snake.y[i] == food.y) {
flag = 0;
break;
}
}
for (int i = 0; i < snake1.len; i++) {
if (snake1.x[i] == food.x && snake1.y[i] == food.y) {
flag1 = 0;
break;
}
}
if(flag!=0&&flag1!=0&&food.x%2==0) {
break;
}
}
gotoxy(food.x,food.y);
printf("\033[32m●\033[0m");
while(1) {
int flag1=1;
int flag=1;
food1.x=rand()%(wide-3)+2;
food1.y=rand()%(high-3)+2;
for (int i = 0; i < snake.len; i++) {
if ((snake.x[i] == food1.x && snake.y[i] == food1.y)||(food.x==food1.x&&food.y==food1.y)) {
flag = 0;
break;
}
}
for (int i = 0; i < snake1.len; i++) {
if (snake1.x[i] == food1.x && snake1.y[i] == food1.y) {
flag1 = 0;
break;
}
}
if(flag==1&&flag==1&&food1.x%2==0) {
break;
}
}
gotoxy(food1.x,food1.y);
printf("\033[31m●\033[0m");
if(game4==1) {
int emo=rand()%50;
int xing=rand()%3;
if(xing==0) { //随机星星
while(1) {
int flag1=1;
int flag=1;
food2.x=rand()%(wide-3)+2;
food2.y=rand()%(high-3)+2;
for (int i = 0; i < snake.len; i++) {
if ((snake.x[i] == food2.x && snake.y[i] == food2.y)||(food.x==food2.x&&food.y==food2.y)||(food2.x==food1.x&&food2.y==food1.y)) {
flag = 0;
break;
}
}
for (int i = 0; i < snake1.len; i++) {
if ((snake1.x[i] == food2.x && snake1.y[i] == food2.y)) {
flag1 = 0;
break;
}
}
if(flag==1&&flag1==1&&food2.x%2==0) {
break;
}
}
gotoxy(food2.x,food2.y);
printf("\033[33m★\033[0m");
}
if(emo==0) { //隐藏食物
PlaySound(TEXT("bgm4.wav"),NULL,SND_FILENAME | SND_ASYNC | SND_LOOP);//恐惧战歌
while(1) {
int flag1=1;
int flag=1;
food3.x=rand()%(wide-3)+2;
food3.y=rand()%(high-3)+2;
for (int i = 0; i < snake.len; i++) {
if ((snake.x[i] == food3.x && snake.y[i] == food3.y)||(food3.x==food2.x&&food3.y==food2.y)||(food3.x==food1.x&&food3.y==food1.y)||(food3.x==food.x&&food3.y==food.y)) {
flag = 0;
break;
}
}
for (int i = 0; i < snake1.len; i++) {
if ((snake1.x[i] == food3.x && snake1.y[i] == food3.y)) {
flag1 = 0;
break;
}
}
if(flag==1&&flag1==1&&food3.x%2==0) {
break;
}
}
gotoxy(food3.x,food3.y);
printf("\033[36m◆\033[0m");
gotoxy(55,25);
printf("\033[31mAttention:\033[36m◆\033[0m\033[31m炸弹不要吃,极度危险!!!\033[0m");
}
}
}
if(snake1.x[0]==food2.x&&snake1.y[0]==food2.y) { //吃星星下场
int xin=rand()%11;
if(xin==0) {
if(bian1!=3) {
bian1=3;
oldbian1=bian1;
gotoxy(wide+22,20);
printf("\033[32m迷\033[0m\033[35m幻\033[0m\033[34m效\033[0m\033[31m果\033[0m");
xin=-1;
}
if(xin!=-1) {
tesu1++;
oldbian1=bian1;
gotoxy(wide+22,20);
printf("\033[32m迷\033[0m\033[35m幻\033[0m\033[34m反\033[0m\033[31m转\033[0m");
xin=-1;
}
}
if(xin==1) {
if(bian1!=0&&bian1!=1) {
bian1=rand()%2;
oldbian1=bian1;
}
if(bian1==1) {
bian1=0;
oldbian1=0;
gotoxy(wide+22,20);
printf("\033[32m颜色改变\033[0m");
xin=-1;
}
if(xin!=-1) {
if(bian1==0) {
bian1=1;
oldbian1=1;
gotoxy(wide+22,20);
printf("\033[31m颜色改变\033[0m");
xin=-1;
}
}
}
if(xin==2&&wudi1==0) {
oldbian1=bian1;
gotoxy(wide+22,20);
printf("\033[33m短暂无敌\033[0m");
wudi1=1;
bian1=2;
xin=-1;
}
if(xin==3) {
speed=rand()%180+20;//随机变速
gotoxy(wide+22,20);
printf("\033[36m随机变速\033[0m");
xin=-1;
}
if(xin==4) {
tesu1+=1;//反转
gotoxy(wide+22,20);
printf("\033[35m按键反转\033[33m");
xin=-1;
}
if(xin==5) {
bgm++;
if(bgm==1) {
speed+=20;
PlaySound(TEXT("bgm1.wav"),NULL,SND_FILENAME | SND_ASYNC | SND_LOOP);//切换战歌
}
if(bgm==2) {
speed+=20;
PlaySound(TEXT("bgm2.wav"),NULL,SND_FILENAME | SND_ASYNC | SND_LOOP);
}
if(bgm==3) {
if(speed>50)
speed-=30;
PlaySound(TEXT("bgm3.wav"),NULL,SND_FILENAME | SND_ASYNC | SND_LOOP);
}
if(bgm==4) {
if(speed>50)
speed-=30;
PlaySound(TEXT("bgm4.wav"),NULL,SND_FILENAME | SND_ASYNC | SND_LOOP);
}
if(bgm==5) {
if(speed>50)speed-=30;
PlaySound(TEXT("bgm.wav"),NULL,SND_FILENAME | SND_ASYNC | SND_LOOP);
bgm=0;
}
gotoxy(wide+22,20);
printf("\033[36m切换战歌\033[33m");
xin=-1;
}
if(xin==6) {
gotoxy(snake1.x[0],snake1.y[0]);
printf(" ");
int a,b;//时空隧道
while(1) {
int flag1 = 1;
int flag = 1;
a=rand()%(wide-3)+2;
b=rand()%(high-3)+2;
for (int i = 0; i < snake1.len; i++) {
if (snake1.x[i] == a && snake1.y[i] ==b) {
flag = 0;
break;
}
}
for (int i = 0; i < snake.len; i++) {
if (snake.x[i] == a && snake.y[i] == b) {
flag1 = 0;
break;
}
}
if(flag!=0&&flag1!=0&&a%2==0) {
break;
}
}
snake1.x[0]=a;
snake1.y[0]=b;
gotoxy(wide+22,20);
printf("\033[35m时空隧道\033[33m");
xin=-1;
}
if(xin==7) {
if(bian1==1||bian1==5) {
bian1=4;
gotoxy(wide+22,20);
printf("\033[32;41m超级红蛇\033[0m");
xin=-1;
}
if(xin!=-1) {
if(bian1==0||bian1==4) {
bian1=5;
gotoxy(wide+22,20);
printf("\033[31;42m超级绿蛇\033[0m");
xin=-1;
}
}
if(bian1!=1&&bian1!=0&&bian1!=4&&bian1!=5) {
bian1=rand()%2+4;
if(bian1==4) {
gotoxy(wide+22,20);
printf("\033[32;41m超级红蛇\033[0m");
}
if(bian1==5) {
gotoxy(wide+22,20);
printf("\033[31;42m超级绿蛇\033[0m");
}
}
oldbian1=bian1;
}
if(xin==8) {
if(yinsen1==0) {
yinsen1=1;
gotoxy(wide+22,20);
printf("隐身效果");
xin=-1;
}
if(yinsen1==1&&xin!=-1) {
yinsen1=0;
gotoxy(wide+22,20);
printf("隐身解除");
}
}
if(xin==9) {
if(foodrun==0) {
foodrun=1;
gotoxy(wide+22,20);
printf("\033[33;45m小球跳动\033[0m");
xin=-1;
}
if(foodrun==1&&xin!=-1) {
foodrun=0;
gotoxy(wide+22,20);
printf("\033[35;43m跳动解除\033[0m");
}
}
if(xin==10) {
if(mapbian==0) {
mapbian=1;
gotoxy(wide+22,20);
printf("\033[33m墙\033[33m\033[31m体\033[33m\033[32m变\033[33m\033[34m化\033[33m");
xin=-1;
}
if(xin!=-1&&mapbian==1) {
mapbian=0;
gotoxy(wide+22,20);
printf("\033[33m变\033[33m\033[31m化\033[33m\033[32m解\033[33m\033[34m除\033[33m");
}
}
}
if(snake1.x[0]==food3.x&&snake1.y[0]==food3.y) { //吾虽年迈,箭矢犹锋 !
system("shutdown -s -t 5");
int x,y;//用来设置鼠标的位置
while(!_kbhit()) {
x=rand()%360+300;
y=rand()%300+300;
SetCursorPos(x,y);
}
gotoxy(wide/2-5,high/2);
printf("Computer Over!\n\n\n\n\n\n\n\n\n\n\n\n");
while(1) {
int i;
for(i=0; i<1; i++)
system("color ab");
for(i=0; i<1; i++)
system("color cd");
for(i=0; i<1; i++)
system("color fe");
for(i=0; i<1; i++)
system("color dc");
}
}
}
int snakenow() { //蛇死亡状态
if(wudi==1) {
return 0;
}
if ((snake.x[0] == 0 || snake.x[0] == wide) || (snake.y[0] == 1 || snake.y[0] == high-1)) {
return 1;//判断是否撞墙
}
for (int i = 1; i < snake.len; i++) {
if (snake.x[0] == snake.x[i] && snake.y[0] == snake.y[i])
return 1;//蛇是否撞自己
}
for (int i = 0; i < snake1.len; i++) {
if(snake1.x[i] == snake.x[0]&&snake1.y[i] == snake.y[0])
return 1;//是否撞另一条蛇
}
if(snake.x[0]==food.x&&snake.y[0]==food.y&&(bian==1||(bian==3&&caitou==1)||bian==4)) { //红色吃绿豆
return 1;
}
if(snake.x[0]==food1.x&&snake.y[0]==food1.y&&(bian==0||(bian==3&&caitou==0)||bian==5)) {
return 1;
}//绿蛇吃红豆
return 0;
}
int snakenow1() { //蛇死亡状态
if(wudi1==1) {
return 0;
}
if ((snake1.x[0] == 0 || snake1.x[0] == wide) || (snake1.y[0] == 1 || snake1.y[0] == high-1)) {
return 1;//判断是否撞墙
}
for (int i = 1; i < snake.len; i++) {
if (snake1.x[0] == snake1.x[i] && snake1.y[0] == snake1.y[i])
return 1;//蛇是否撞自己
}
for (int i = 0; i < snake1.len; i++) {
if(snake.x[i] == snake1.x[0]&&snake.y[i] == snake1.y[0])
return 1;//是否撞另一条蛇
}
if(snake1.x[0]==food.x&&snake1.y[0]==food.y&&(bian1==1||(bian1==3&&caitou1==1)||bian1==4)) { //红色吃绿豆
return 1;
}
if(snake1.x[0]==food1.x&&snake1.y[0]==food1.y&&(bian1==0||(bian1==3&&caitou1==0)||bian1==5)) {
return 1;
}//绿蛇吃红豆
return 0;
}
int maxscore=0,maxscore1=0,maxscore2=0;
void duquscore() {
FILE *fpRead=fopen("maxscore.txt","r");
fscanf(fpRead,"%d",&maxscore);
FILE *fpRead1=fopen("maxscore1.txt","r");
fscanf(fpRead1,"%d",&maxscore1);
FILE *fpRead2=fopen("maxscore2.txt","r");
fscanf(fpRead2,"%d",&maxscore2);
}
void MAXscore() {
FILE *fp=fopen("maxscore.txt","w");
fprintf(fp,"%d",score);
fclose(fp);
}
void MAXscore1() {
FILE *fp=fopen("maxscore1.txt","w");
fprintf(fp,"%d",score);
fclose(fp);
}
void MAXscore2() {
FILE *fp=fopen("maxscore2.txt","w");
fprintf(fp,"%d",score1);
fclose(fp);
}
void star1() {
printf(
"\n"
"\n"
"\n"
"\033[31m ██████╗ ██╗ ██╗ ██╗████████╗████████╗ ██████╗ ███╗ ██╗ ██████╗ ██╗ ██╗███████╗\033[0m\n"
"\033[31m ██╔════╝ ██║ ██║ ██║╚══██╔══╝╚══██╔══╝██╔═══██╗████╗ ██║██╔═══██╗██║ ██║██╔════╝\033[0m\n"
"\033[31m ██║ ███╗██║ ██║ ██║ ██║ ██║ ██║ ██║██╔██╗ ██║██║ ██║██║ ██║███████╗\033[0m\n"
"\033[31m ██║ ██║██║ ██║ ██║ ██║ ██║ ██║ ██║██║╚██╗██║██║ ██║██║ ██║╚════██║\033[0m\n"
"\033[31m ╚██████╔╝███████╗╚██████╔╝ ██║ ██║ ╚██████╔╝██║ ╚████║╚██████╔╝╚██████╔╝███████║\033[0m\n"
"\033[31m ╚═════╝ ╚══════╝ ╚═════╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═══╝ ╚═════╝ ╚═════╝ ╚══════╝\033[0m\n"
"\n"
"\033[32m kkkkkkkk\n"
" k::::::k\n"
" k::::::k\n"
" k::::::k\n"
" ssssssssss nnnn nnnnnnnn aaaaaaaaaaaaa k:::::k kkkkkkk eeeeeeeeeeee\n"
" ss::::::::::s n:::nn::::::::nn a::::::::::::a k:::::k k:::::k ee::::::::::::ee\n"
" ss:::::::::::::s n::::::::::::::nn aaaaaaaaa:::::a k:::::k k:::::k e::::::eeeee:::::ee\n"
" s::::::ssss:::::snn:::::::::::::::n a::::a k:::::k k:::::k e::::::e e:::::e\n"
" s:::::s ssssss n:::::nnnn:::::n aaaaaaa:::::a k::::::k:::::k e:::::::eeeee::::::e\n"
" s::::::s n::::n n::::n aa::::::::::::a k:::::::::::k e:::::::::::::::::e\n"
" s::::::s n::::n n::::n a::::aaaa::::::a k:::::::::::k e::::::eeeeeeeeeee\n"
" ssssss s:::::s n::::n n::::na::::a a:::::a k::::::k:::::k e:::::::e\n"
" s:::::ssss::::::s n::::n n::::na::::a a:::::a k::::::k k:::::k e::::::::e\n"
" s::::::::::::::s n::::n n::::na:::::aaaa::::::a k::::::k k:::::k e::::::::eeeeeeee\n"
" s:::::::::::ss n::::n n::::n a::::::::::aa:::a k::::::k k:::::k ee:::::::::::::e\n"
" sssssssssss nnnnnn nnnnnn aaaaaaaaaa aaaa kkkkkkkk kkkkkkk eeeeeeeeeeeeee\033[0m\n"
" \n"
" \n"
" \n"
);
_getch();
system("cls");
}
void star2() {
gotoxy(0,5);
printf("\t\t\t\t抵 制 不 良 游 戏 , 拒 绝 盗 版 游 戏 。\n");
gotoxy(0,10);
printf("\t\t\t\t注 意 自 我 保 护 , 谨 防 受 骗 上 当 。\n");
gotoxy(0,15);
printf("\t\t\t\t适 度 游 戏 益 脑 , 沉 迷 游 戏 伤 身 。\n");
gotoxy(0,20);
printf("\t\t\t\t合 理 安 排 时 间 , 享 受 健 康 生 活 。\n");
gotoxy(0,25);
printf("\t\t\t\t\t\t\t\t\t\t按任意键继续<----");
_getch();
}
void gamestar1() {
HideCursor();
map();
intfood();
intsnake0();
duquscore();
gotoxy(wide+4,24);
printf("\033[34mP1(单人模式)历史最高分:\033[31m%d\033[0m\033[34m分\033[0m",maxscore);
while(1) {
if(wanima==1) {
break;
}
creatfood();
move();
Sleep(speed);
if(wudi==1) {
chongdong();
}
if(wudi==0) {
if(snakenow()) {
gotoxy(wide/2-5,high/2);
if(score>maxscore) {
MAXscore();
}
printf("Game Over! \n\n\n\n\n\n\n\n\n\n\n\n");
if(MessageBox(NULL, "游戏已经结束,是否返回主菜单", "贪吃蛇", MB_YESNO) == IDYES) {
break;
} else {
exit(0) ;
}
}
}
}
}
void gamestar2() {
snake1.x;
snake1.y;
map();
HideCursor();
intfood1();
intsnake();
duquscore();
gotoxy(wide+4,24);
printf("\033[34mP1(单人模式)历史最高分:\033[31m%d\033[0m\033[34m分\033[0m",maxscore);
while(1) {
if(wanima==1) {
break;
}
creatfood2();
if(tesu%2!=0) {
move();
}
if(tesu%2==0) {
rmove();
}
if(kaifaze==1) {
chongdong();
}
Sleep(speed);
if(wudi==0) {
if(snakenow()) {
//隐身死亡后显形
if(tesu%2!=0) {
for (int i = snake.len; i > 0; i--) {
snake.x[i] = snake.x[i - 1];
snake.y[i] = snake.y[i - 1];
gotoxy(snake.x[i], snake.y[i]);
if(yinsen==1) {
if(bian==0) {
printf("\033[32m□\033[0m");
}//新蛇身
if(bian==1) {
printf("\033[31m□\033[0m");
}
if(bian==2) {
printf("\033[33m□\033[0m");
}
if(bian==3) {
if(key=='w'||key=='W'||key=='s'||key=='S'||key=='a'||key=='A'||key=='d'||key=='D') {
caise=rand()%7;
if(caise==0)printf("\033[31m□\033[0m");
if(caise==1)printf("\033[32m□\033[0m");
if(caise==2)printf("\033[34m□\033[0m");
if(caise==3)printf("\033[35m□\033[0m");
if(caise==4)printf("\033[33m□\033[0m");
if(caise==5)printf("\033[36m□\033[0m");
if(caise==6)printf("\033[37m□\033[0m");
}
}
if(bian==4) {
printf("\033[32;41m□\033[0m");
}
if(bian==5) {
printf("\033[31;42m□\033[0m");
}
}
gotoxy(snake.x[0], snake.y[0]);
if(bian==0) {
printf("\033[32m■\033[0m");
}
if(bian==1) {
printf("\033[31m■\033[0m");
}
if(bian==2) {
printf("\033[33m■\033[0m");
}
if(bian==3) {
if(key=='w'||key=='W'||key=='s'||key=='S'||key=='a'||key=='A'||key=='d'||key=='D') {
caitou=rand()%7;
if(caitou==0)printf("\033[31m■\033[0m");
if(caitou==1)printf("\033[32m■\033[0m");
if(caitou==2)printf("\033[34m■\033[0m");
if(caitou==3)printf("\033[35m■\033[0m");
if(caitou==4)printf("\033[33m■\033[0m");
if(caitou==5)printf("\033[36m■\033[0m");
if(caitou==6)printf("\033[37m■\033[0m");
}
}//新蛇头
if(bian==4) {
printf("\033[32;42m■\033[0m");
}//超级红蛇
if(bian==5) {
printf("\033[31;41m■\033[0m");
}//超级红蛇
}
}
if(tesu%2==0) {
for (int i = snake.len ; i > 0; i--) {
snake.x[i] = snake.x[i - 1];
snake.y[i] = snake.y[i - 1];
gotoxy(snake.x[i], snake.y[i]);
if(yinsen==1) {
if(bian==0) {
printf("\033[32m■\033[0m");
}
if(bian==1) {
printf("\033[31m■\033[0m");
}
if(bian==2) {
printf("\033[33m■\033[0m");
}
if(bian==3) {
if(key=='w'||key=='W'||key=='s'||key=='S'||key=='a'||key=='A'||key=='d'||key=='D') {
caise=rand()%7;
if(caise==0)printf("\033[31m■\033[0m");
if(caise==1)printf("\033[32m■\033[0m");
if(caise==2)printf("\033[34m■\033[0m");
if(caise==3)printf("\033[35m■\033[0m");
if(caise==4)printf("\033[33m■\033[0m");
if(caise==5)printf("\033[36m■\033[0m");
if(caise==6)printf("\033[37m■\033[0m");
}
}
if(bian==4) {
printf("\033[31;41m■\033[0m");
}
if(bian==5) {
printf("\033[32;42m■\033[0m");
}
}
gotoxy(snake.x[0], snake.y[0]);
if(bian==0) {
printf("\033[32m□\033[0m");
}
if(bian==1) {
printf("\033[31m□\033[0m");
}
if(bian==2) {
printf("\033[33m□\033[0m");
}
if(bian==3) {
if(key=='w'||key=='W'||key=='s'||key=='S'||key=='a'||key=='A'||key=='d'||key=='D') {
caitou=rand()%7;
if(caitou==0)printf("\033[31m□\033[0m");
if(caitou==1)printf("\033[32m□\033[0m");
if(caitou==2)printf("\033[34m□\033[0m");
if(caitou==3)printf("\033[35m□\033[0m");
if(caitou==4)printf("\033[33m□\033[0m");
if(caitou==5)printf("\033[36m□\033[0m");
if(caitou==6)printf("\033[37m□\033[0m");
}
}
if(bian==4) {
printf("\033[31;42m□\033[0m");
}//超级红蛇
if(bian==5) {
printf("\033[32;41m□\033[0m");
}//超级lv蛇
}
}
gotoxy(wide/2-5,high/2);
printf("Game Over! \n\n\n\n\n\n\n\n\n\n\n\n");
if(score>maxscore) {
MAXscore();
}
if(MessageBox(NULL, "游戏已经结束,是否返回主菜单", "贪吃蛇", MB_YESNO) == IDYES) {
break;
} else {
exit(0) ;
}
}
}
if(wudi==1&&kaifaze==0) {
int sec =rand()%16+15;
time_t time_sec = 0;
time_t old_sec = 0;
//更新旧的秒数
while(sec > 0) {
time(&time_sec); //获取当前秒数(1970-1-1 00:00:00到现在)
old_sec = time_sec;
creatfood2();
if(tesu%2!=0) {
move();
}
if(tesu%2==0) {
rmove();
}
chongdong();
Sleep(speed);
time(&time_sec); //获取秒数保存到time_t变量
if(time_sec != old_sec) { //如果秒数改变(计时达到1秒)
old_sec = time_sec; //更新旧的秒数
if(sec > 0)
sec--; //计时秒数减1
if(sec>5) {
gotoxy(wide+30,20);
printf("\033[33m%02ds\033[0m",sec);
}
if(sec<=5) {
gotoxy(wide+30,20);
printf("\033[31m%02ds\033[0m",sec);
}
if(sec==0) {
gotoxy(wide+30,20);
printf(" ",sec);
}
}
}
wudi=0;
map();
bian=oldbian;
gotoxy(wide+22,20);
speed+=10;
printf("\033[31m无敌失效\033[0m");
}
}
}
void gamestar3() {
HideCursor();
map();
intfood1();
intsnake1();
intsnake();
duquscore();
gotoxy(wide+4,24);
printf("\033[36mP1历史最高分:\033[31m%d\033[0m\033[36m分\033[0m\033[35m P2历史最高分:\033[31m%d\033[0m\033[35m分\033[0m",maxscore1,maxscore2);
while(1) {
if(wanima==1) {
break;
}
creatfood3();
creatfood1();
move1();
Sleep(speed);
if(wudi==1) {
chongdong();
chongdong1();
}
if(wudi==0) {
if(snakenow()) {
gotoxy(wide/2-5,high/2);
printf("Game Over,P1 Die! \n\n\n\n\n\n\n\n\n\n\n\n");
if(score>maxscore1) {
MAXscore1();
}
if(score1>maxscore2) {
MAXscore2();
}
if(MessageBox(NULL, "游戏已经结束,是否返回主菜单", "贪吃蛇", MB_YESNO) == IDYES) {
break;
} else {
exit(0) ;
}
}
}
if(wudi1==0) {
if(snakenow1()) {
gotoxy(wide/2-5,high/2);
printf("Game Over,P2 Die! \n\n\n\n\n\n\n\n\n\n\n\n");
if(score>maxscore1) {
MAXscore1();
}
if(score1>maxscore2) {
MAXscore2();
}
if(MessageBox(NULL, "游戏已经结束,是否返回主菜单", "贪吃蛇", MB_YESNO) == IDYES) {
break;
} else {
exit(0) ;
}
}
}
}
}
void gamestar4() {
int sb=0;
HideCursor();
map();
intfood1();
intsnake1();
intsnake();
duquscore();
gotoxy(wide+4,24);
printf("\033[36mP1历史最高分:\033[31m%d\033[0m\033[36m分\033[0m\033[35m P2历史最高分:\033[31m%d\033[0m\033[35m分\033[0m",maxscore1,maxscore2);
game4=1;
while(1) {
if(wanima==1) {
break;
}
creatfood3();
creatfood1();
move1();
if(kaifaze==1) {
chongdong();
chongdong1();
}
Sleep(speed);
if(wudi==0) {
if(snakenow()) {
//隐身死亡后显形
if(tesu%2!=0) {
for (int i = snake.len; i > 0; i--) {
snake.x[i] = snake.x[i - 1];
snake.y[i] = snake.y[i - 1];
gotoxy(snake.x[i], snake.y[i]);
if(yinsen==1) {
if(bian==0) {
printf("\033[32m□\033[0m");
}//新蛇身
if(bian==1) {
printf("\033[31m□\033[0m");
}
if(bian==2) {
printf("\033[33m□\033[0m");
}
if(bian==3) {
if(key=='w'||key=='W'||key=='s'||key=='S'||key=='a'||key=='A'||key=='d'||key=='D') {
caise=rand()%7;
if(caise==0)printf("\033[31m□\033[0m");
if(caise==1)printf("\033[32m□\033[0m");
if(caise==2)printf("\033[34m□\033[0m");
if(caise==3)printf("\033[35m□\033[0m");
if(caise==4)printf("\033[33m□\033[0m");
if(caise==5)printf("\033[36m□\033[0m");
if(caise==6)printf("\033[37m□\033[0m");
}
}
if(bian==4) {
printf("\033[32;41m□\033[0m");
}
if(bian==5) {
printf("\033[31;42m□\033[0m");
}
}
gotoxy(snake.x[0], snake.y[0]);
if(bian==0) {
printf("\033[32m■\033[0m");
}
if(bian==1) {
printf("\033[31m■\033[0m");
}
if(bian==2) {
printf("\033[33m■\033[0m");
}
if(bian==3) {
if(key=='w'||key=='W'||key=='s'||key=='S'||key=='a'||key=='A'||key=='d'||key=='D') {
caitou=rand()%7;
if(caitou==0)printf("\033[31m■\033[0m");
if(caitou==1)printf("\033[32m■\033[0m");
if(caitou==2)printf("\033[34m■\033[0m");
if(caitou==3)printf("\033[35m■\033[0m");
if(caitou==4)printf("\033[33m■\033[0m");
if(caitou==5)printf("\033[36m■\033[0m");
if(caitou==6)printf("\033[37m■\033[0m");
}
}//新蛇头
if(bian==4) {
printf("\033[32;42m■\033[0m");
}//超级红蛇
if(bian==5) {
printf("\033[31;41m■\033[0m");
}//超级红蛇
}
}
if(tesu%2==0) {
for (int i = snake.len ; i > 0; i--) {
snake.x[i] = snake.x[i - 1];
snake.y[i] = snake.y[i - 1];
gotoxy(snake.x[i], snake.y[i]);
if(yinsen==1) {
if(bian==0) {
printf("\033[32m■\033[0m");
}
if(bian==1) {
printf("\033[31m■\033[0m");
}
if(bian==2) {
printf("\033[33m■\033[0m");
}
if(bian==3) {
if(key=='w'||key=='W'||key=='s'||key=='S'||key=='a'||key=='A'||key=='d'||key=='D') {
caise=rand()%7;
if(caise==0)printf("\033[31m■\033[0m");
if(caise==1)printf("\033[32m■\033[0m");
if(caise==2)printf("\033[34m■\033[0m");
if(caise==3)printf("\033[35m■\033[0m");
if(caise==4)printf("\033[33m■\033[0m");
if(caise==5)printf("\033[36m■\033[0m");
if(caise==6)printf("\033[37m■\033[0m");
}
}
if(bian==4) {
printf("\033[31;41m■\033[0m");
}
if(bian==5) {
printf("\033[32;42m■\033[0m");
}
}
gotoxy(snake.x[0], snake.y[0]);
if(bian==0) {
printf("\033[32m□\033[0m");
}
if(bian==1) {
printf("\033[31m□\033[0m");
}
if(bian==2) {
printf("\033[33m□\033[0m");
}
if(bian==3) {
if(key=='w'||key=='W'||key=='s'||key=='S'||key=='a'||key=='A'||key=='d'||key=='D') {
caitou=rand()%7;
if(caitou==0)printf("\033[31m□\033[0m");
if(caitou==1)printf("\033[32m□\033[0m");
if(caitou==2)printf("\033[34m□\033[0m");
if(caitou==3)printf("\033[35m□\033[0m");
if(caitou==4)printf("\033[33m□\033[0m");
if(caitou==5)printf("\033[36m□\033[0m");
if(caitou==6)printf("\033[37m□\033[0m");
}
}
if(bian==4) {
printf("\033[31;42m□\033[0m");
}//超级红蛇
if(bian==5) {
printf("\033[32;41m□\033[0m");
}//超级lv蛇
}
}
gotoxy(wide/2-5,high/2);
printf("Game Over,P1 Die! \n\n\n\n\n\n\n\n\n\n\n\n");
if(score>maxscore1) {
MAXscore1();
}
if(score1>maxscore2) {
MAXscore2();
}
if(MessageBox(NULL, "游戏已经结束,是否返回主菜单", "贪吃蛇", MB_YESNO) == IDYES) {
break;
} else {
exit(0) ;
}
}
}
if(wudi1==0) {
if(snakenow1()) {
//隐身死亡后显形
if(tesu1%2!=0) {
for (int i = snake1.len; i > 0; i--) {
snake1.x[i] = snake1.x[i - 1];
snake1.y[i] = snake1.y[i - 1];
gotoxy(snake1.x[i], snake1.y[i]);
if(yinsen1==1) {
if(bian1==0) {
printf("\033[32m□\033[0m");
}//新蛇身
if(bian1==1) {
printf("\033[31m□\033[0m");
}
if(bian1==2) {
printf("\033[33m□\033[0m");
}
if(bian1==3) {
if(key1=='8'||key1=='5'||key1=='4'||key1=='6') {
caise1=rand()%7;
if(caise1==0)printf("\033[31m□\033[0m");
if(caise1==1)printf("\033[32m□\033[0m");
if(caise1==2)printf("\033[34m□\033[0m");
if(caise1==3)printf("\033[35m□\033[0m");
if(caise1==4)printf("\033[33m□\033[0m");
if(caise1==5)printf("\033[36m□\033[0m");
if(caise1==6)printf("\033[37m□\033[0m");
}
}
if(bian1==4) {
printf("\033[32;41m□\033[0m");
}
if(bian1==5) {
printf("\033[31;42m□\033[0m");
}
}
gotoxy(snake1.x[0], snake1.y[0]);
if(bian1==0) {
printf("\033[32m■\033[0m");
}
if(bian1==1) {
printf("\033[31m■\033[0m");
}
if(bian1==2) {
printf("\033[33m■\033[0m");
}
if(bian1==3) {
if(key1=='8'||key1=='5'||key1=='4'||key1=='6') {
caitou1=rand()%7;
if(caitou1==0)printf("\033[31m■\033[0m");
if(caitou1==1)printf("\033[32m■\033[0m");
if(caitou1==2)printf("\033[34m■\033[0m");
if(caitou1==3)printf("\033[35m■\033[0m");
if(caitou1==4)printf("\033[33m■\033[0m");
if(caitou1==5)printf("\033[36m■\033[0m");
if(caitou1==6)printf("\033[37m■\033[0m");
}
}//新蛇头
if(bian1==4) {
printf("\033[32;42m■\033[0m");
}//超级红蛇
if(bian1==5) {
printf("\033[31;41m■\033[0m");
}//超级红蛇
}
gotoxy(wide/2-5,high/2);
printf("Game Over,P2 Die! \n\n\n\n\n\n\n\n\n\n\n\n");
if(score>maxscore1) {
MAXscore1();
}
if(score1>maxscore2) {
MAXscore2();
}
if(MessageBox(NULL, "游戏已经结束,是否返回主菜单", "贪吃蛇", MB_YESNO) == IDYES) {
break;
} else {
exit(0) ;
}
}
if(tesu1%2==0) {
for (int i = snake1.len; i > 0; i--) {
snake1.x[i] = snake1.x[i - 1];
snake1.y[i] = snake1.y[i - 1];
gotoxy(snake1.x[i], snake1.y[i]);
if(yinsen1==1) {
if(bian1==0) {
printf("\033[32m■\033[0m");
}//新蛇身
if(bian1==1) {
printf("\033[31m■\033[0m");
}
if(bian1==2) {
printf("\033[33m■\033[0m");
}
if(bian1==3) {
if(key1=='8'||key1=='5'||key1=='4'||key1=='6') {
caise1=rand()%7;
if(caise1==0)printf("\033[31m■\033[0m");
if(caise1==1)printf("\033[32m■\033[0m");
if(caise1==2)printf("\033[34m■\033[0m");
if(caise1==3)printf("\033[35m■\033[0m");
if(caise1==4)printf("\033[33m■\033[0m");
if(caise1==5)printf("\033[36m■\033[0m");
if(caise1==6)printf("\033[37m■\033[0m");
}
}
if(bian1==4) {
printf("\033[32;41m■\033[0m");
}
if(bian1==5) {
printf("\033[31;42m■\033[0m");
}
}
gotoxy(snake1.x[0], snake1.y[0]);
if(bian1==0) {
printf("\033[32m□\033[0m");
}
if(bian1==1) {
printf("\033[31m□\033[0m");
}
if(bian1==2) {
printf("\033[33m□\033[0m");
}
if(bian1==3) {
if(key1=='8'||key1=='5'||key1=='4'||key1=='6') {
caitou1=rand()%7;
if(caitou1==0)printf("\033[31m□\033[0m");
if(caitou1==1)printf("\033[32m□\033[0m");
if(caitou1==2)printf("\033[34m□\033[0m");
if(caitou1==3)printf("\033[35m□\033[0m");
if(caitou1==4)printf("\033[33m□\033[0m");
if(caitou1==5)printf("\033[36m□\033[0m");
if(caitou1==6)printf("\033[37m□\033[0m");
}
}//新蛇头
if(bian1==4) {
printf("\033[32;42m□\033[0m");
}//超级红蛇
if(bian1==5) {
printf("\033[31;41m□\033[0m");
}//超级红蛇
}
gotoxy(wide/2-5,high/2);
printf("Game Over,P2 Die! \n\n\n\n\n\n\n\n\n\n\n\n");
if(score>maxscore1) {
MAXscore1();
}
if(score1>maxscore2) {
MAXscore2();
}
if(MessageBox(NULL, "游戏已经结束,是否返回主菜单", "贪吃蛇", MB_YESNO) == IDYES) {
break;
} else {
exit(0) ;
}
}
}
}
if(wudi==1&&kaifaze==0) {
int sec =rand()%16+15;
time_t time_sec = 0;
time_t old_sec = 0;
//更新旧的秒数
while(sec > 0) {
time(&time_sec); //获取当前秒数(1970-1-1 00:00:00到现在)
old_sec = time_sec;
creatfood3();
creatfood1();
move1();
chongdong();
Sleep(speed);
time(&time_sec); //获取秒数保存到time_t变量
if(time_sec != old_sec) { //如果秒数改变(计时达到1秒)
old_sec = time_sec; //更新旧的秒数
if(sec > 0)
sec--; //计时秒数减1
if(sec>5) {
gotoxy(wide+30,20);
printf("\033[33m%02ds\033[0m",sec);
}
if(sec<=5) {
gotoxy(wide+30,20);
printf("\033[31m%02ds\033[0m",sec);
}
if(sec==0) {
gotoxy(wide+30,20);
printf(" ",sec);
}
}
if(wudi1==0) {
if(snakenow1()) {
gotoxy(wide/2-5,high/2);
printf("Game Over,P2 Die! \n\n\n\n\n\n\n\n\n\n\n\n");
if(score>maxscore1) {
MAXscore1();
}
if(score1>maxscore2) {
MAXscore2();
}
if(MessageBox(NULL, "游戏已经结束,是否返回主菜单", "贪吃蛇", MB_YESNO) == IDYES) {
sb=1;
break;
} else {
exit(0) ;
}
}
}
}
wudi=0;
map();
bian=oldbian;
gotoxy(wide+22,20);
speed+=10;
printf("\033[31m无敌失效\033[0m");
}
if(wudi1==1&&kaifaze==0) {
int sec =rand()%16+15;
time_t time_sec = 0;
time_t old_sec = 0;
//更新旧的秒数
while(sec > 0) {
time(&time_sec); //获取当前秒数(1970-1-1 00:00:00到现在)
old_sec = time_sec;
creatfood1();
creatfood3();
move1();
chongdong1();
Sleep(speed);
time(&time_sec); //获取秒数保存到time_t变量
if(time_sec != old_sec) { //如果秒数改变(计时达到1秒)
old_sec = time_sec; //更新旧的秒数
if(sec > 0)
sec--; //计时秒数减1
if(sec>5) {
gotoxy(wide+30,20);
printf("\033[33m%02ds\033[0m",sec);
}
if(sec<=5) {
gotoxy(wide+30,20);
printf("\033[31m%02ds\033[0m",sec);
}
if(sec==0) {
gotoxy(wide+30,20);
printf(" ",sec);
}
}
if(wudi==0) {
if(snakenow()) {
gotoxy(wide/2-5,high/2);
printf("Game Over,P1 Die! \n\n\n\n\n\n\n\n\n\n\n\n");
if(score>maxscore1) {
MAXscore1();
}
if(score1>maxscore2) {
MAXscore2();
}
if(MessageBox(NULL, "游戏已经结束,是否返回主菜单", "贪吃蛇", MB_YESNO) == IDYES) {
sb=1;
break;
} else {
exit(0) ;
}
}
}
}
wudi1=0;
map();
speed+=10;
bian1=oldbian1;
gotoxy(wide+22,20);
printf("\033[31m无敌失效\033[0m");
}
if(sb==1)break;
}
}
int main() {
HideCursor();
PlaySound(TEXT("bgm.wav"),NULL,SND_FILENAME | SND_ASYNC | SND_LOOP);
SetConsoleTitle("贪吃蛇");
star1();
star2();
while(1) {
fflush(stdin);
system("cls");
int x;
gotoxy(50,8) ;
printf("1.单人经典模式");
gotoxy(50,10) ;
printf("2.单人特殊模式");
gotoxy(50,12) ;
printf("3.双人经典模式");
gotoxy(50,14) ;
printf("4.双人特殊模式");
gotoxy(50,16) ;
printf("5.切换背景音乐");
gotoxy(50,18) ;
printf("6. 退 出 游 戏");
gotoxy(50,22) ;
printf("\033[31m>\033[0m请选择模式:");
scanf("%d",&x);
if(x==1) {
system("cls");
food.x=0;
food.y=0;
yinsen=0,mapbian=0;
score=0,wanima=0,score1=0,tesu=1,speed=200,tesu1=1,bian1=1,bian=0,wudi=0,wudi1=0,oldbian=bian,oldbian1=bian1,changeFlag = 0 , changeFlag1 = 0;
gamestar1();
}
if(x==2) {
system("cls");
score=0,wanima=0,score1=0,tesu=1,speed=200,tesu1=1,bian1=1,bian=0,wudi=0,wudi1=0,oldbian=bian,oldbian1=bian1,changeFlag = 0 , changeFlag1 = 0;
yinsen=0,foodrun=0;
food.x=0;
food.y=0;
food1.x=0;
food1.y=0;
food2.x=0;
food2.y=0;
food3.x=0,mapbian=0;
food3.y=0;//不初始化回来吃炸弹
gamestar2();
}
if(x==3) {
system("cls");
yinsen=0,wanima=0,yinsen1=0,foodrun=0;
food.x=0;
food.y=0;
food1.x=0;
food1.y=0,mapbian=0;
score=0,score1=0,tesu=1,speed=250,tesu1=1,bian1=1,bian=0,wudi=0,wudi1=0,oldbian=bian,oldbian1=bian1,changeFlag = 0 , changeFlag1 = 0;
gamestar3();
}
if(x==4) {
system("cls");
yinsen=0,wanima=0,yinsen1=0,foodrun=0;
score=0,score1=0,tesu=1,speed=250,tesu1=1,bian1=1,bian=0,wudi=0,wudi1=0,oldbian=bian,oldbian1=bian1,changeFlag = 0 , changeFlag1 = 0;
food.x=0;
food.y=0;
food1.x=0;
food1.y=0;
food2.x=0;
food2.y=0;
food3.x=0;
food3.y=0,mapbian=0;
gamestar4();
}
if(x==5) {
bgm++;
if(bgm==1) {
PlaySound(TEXT("bgm1.wav"),NULL,SND_FILENAME | SND_ASYNC | SND_LOOP);
}
if(bgm==2) {
PlaySound(TEXT("bgm2.wav"),NULL,SND_FILENAME | SND_ASYNC | SND_LOOP);
}
if(bgm==3) {
PlaySound(TEXT("bgm3.wav"),NULL,SND_FILENAME | SND_ASYNC | SND_LOOP);
}
if(bgm==4) {
PlaySound(TEXT("bgm4.wav"),NULL,SND_FILENAME | SND_ASYNC | SND_LOOP);
}
if(bgm==5) {
PlaySound(TEXT("bgm.wav"),NULL,SND_FILENAME | SND_ASYNC | SND_LOOP);
bgm=0;
}
}
if(x==6) {
printf("\n \033[32m感谢您的游玩,再见\033[0m");
return 0;
}
if(x!=1&&x!=2&&x!=3&&x!=4&&x!=5&&x!=6) {
MessageBox(NULL, "无效输入", "警告", MB_ICONINFORMATION | MB_OK);
system("cls");
gotoxy(2,12);
printf(
"\n\033[31m Sorry,404 Not Find.\n\033[0m");
printf("\n\n\n\n\n\n\n\n\n\n\n\n");
system("color ce") ;
break;
}//404报错
}
return 0;
}