




版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 安全協(xié)議責(zé)任書模板
- 數(shù)字媒體服務(wù)協(xié)議合同
- 農(nóng)業(yè)林業(yè)技術(shù)員勞務(wù)協(xié)議
- 雇傭關(guān)系協(xié)議補(bǔ)充協(xié)議
- 出租車租賃與運(yùn)營管理服務(wù)協(xié)議
- 微免試題及答案
- 王者榮耀輔助試題及答案
- 2025年新版營業(yè)執(zhí)照租賃策劃與執(zhí)行協(xié)議
- 2025年合作項(xiàng)目策劃與合作方協(xié)議范本
- 2025年新能源汽車電池維修協(xié)議
- 揚(yáng)塵污染控制工作臺帳(揚(yáng)塵防治全套資料)
- 2021年英語專業(yè)四級TEM4考試真題和答案
- 各科室臨床路徑(衛(wèi)生部)2022
- 學(xué)習(xí)宣傳貫徹反有組織犯罪法工作經(jīng)驗(yàn)材料
- 大學(xué)生德育論文范文3000字
- 美術(shù)作品使用授權(quán)書.docx
- 金屬軋制工藝學(xué)1軋制過程基本參數(shù)
- 低壓電纜頭制作安裝施工工藝標(biāo)準(zhǔn)
- 初中英語語法講解PPT課件(共210頁)
- 排骨架檢驗(yàn)標(biāo)準(zhǔn)_圖文
- 工程變更申請表(ECR)
評論
0/150
提交評論