C语言实现飞机大战程序设计_第1页
C语言实现飞机大战程序设计_第2页
C语言实现飞机大战程序设计_第3页
C语言实现飞机大战程序设计_第4页
C语言实现飞机大战程序设计_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第C语言实现飞机大战程序设计本文实例为大家分享了C语言实现飞机大战的具体代码,供大家参考,具体内容如下

作业要求:

1.游戏当中出现多类型敌人

2.游戏中能进行存档和读档

3.玩家控制的飞机由多字符组成

4.游戏过程中没有出现BUG

5.游戏显示制作者信息

6.游戏当中带有BGM

7.其他个性化设定

成效:

代码:

#includestdio.h

#includestdlib.h

#includeconio.h

#includewindows.h

#includemmsystem.h

//导入声音头文件

#pragmacomment(lib,"Winmm.lib")

//导入声音头文件库

#defineHigh20

//游戏画面尺寸

#defineWidth30

#defineEnemyNum5

//敌机个数

#defineBossNum2

//Boss机个数

intflag;

//飞机状态

intcolor(intc);

//更改文字颜色

voidexplation();

//游戏提示

voidshow();

//显示游戏界面

voidendgame();

//游戏结束

voidstartup();

//数据初始化

voidFileRead();

//读档

//全局变量

intposition_x,position_y;

//飞机位置

structenemy{

intx;

inty;

intlife;

}Boss[BossNum],enemy[EnemyNum];

//敌机位置

intcanvas[High][Width]={0};

//二维数组存储游戏画布中对应的元素

//0为空格,1为飞机8,2为子弹o,3为敌机0,4为Boss敌机A

intscore;

//得分

intnumber;

//销毁敌机数

intBulletWidth;

//子弹宽度

intEnemyMoveSpeed;

//敌机移动速度

//光标移动到(x,y)位置

voidgotoxy(intx,inty)

HANDLEhandle=GetStdHandle(STD_OUTPUT_HANDLE);

COORDpos;

pos.X=x;

pos.Y=y;

SetConsoleCursorPosition(handle,pos);

//更改文字颜色

intcolor(intc)

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),c);

return0;

//隐藏光标

voidHideCursor()

CONSOLE_CURSOR_INFOcursor_info={1,0};

SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),cursor_info);

//开始界面

voidwelcometogame()

intn,i,j=1;

system("cls");

color(15);

gotoxy(33,1);

printf("飞机大战PlaneWar");

color(56);

for(i=3;i=26;i++)

//输出上下边框

{

for(j=6;j=80;j++)

//输出左右边框

{

gotoxy(j,i);

if(i==3||i==26)

printf("");

elseif(j==6||j==80)

printf("");

}

}

color(14);

gotoxy(38,6);

printf("基本操作\n");

gotoxy(19,8);

