




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第C語言實現(xiàn)飛機大戰(zhàn)程序設計本文實例為大家分享了C語言實現(xiàn)飛機大戰(zhàn)的具體代碼,供大家參考,具體內容如下
作業(yè)要求:
1.游戲當中出現(xiàn)多類型敵人
2.游戲中能進行存檔和讀檔
3.玩家控制的飛機由多字符組成
4.游戲過程中沒有出現(xiàn)BUG
5.游戲顯示制作者信息
6.游戲當中帶有BGM
7.其他個性化設定
成效:
代碼:
#includestdio.h
#includestdlib.h
#includeconio.h
#includewindows.h
#includemmsystem.h
//導入聲音頭文件
#pragmacomment(lib,"Winmm.lib")
//導入聲音頭文件庫
#defineHigh20
//游戲畫面尺寸
#defineWidth30
#defineEnemyNum5
//敵機個數(shù)
#defineBossNum2
//Boss機個數(shù)
intflag;
//飛機狀態(tài)
intcolor(intc);
//更改文字顏色
voidexplation();
//游戲提示
voidshow();
//顯示游戲界面
voidendgame();
//游戲結束
voidstartup();
//數(shù)據(jù)初始化
voidFileRead();
//讀檔
//全局變量
intposition_x,position_y;
//飛機位置
structenemy{
intx;
inty;
intlife;
}Boss[BossNum],enemy[EnemyNum];
//敵機位置
intcanvas[High][Width]={0};
//二維數(shù)組存儲游戲畫布中對應的元素
//0為空格,1為飛機8,2為子彈o,3為敵機0,4為Boss敵機A
intscore;
//得分
intnumber;
//銷毀敵機數(shù)
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("飛機大戰(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:前進
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("游戲制作人:李歆靈
學號:420250320
聯(lián)系方式);
color(14);
gotoxy(33,20);
printf("請選擇1234:");
color(14);
scanf("%d",
//輸入選項
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分別是控制飛機的移動,空格發(fā)射子彈");
gotoxy(10,9);
printf("2.O是普通敵機(需一發(fā)子彈),A是Boss敵機(需兩發(fā)子彈)");
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();
//數(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;
//銷毀敵機數(shù)
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);//循環(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);
//關閉文件
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++;
//分數(shù)加1
number++;
//銷毀敵機數(shù)加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++;
//分數(shù)加2
number++;
//銷毀敵機數(shù)加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();//根據(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)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 幫會搶親活動方案
- 布丁店開業(yè)活動方案
- 工匠頒獎活動方案
- 市發(fā)改委宣教活動方案
- 布藝拼貼活動方案
- 小生活甲蟲活動方案
- 工廠朗讀活動方案
- 小班故事分享活動方案
- 布置貨架活動方案
- 師生捐贈活動方案
- 物業(yè)夏季安全培訓
- 道路工程制圖與識圖課件:識讀公路路線工程圖
- 碳匯效益評估體系-深度研究
- 初級無機化學反應生產工職業(yè)技能鑒定理論考試題庫(含答案)
- 體育培訓協(xié)議合同范本
- 2025年離婚協(xié)議紙質模板電子版
- 2024-2025學年度第一學期七年級英語期末試卷
- 2025年春新北師大版數(shù)學一年級下冊課件 綜合實踐 設計教室裝飾圖
- 2025年陜西延長石油集團礦業(yè)公司招聘筆試參考題庫含答案解析
- 廣東省茂名市2023-2024學年高一下學期7月期末考試 政治 含解析
- 2025-2030年中國氯化聚醚行業(yè)市場現(xiàn)狀分析及前景趨勢調研報告
評論
0/150
提交評論