C語言實(shí)現(xiàn)飛機(jī)大戰(zhàn)程序設(shè)計(jì)_第1頁
C語言實(shí)現(xiàn)飛機(jī)大戰(zhàn)程序設(shè)計(jì)_第2頁
C語言實(shí)現(xiàn)飛機(jī)大戰(zhàn)程序設(shè)計(jì)_第3頁
C語言實(shí)現(xiàn)飛機(jī)大戰(zhàn)程序設(shè)計(jì)_第4頁
C語言實(shí)現(xiàn)飛機(jī)大戰(zhàn)程序設(shè)計(jì)_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第C語言實(shí)現(xiàn)飛機(jī)大戰(zhàn)程序設(shè)計(jì)本文實(shí)例為大家分享了C語言實(shí)現(xiàn)飛機(jī)大戰(zhàn)的具體代碼,供大家參考,具體內(nèi)容如下

作業(yè)要求:

1.游戲當(dāng)中出現(xiàn)多類型敵人

2.游戲中能進(jìn)行存檔和讀檔

3.玩家控制的飛機(jī)由多字符組成

4.游戲過程中沒有出現(xiàn)BUG

5.游戲顯示制作者信息

6.游戲當(dāng)中帶有BGM

7.其他個(gè)性化設(shè)定

成效:

代碼:

#includestdio.h

#includestdlib.h

#includeconio.h

#includewindows.h

#includemmsystem.h

//導(dǎo)入聲音頭文件

#pragmacomment(lib,"Winmm.lib")

//導(dǎo)入聲音頭文件庫

#defineHigh20

//游戲畫面尺寸

#defineWidth30

#defineEnemyNum5

//敵機(jī)個(gè)數(shù)

#defineBossNum2

//Boss機(jī)個(gè)數(shù)

intflag;

//飛機(jī)狀態(tài)

intcolor(intc);

//更改文字顏色

voidexplation();

//游戲提示

voidshow();

//顯示游戲界面

voidendgame();

//游戲結(jié)束

voidstartup();

//數(shù)據(jù)初始化

voidFileRead();

//讀檔

//全局變量

intposition_x,position_y;

//飛機(jī)位置

structenemy{

intx;

inty;

intlife;

}Boss[BossNum],enemy[EnemyNum];

//敵機(jī)位置

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

//二維數(shù)組存儲游戲畫布中對應(yīng)的元素

//0為空格,1為飛機(jī)8,2為子彈o,3為敵機(jī)0,4為Boss敵機(jī)A

intscore;

//得分

intnumber;

//銷毀敵機(jī)數(shù)

intBulletWidth;

//子彈寬度

intEnemyMoveSpeed;

//敵機(jī)移動速度

//光標(biāo)移動到(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;

//隱藏光標(biāo)

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("飛機(jī)大戰(zhàn)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("空格:發(fā)射子彈

W:前進(jìn)

A:左移

D:右移

S:后退\n");

gotoxy(34,11);

printf("1.開始游戲(play)");

gotoxy(34,13);

printf("2.游戲規(guī)則(rule)");

gotoxy(34,15);

printf("3.讀取存檔(read)");

gotoxy(34,17);

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

color(15);

gotoxy(22,24);

printf("游戲制作人:李歆靈

學(xué)號:420250320

聯(lián)系方式);

color(14);

gotoxy(33,20);

printf("請選擇1234:");

color(14);

scanf("%d",

//輸入選項(xiàng)

switch(n)

{

case1:

flag=1;

system("cls");

break;

case2:

explation();

//游戲規(guī)則

break;

case3:

system("cls");//讀檔

break;

case4:

gotoxy(30,28);

exit(0);

//退出游戲

break;

default:

color(9);

gotoxy(33,22);

printf("請輸入1-4之間的數(shù)");

_getch();

//輸入任意鍵

system("cls");

//清屏

welcometogame();

}

//游戲規(guī)則

voidexplation()

inti,j=1;

system("cls");

color(15);

gotoxy(30,1);

printf("游戲規(guī)則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分別是控制飛機(jī)的移動,空格發(fā)射子彈");

gotoxy(10,9);

printf("2.O是普通敵機(jī)(需一發(fā)子彈),A是Boss敵機(jī)(需兩發(fā)子彈)");

gotoxy(10,12);

printf("3.擊敗普通敵機(jī)可獲得1分,擊敗Boss敵機(jī)可獲得2分");

gotoxy(10,15);

printf("4.敵機(jī)進(jìn)入下邊界減1分");

gotoxy(10,18);

printf("5.飛機(jī)碰到敵機(jī)會墜落");

gotoxy(10,21);

printf("6.按Z存檔,按P暫停游戲");

color(15);

gotoxy(25,23);

printf("/*****按任意鍵返回主頁面*****/");

_getch();

//按任意鍵返回主界面

system("cls");

welcometogame();

//數(shù)據(jù)初始化

voidstartup()

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

//打開背景音樂

mciSendString("playbkmusic",NULL,0,NULL);//循環(huán)播放

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;

//銷毀敵機(jī)數(shù)

BulletWidth=0;

EnemyMoveSpeed=30;

HideCursor();

//光標(biāo)

//存檔代碼

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);

//關(guān)閉文件

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);//循環(huán)播放

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);

