#include<stdio.h>
#include<windows.h>
#include<stdlib.h>
#include<time.h>
#include<conio.h>
#include<math.h>
#include<algorithm>
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)
void sxy(int x,int y);
void rand_start(int n);
int ate();
int rbh(int s,int e);
int srt[10][2];//星星坐标
int x=3,y=1;//玩家1坐标 x是纵 y是横
int a=4,b=1;//玩家2坐标 a是纵 b是横
int rbh(int s,int e)//随机数的生成
{
int dis= e-s;
return rand()%dis+s;
}
void sxy(int x,int y)
{
COORD pos = {y,x};
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
CONSOLE_CURSOR_INFO info = {1, 0};
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &info);
}
void rand_start(int n)//按照序号n随机生成第n个星星的坐标
{
srt[n][0]=rbh(2,31);
srt[n][1]=rbh(15,63);
}
int ate(int n)//判断是否吃星
{
if(n==1)//如果n是1,判断玩家1
{
for(int i=0;i<10;i++)//遍历所有星星的坐标
{
if(x==srt[i][0]&&y==srt[i][1])//如果坐标重叠为吃了星星,返回星星的序号
return i;
}
}
else if(n==2)//如果n是2,判断玩家2
{
for(int i=0;i<10;i++)//遍历所有星星的坐标
{
if(a==srt[i][0]&&b==srt[i][1])//如果坐标重叠为吃了星星,返回星星的序号
return i;
}
}
return -1;//如果没吃,返回-1
}
void SetColor(unsigned short ForeColor,unsigned short BackGroundColor)
{
HANDLE hCon=GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hCon,(ForeColor%16)|(BackGroundColor%16*16));
}
void star()
{
int i=0;
while(1)
{
printf("\n\n\n\n\t\t点击屏幕开始游戏....");
if(KEY_DOWN(MOUSE_MOVED))
break;
else
{
SetColor(15,i);
Sleep(50);
if(KEY_DOWN(MOUSE_MOVED))
break;
else
Sleep(50);
if(KEY_DOWN(MOUSE_MOVED))
break;
else
Sleep(50);
if(KEY_DOWN(MOUSE_MOVED))
break;
else
Sleep(50);
}
i++;
if(i==15)
i++;
system("cls");
}
SetColor(15,0);
system("cls");
}
int double_game()
{
system("mode con cols=63 lines=32");
system("title 双人模式~~~~");
int i,st,yfen=0,efen=0,alv=1,blv=1;
char ch;
i=0;
for(i=0;i<10;i++)
rand_start(i);
for(i=0;i<10;i++)
{
sxy(srt[i][0],srt[i][1]);
printf("%c",4);
}
SetColor(15,0);
sxy(0,0);
printf("%c 玩家1分数:%03d %c 玩家2分数:%03d",2,yfen,1,efen);
sxy(1,0);
printf("%c 玩家1等级:%03d %c 玩家2等级:%03d",2,alv,1,blv);
while(1)
{
SetColor(15,0);
sxy(x,y);
printf("%c",2);
sxy(a,b);
printf("%c",1);
ch=getch();
switch(ch)
{
case 72:sxy(x,y);printf(" ");x--;break;
case 80:sxy(x,y);printf(" ");x++;break;
case 75:sxy(x,y);printf(" ");y--;break;
case 77:sxy(x,y);printf(" ");y++;break;
case 'w':sxy(a,b);printf(" ");a--;break;
case 's':sxy(a,b);printf(" ");a++;break;
case 'a':sxy(a,b);printf(" ");b--;break;
case 'd':sxy(a,b);printf(" ");b++;break;
}
if(x>=32||y>=63||x<0||y<0)
{
SetColor(15,0);
system("cls");
printf("\n\n\n\t\t玩家1撞墙了,玩家2获胜");
Sleep(1000);
return 0;
}
else if(a>=32||b>=63||a<0||b<0)
{
SetColor(15,0);
system("cls");
printf("\n\n\n\t\t玩家2撞墙了,玩家1获胜");
Sleep(1000);
return 0;
}
st=ate(1);
if(st!=-1)
{
yfen++;
sxy(0,12);
printf("%03d",yfen);//更新分数输出
if(yfen%5==0)
{
alv++;
sxy(1,12);
printf("%03d",alv); //更新等级输出
}
rand_start(st);
sxy(srt[st][0],srt[st][1]);
printf("%c",4);
}
st=ate(2);
if(st!=-1)
{
efen++;
sxy(0,28);
printf("%03d",efen);//更新分数输出
if(efen%5==0)
{
blv++;
sxy(1,28);
printf("%03d",blv);//更新等级输出
}
rand_start(st);
sxy(srt[st][0],srt[st][1]);
printf("%c",4);
}
if(a==x&&b==y)
{
if(alv>blv)
{
system("cls");
printf("\n\n\n\t\t玩家2被吞噬!玩家1获胜!!");
Sleep(1000);
return 1;
}
else if(alv<blv)
{
system("cls");
printf("\n\n\n\t\t玩家1被吞噬!玩家2获胜!!");
Sleep(1000);
return 2;
}
else
{
sxy(a-1,b-1);
printf("碰 撞");
Sleep(500);
system("cls");
printf("\n\n\t\t\t同归于尽!");
Sleep(1000);
return 0;
}
}
}
}
int main()
{
system("mode con cols=63 lines=32");
int choose=10;
char c;
star();
printf("欢迎回来~~~\n");
sxy(10,25);
printf("==比==赛==");
sxy(11,25);
printf("==训==练==");
sxy(12,25);
printf("==娱==乐==");
sxy(13,25);
printf("==退==出==");
while(1)
{
sxy(choose-1,23);
printf(" ");
sxy(choose+1,23);
printf(" ");
sxy(choose,23);
SetColor(12,0);
printf("->");
SetColor(15,0);
c=getch();
if(c==72&&choose>10)
choose--;
else if(c==80&&choose<13)
choose++;
else if(c==13)
{
if(choose==10)
{
choose=11;
while(1)
{
sxy(choose-1,23);
printf(" ");
sxy(choose+1,23);
printf(" ");
sxy(choose,23);
SetColor(12,0);
printf("->");
SetColor(15,0);
sxy(10,25);
printf("==比==赛==");
sxy(11,25);
printf(" = 双人 = ");
sxy(12,25);
printf(" = 单人 = ");
sxy(13,25);
printf(" = 收起 = ");
sxy(14,25);
printf("==娱==乐==");
sxy(15,25);
printf("==退==出==");
c=getch();
if(c==72&&choose>11)
choose--;
else if(c==80&&choose<13)
choose++;
else if(c==13)
{
if(choose==11)
{
double_game();
x=3;
y=1;
a=4;
b=1;
system("cls");
}
else if(choose==12)
{
MessageBox(NULL,TEXT("该功能还未开放哦!"), TEXT("敬请期待"), MB_OK | MB_ICONINFORMATION );
}
else if(choose==13)
{
system("cls");
sxy(10,25);
printf("==比==赛==");
sxy(11,25);
printf("==训==练==");
sxy(12,25);
printf("==娱==乐==");
sxy(13,25);
printf("==退==出==");
choose=10;
break;
}
}
}
}
else if(choose==13)
{
return 0;
}
else
{
MessageBox(NULL,TEXT("该功能还未开放哦!"), TEXT("敬请期待"), MB_OK | MB_ICONINFORMATION );
}
}
}
}