|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
/*小游戏飞机大战 2019/7/14 开始 2019/7/16 完成*/
#include <stdio.h>
#include <windows.h>
#include <time.h>
#include <stdlib.h>
#include <conio.h>
struct GAME
{
int x;
int y;
char shape;
struct GAME *next;
};
struct GAME *planehead;
struct GAME obstacles[25];
struct GAME bullet[888];
int score=10;
int numb=0;
int style=0;
void Pos();//光标
void map();//地图
void planestyle();//飞机型号
void plane();//飞机
void planemove();//飞机移动
void obstacle();//障碍物
void obstaclehide();//障碍物碰撞
void finish();//结束标志
void jiemian();//界面设计
void pause();//暂停
void bullets();//子弹
void hide();//碰撞
void init();//初始化
void victory();//胜利
void Pos(int x, int y)
{
COORD pos;
pos.X = x;
pos.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
}
void bullets()
{
int i;
for(i=0;i<100;i++)
{
bullet[i].x=0;
bullet[i].y=0;
bullet[i].shape='I';
}
}
void hide()
{
int i,j;
for(i=0;i<25;i++)
{
for(j=0;j<numb;j++)
{
if(obstacles[i].x==bullet[j].x&&obstacles[i].y==bullet[j].y)
{
obstacles[i].x=0;
bullet[j].shape=' ';
score=score+10;
if(score==1000)
{
victory();
}
}
if((bullet[j].x==90||bullet[j].x==92)&&bullet[j].y==12)
{
victory();
}
}
}
}
void map()
{
int a,b;
for(a=0;a<57;a=a+2)
{
Pos(a,0);
printf("■");
Pos(a,28);
printf("■");
}
for(b=0;b<28;b++)
{
Pos(0,b);
printf("■");
Pos(56,b);
printf("■");
}
}
void planestyle()
{
Pos(28,8);
printf("请选择飞机类型 ");
Pos(16,14);
printf("■");
Pos(15,15);
printf("■");
Pos(14,16);
printf("■");
Pos(17,15);
printf("■");
Pos(16,16);
printf("■");
Pos(18,16);
printf("■");
Pos(16,18);
printf("1");
Pos(33,14);
printf("■");
Pos(32,15);
printf("■");
Pos(34,15);
printf("■");
Pos(32,16);
printf("■");
Pos(34,16);
printf("■");
Pos(33,18);
printf("2");
Pos(50,15);
printf("■");
Pos(48,14);
printf("■");
Pos(52,14);
printf("■");
Pos(48,16);
printf("■");
Pos(52,16);
printf("■");
Pos(51,18);
printf("3 ");
system("pause");
system("CLS");
Pos(28,14);
printf("请输入你选的型号:");
scanf("%d",&style);
system("CLS");
}
void plane()
{
int i;
if(style==1)
{
struct GAME *temp,*p;
temp=(struct GAME *)malloc(sizeof(struct GAME));
temp->next=NULL;
for(i=0;i<5;i++)
{
p=temp;
temp=(struct GAME *)malloc(sizeof(struct GAME));
temp->next=p;
}
planehead=temp;
temp->x=28;
temp->y=24;
temp->next->x=27;
temp->next->y=25;
temp->next->next->x=29;
temp->next->next->y=25;
temp->next->next->next->x=26;
temp->next->next->next->y=26;
temp->next->next->next->next->x=28;
temp->next->next->next->next->y=26;
temp->next->next->next->next->next->x=30;
temp->next->next->next->next->next->y=26;
}
else if(style==2)
{
struct GAME *temp,*p;
temp=(struct GAME *)malloc(sizeof(struct GAME));
temp->next=NULL;
for(i=0;i<4;i++)
{
p=temp;
temp=(struct GAME *)malloc(sizeof(struct GAME));
temp->next=p;
}
planehead=temp;
temp->x=28;
temp->y=24;
temp->next->x=27;
temp->next->y=25;
temp->next->next->x=29;
temp->next->next->y=25;
temp->next->next->next->x=27;
temp->next->next->next->y=26;
temp->next->next->next->next->x=29;
temp->next->next->next->next->y=26;
}
else if(style==3)
{
struct GAME *temp,*p;
temp=(struct GAME *)malloc(sizeof(struct GAME));
temp->next=NULL;
for(i=0;i<4;i++)
{
p=temp;
temp=(struct GAME *)malloc(sizeof(struct GAME));
temp->next=p;
}
planehead=temp;
temp->x=28;
temp->y=24;
temp->next->x=26;
temp->next->y=23;
temp->next->next->x=30;
temp->next->next->y=23;
temp->next->next->next->x=26;
temp->next->next->next->y=25;
temp->next->next->next->next->x=30;
temp->next->next->next->next->y=25;
}
}
void planemove()
{
char key;
int i;
int a;
struct GAME *temp,*head;
bullets();
while(1)
{
head=temp=planehead;
map();
jiemian();
if(kbhit())
{
key=getch();
if(key=='w'||key=='W')
{
while(temp!=NULL)
{
temp->x=temp->x;
temp->y=temp->y-1;
temp=temp->next;
}
}
else if(key=='s'||key=='S')
{
while(temp!=NULL)
{
temp->x=temp->x;
temp->y=temp->y+1;
temp=temp->next;
}
}
else if(key=='a'||key=='A')
{
while(temp!=NULL)
{
temp->x=temp->x-2;
temp->y=temp->y;
temp=temp->next;
}
}
else if(key=='d'||key=='D')
{
while(temp!=NULL)
{
temp->x=temp->x+2;
temp->y=temp->y;
temp=temp->next;
}
}
else if(key==27)
{
finish();
}
else if(key==32)
{
pause();
}
else if(key=='j'||key=='J')
{
bullet[numb].x=planehead->x;
bullet[numb].y=planehead->y;
numb++;
}
}
while(head!=NULL)
{
Pos(head->x,head->y);
printf("■");
head=head->next;
}
for(a=0;a<numb;a++)
{
Pos(bullet[a].x,bullet[a].y);
printf("%c",bullet[a].shape);
bullet[a].y--;
if(bullet[a].y==0)
{
bullet[a].shape=' ';
}
}
for(i=0;i<25;i++)
{
Pos(obstacles[i].x,obstacles[i].y);
printf("oo");
obstacles[i].y++;
if(obstacles[i].y>28)
{
obstacles[i].x=rand()%56;
obstacles[i].y=rand()%8;
if(obstacles[i].x%2!=0)
{
obstacles[i].x=obstacles[i].x-1;
}
}
}
obstaclehide();
hide();
Sleep(10);
system("CLS");
}
}
void obstacle()
{
int i;
srand(time(NULL));
for(i=0;i<25;i++)
{
obstacles[i].x=rand()%56;
obstacles[i].y=rand()%14;
if(obstacles[i].x%2!=0)
{
obstacles[i].x=obstacles[i].x-1;
}
}
}
void obstaclehide()
{
struct GAME *temp;
int i;
temp=planehead;
while(temp!=NULL)
{
for(i=0;i<25;i++)
{
if(temp->x==obstacles[i].x&&temp->y==obstacles[i].y)
{
finish();
}
}
temp=temp->next;
}
}
void finish()
{
free(planehead);
system("CLS");
Pos(28,14);
printf("你失败了! ");
system("pause");
exit(0);
}
void victory()
{
free(planehead);
system("CLS");
Pos(28,14);
printf("牛逼! ");
system("pause");
exit(0);
}
void pause()
{
int pausekey;
while(1)
{
Pos(28,14);
printf("暂停中!");
if(kbhit())
{
pausekey=getch();
if(pausekey==32)
{
break;
}
}
}
}
void jiemian()
{
Pos(70,10);
printf("小游戏飞机大战!");
Pos(70,12);
printf("得分: %d",score);
Pos(90,12);
printf("BUG");
Pos(70,16);
printf("目标1000分!");
Pos(70,18);
printf("W,S,A,D,控制方向 空格暂停,esc退出");
Pos(70,20);
printf("j 发射子弹!");
}
void init()
{
Pos(28,14);
printf("飞机大战! ");
system("pause");
system("CLS");
Pos(28,14);
printf("没人通关 除非BUG! ");
system("pause");
system("CLS");
Pos(28,14);
printf("请把键盘改成大写键! ");
system("pause");
system("CLS");
}
void main()
{
init();
planestyle();
plane();
planemove();
} |
|