//關(guān)閉文件

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);//光標(biāo)移動到原點(diǎn)位置,以下重畫清屏

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");

//輸出飛機(jī)8

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

printf("o");

//輸出子彈o

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

printf("O");

//輸出敵機(jī)O

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

printf("A");

//輸出Boss敵機(jī)A

else

printf("");

}

printf("\n");

}

color(14);

printf("\n");

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

printf("銷毀敵機(jī):%d\n\n",number);

Sleep(20);

//與用戶輸入無關(guān)的更新

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))

//子彈擊中敵機(jī)

{

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

//先把前面一次的音樂關(guān)閉

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

//打開音樂

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

//僅播放一次

score++;

//分?jǐn)?shù)加1

number++;

//銷毀敵機(jī)數(shù)加1

if(number%6==0EnemyMoveSpeed3)

//達(dá)到一定積分后,敵機(jī)變快

EnemyMoveSpeed--;

if(number%12==0)

//達(dá)到一定積分后,子彈變厲害

BulletWidth++;

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

//殘影問題

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

//產(chǎn)生新的敵機(jī)

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敵機(jī)

{

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

//先把前面一次的音樂關(guān)閉

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

//打開音樂

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

//僅播放一次

Boss[k].life--;

//Boss敵機(jī)生命值減1

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

{

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

//殘影問題

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

//產(chǎn)生新Boss敵機(jī)

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

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

canvas[i][j]=0;

//子彈消失

Boss[k].life=2;

score++;score++;

//分?jǐn)?shù)加2

number++;

//銷毀敵機(jī)數(shù)加1

}

}

}

//子彈向上移動

canvas[i][j]=0;

if(i0)

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

}

}

}

staticintspeed=0;

if(speedEnemyMoveSpeed)

speed++;

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

{

//敵機(jī)撞到我機(jī)

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);

//先把前面一次的音樂關(guān)閉

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

//打開音樂

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

//僅播放一次

color(11);

printf("\n游戲結(jié)束!\n");

Sleep(3000);

system("pause");

exit(0);

}

//敵機(jī)跑出顯示屏幕

if(enemy[k].xHigh)

{

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

enemy[k].x=rand()%2;//產(chǎn)生新的敵機(jī)

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

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

score--;//減分

}

if(speed==EnemyMoveSpeed)

{

//敵機(jī)下落

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敵機(jī)下落

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敵機(jī)撞到我機(jī)

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);

//先把前面一次的音樂關(guān)閉

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

//打開音樂

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

//僅播放一次

color(11);

printf("\n游戲結(jié)束!\n");

Sleep(3000);

system("pause");

exit(0);

}

//Boss敵機(jī)跑出顯示屏幕

if(Boss[k].xHigh)

{

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

Boss[k].x=rand()%2;//產(chǎn)生新的Boss敵機(jī)

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

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

score--;//減分

}

}

//與用戶輸入有關(guān)的更新

voidupdateWithInput()

charinput;

if(_kbhit())//判斷是否有輸入

{

input=_getch();//根據(jù)用戶的不同輸入來移動,不必輸入回車

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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論