printf("空格:发射子弹

W:前进

A:左移

D:右移

S:后退\n");

gotoxy(34,11);

printf("1.开始游戏(play)");

gotoxy(34,13);

printf("2.游戏规则(rule)");

gotoxy(34,15);

printf("3.读取存档(read)");

gotoxy(34,17);

printf("4.退出游戏(quit)");

color(15);

gotoxy(22,24);

printf("游戏制作人:李歆灵

学号:420250320

联系方式);

color(14);

gotoxy(33,20);

printf("请选择1234:");

color(14);

scanf("%d",

//输入选项

switch(n)

{

case1:

flag=1;

system("cls");

break;

case2:

explation();

//游戏规则

break;

case3:

system("cls");//读档

break;

case4:

gotoxy(30,28);

exit(0);

//退出游戏

break;

default:

color(9);

gotoxy(33,22);

printf("请输入1-4之间的数");

_getch();

//输入任意键

system("cls");

//清屏

welcometogame();

}

//游戏规则

voidexplation()

inti,j=1;

system("cls");

color(15);

gotoxy(30,1);

printf("游戏规则Rulesofgame");

color(56);

for(i=3;i=26;i++)

//输出上下边框

{

for(j=6;j=80;j++)

//输出左右边框

{

gotoxy(j,i);

if(i==3||i==26)

printf("");

elseif(j==6||j==80)

printf("");

}

}

color(14);

gotoxy(10,6);

printf("1.W,A,S,D分别是控制飞机的移动,空格发射子弹");

gotoxy(10,9);

printf("2.O是普通敌机(需一发子弹),A是Boss敌机(需两发子弹)");

gotoxy(10,12);

printf("3.击败普通敌机可获得1分,击败Boss敌机可获得2分");

gotoxy(10,15);

printf("4.敌机进入下边界减1分");

gotoxy(10,18);

printf("5.飞机碰到敌机会坠落");

gotoxy(10,21);

printf("6.按Z存档,按P暂停游戏");

color(15);

gotoxy(25,23);

printf("/*****按任意键返回主页面*****/");

_getch();

//按任意键返回主界面

system("cls");

welcometogame();

//数据初始化

voidstartup()

mciSendString("openD:\\plane\\game.mp3aliasbkmusic",NULL,0,NULL);

//打开背景音乐

mciSendString("playbkmusic",NULL,0,NULL);//循环播放

position_x=High/2;

position_y=Width/2;

canvas[position_x][position_y]=3;

canvas[position_x+1][position_y-1]=3;

canvas[position_x+1][position_y]=3;

canvas[position_x+1][position_y+1]=3;

intk;

for(k=0;kEnemyNum;k++)

{

enemy[k].x=rand()%2;

enemy[k].y=rand()%Width;

canvas[enemy[k].x][enemy[k].y]=3;

}

for(k=0;kBossNum;k++)

{

Boss[k].x=rand()%2;

Boss[k].y=rand()%Width;

canvas[Boss[k].x][Boss[k].y]=4;

Boss[k].life=2;

}

intscore=0;

//成绩

intnumber=0;

//销毁敌机数

BulletWidth=0;

EnemyMoveSpeed=30;

HideCursor();

//光标

//存档代码

voidFileWrite()

FILE*fp;

//文件指针

fp=fopen("D:\\game.data","w");

//打开文件"w":write写入文件

inti,j;

for(i=0;iEnemyNum;i++)

{

fwrite(enemy[i],sizeof(structenemy),1,fp);

}

for(j=0;jBossNum;j++)

{

fwrite(Boss[j],sizeof(structenemy),1,fp);

}

fwrite(position_x,sizeof(int),1,fp);

fwrite(position_y,sizeof(int),1,fp);

fwrite(score,sizeof(int),1,fp);

fwrite(number,sizeof(int),1,fp);

fwrite(BulletWidth,sizeof(int),1,fp);

fwrite(EnemyMoveSpeed,sizeof(int),1,fp);

fclose(fp);

//关闭文件

printf("\n保存成功\n");

//读档代码

voidFileRead()

FILE*fp;

//文件指针

fp=fopen("D:\\game.data","r");

//打开文件"r":read读取文件

mciSendString("openD:\\plane\\game.mp3aliasbkmusic",NULL,0,NULL);

//打开背景音乐

mciSendString("playbkmusic",NULL,0,NULL);//循环播放

if(fp==NULL)

startup();

else

{

inti,j;

for(i=0;iEnemyNum;i++)

{

fread(enemy[i],sizeof(structenemy),1,fp);

}

for(j=0;jBossNum;j++)

{

fread(Boss[j],sizeof(structenemy),1,fp);

}

fread(position_x,sizeof(int),1,fp);

fread(position_y,sizeof(int),1,fp);

fread(score,sizeof(int),1,fp);

fread(number,sizeof(int),1,fp);

fread(BulletWidth,sizeof(int),1,fp);

fread(EnemyMoveSpeed,sizeof(int),1,fp);

}

fclose(fp);

//关闭文件

canvas[position_x][position_y]=1;

canvas[position_x+1][position_y-1]=1;

canvas[position_x+1][position_y]=1;

canvas[position_x+1][position_y+1]=1;

intk;

for(k=0;kEnemyNum;k++)

{

canvas[enemy[k].x][enemy[k].y]=3;

}

for(k=0;kBossNum;k++)

{

canvas[Boss[k].x][Boss[k].y]=4;

Boss[k].life=2;

}

HideCursor();

//显示画面

voidshow()

color(112);

gotoxy(0,0);//光标移动到原点位置,以下重画清屏

inti,j;

for(i=0;iHigh;i++)

{

for(j=0;jWidth;j++)

{

if((j==Width-1)||(i==High-1)||(j==0)||(i==0))

printf("#");

//打印边界#

elseif(canvas[i][j]==1)

printf("8");

//输出飞机8

elseif(canvas[i][j]==2)

printf("o");

//输出子弹o

elseif(canvas[i][j]==3)

printf("O");

//输出敌机O

elseif(canvas[i][j]==4)

printf("A");

//输出Boss敌机A

else

printf("");

}

printf("\n");

}

color(14);

printf("\n");

printf("游戏得分:%d\n",score);

printf("销毁敌机:%d\n\n",number);

Sleep(20);

//与用户输入无关的更新

voidupdateWithoutInput()

inti,j,k;

for(i=0;iHigh;i++)

{

for(j=0;jWidth;j++)

{

if(canvas[i][j]==2)

{

for(k=0;kEnemyNum;k++)

{

if((i==enemy[k].x)(j==enemy[k].y))

//子弹击中敌机

{

mciSendString("closegemusic",NULL,0,NULL);

//先把前面一次的音乐关闭

mciSendString("openD:\\plane\\gotEnemy.mp3aliasgemusic",NULL,0,NULL);

//打开音乐

mciSendString("playgemusic",NULL,0,NULL);

//仅播放一次

score++;

//分数加1

number++;

//销毁敌机数加1

if(number%6==0EnemyMoveSpeed3)

//达到一定积分后,敌机变快

EnemyMoveSpeed--;

if(number%12==0)

//达到一定积分后,子弹变厉害

BulletWidth++;

canvas[enemy[k].x][enemy[k].y]=0;

//残影问题

enemy[k].x=rand()%2;

//产生新的敌机

enemy[k].y=rand()%Width;

canvas[enemy[k].x][enemy[k].y]=3;

canvas[i][j]=0;

//子弹消失

}

}

for(k=0;kBossNum;k++)

{

if((i==Boss[k].x)(j==Boss[k].y))

//子弹击中Boss敌机

{

mciSendString("closegemusic",NULL,0,NULL);

//先把前面一次的音乐关闭

mciSendString("openD:\\plane\\gotEnemy.mp3aliasgemusic",NULL,0,NULL);

//打开音乐

mciSendString("playgemusic",NULL,0,NULL);

//仅播放一次

Boss[k].life--;

//Boss敌机生命值减1

if(Boss[k].life==0)

{

canvas[Boss[k].x][Boss[k].y]=0;

//残影问题

Boss[k].x=rand()%2;

//产生新Boss敌机

Boss[k].y=rand()%Width;

canvas[Boss[k].x][Boss[k].y]=4;

canvas[i][j]=0;

//子弹消失

Boss[k].life=2;

score++;score++;

//分数加2

number++;

//销毁敌机数加1

}

}

}

//子弹向上移动

canvas[i][j]=0;

if(i0)

canvas[i-1][j]=2;

}

}

}

staticintspeed=0;

if(speedEnemyMoveSpeed)

speed++;

for(k=0;kEnemyNum;k++)

{

//敌机撞到我机

if((position_x==enemy[k].x)(position_y==enemy[k].y)||(position_x+1==enemy[k].x)(position_y-1==enemy[k].y)||(position_x+1==enemy[k].x)(position_y+1==enemy[k].y)||(position_x+2==enemy[k].x)(position_y+1==enemy[k].y)||(position_x+2==enemy[k].x)(position_y-1==enemy[k].y))

{

mciSendString("closebkmusic",NULL,0,NULL);

//先把前面一次的音乐关闭

mciSendString("openD:\\plane\\explode.mp3aliasexmusic",NULL,0,NULL);

//打开音乐

mciSendString("playexmusic",NULL,0,NULL);

//仅播放一次

color(11);

printf("\n游戏结束!\n");

Sleep(3000);

system("pause");

exit(0);

}

//敌机跑出显示屏幕

if(enemy[k].xHigh)

{

canvas[enemy[k].x][enemy[k].y]=0;

enemy[k].x=rand()%2;//产生新的敌机

enemy[k].y=rand()%Width;

canvas[enemy[k].x][enemy[k].y]=3;

score--;//减分

}

if(speed==EnemyMoveSpeed)

{

//敌机下落

for(k=0;kEnemyNum;k++)

{

canvas[enemy[k].x][enemy[k].y]=0;

enemy[k].x++;

speed=0;

canvas[enemy[k].x][enemy[k].y]=3;

}

//Boss敌机下落

for(k=0;kBossNum;k++)

{

canvas[Boss[k].x][Boss[k].y]=0;

Boss[k].x++;

speed=0;

canvas[Boss[k].x][Boss[k].y]=4;

}

}

}

for(k=0;kBossNum;k++)

{

//Boss敌机撞到我机

if((position_x==Boss[k].x)(position_y==Boss[k].y)||(position_x+1==Boss[k].x)(position_y-1==Boss[k].y)||(position_x+1==Boss[k].x)(position_y+1==Boss[k].y)||(position_x+2==Boss[k].x)(position_y+1==Boss[k].y)||(position_x+2==Boss[k].x)(position_y-1==Boss[k].y))

{

mciSendString("closeexmusic",NULL,0,NULL);

//先把前面一次的音乐关闭

mciSendString("openD:\\plane\\explode.mp3aliasexmusic",NULL,0,NULL);

//打开音乐

mciSendString("playexmusic",NULL,0,NULL);

//仅播放一次

color(11);

printf("\n游戏结束!\n");

Sleep(3000);

system("pause");

exit(0);

}

//Boss敌机跑出显示屏幕

if(Boss[k].xHigh)

{

canvas[Boss[k].x][Boss[k].y]=0;

Boss[k].x=rand()%2;//产生新的Boss敌机

Boss[k].y=rand()%Width;

canvas[Boss[k].x][Boss[k].y]=4;

score--;//减分

}

}

//与用户输入有关的更新

voidupdateWithInput()

charinput;

if(_kbhit())//判断是否有输入

{

input=_getch();//根据用户的不同输入来移动,不必输入回车

if(input=='a'position_y1||input=='A')

{

canvas[position_x][position_y]=0;

canvas[position_x+1][position_y-1]=0;

canvas[position_x+1][position_y]=0;

canvas[position_x+1][position_y+1]=0;

position_y--;//位置左移

canvas[position_x][position_y]=1;

canvas[position_x+1][position_y-1]=1;

canvas[position_x+1][position_y]=1;

canvas[position_x+1][position_y+1]=1;

}

elseif(input=='d'position_yWidth-2||input=='D')

{

canvas[position_x][position_y]=0;

canvas[position_x+1][position_y-1]=0;

canvas[position_x+1][position_y]=0;

canvas[position_x+1][position_y+1]=0;

position_y++;//位置右移

canvas[position_x][position_y]=1;

canvas[position_x+1][position_y-1]=1;

canvas[position_x+1][position_y]=1;

canvas[position_x+1][position_y+1]=1;

}

elseif(input=='w'position_x1||input=='W')

{

canvas[position_x][position_y]=0;

canvas[position_x+1][position_y-1]=0;

canvas[position_x+1][position_y]=0;

canvas[position_x+1][position_y+1]=0;

position_x--;//位置上移

canvas[position_x][position_y]=1;

canvas[position_x+1][position_y-1]=1;

canvas[position_x+1][position_y]=1;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论