国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于C語言的飛機作戰(zhàn)游戲系統(tǒng)設(shè)計與實現(xiàn)

2024-10-31 00:00:00陳趙云
現(xiàn)代信息科技 2024年17期

摘 要:C語言是國內(nèi)高校電子信息類相關(guān)專業(yè)入門語言,也是相關(guān)專業(yè)畢業(yè)生勝任專業(yè)領(lǐng)域崗位的必備技能之一。C語言雖重要但難學(xué),編程應(yīng)用難是主要原因。游戲開發(fā)作為C語言的重要應(yīng)用領(lǐng)域,具有比其他應(yīng)用領(lǐng)域更簡便、易學(xué)的優(yōu)點。文章介紹了基于C語言的飛機作戰(zhàn)游戲,該游戲?qū)崿F(xiàn)了字母鍵和鍵盤方向鍵控制飛機上下左右移動、空格鍵發(fā)射子彈消滅敵機、實時記錄得分、闖關(guān)升級等基本功能。文章從創(chuàng)建項目到主要功能實現(xiàn)都做了詳細說明,同時也分享了所有關(guān)鍵代碼,期望能對相關(guān)人員有所幫助。

關(guān)鍵詞:編程應(yīng)用;字母鍵;飛機作戰(zhàn);關(guān)鍵代碼

中圖分類號:TP311 文獻標識碼:A 文章編號:2096-4706(2024)17-0111-05

0 引 言

計算機編程語言是計算機科學(xué)和軟件工程領(lǐng)域的重要組成部分[1-4]。C語言是面向過程的結(jié)構(gòu)化編程語言[5],它既能勝任系統(tǒng)軟件開發(fā),又能進行應(yīng)用軟件開發(fā);既具有高級語言符合人的思維、功能強大且易學(xué)易懂的特點,又具有能夠控制硬件且程序執(zhí)行效率高的突出優(yōu)點。游戲開發(fā)是C語言重要應(yīng)用領(lǐng)域[6]。飛機作戰(zhàn)是一款非常經(jīng)典的飛行射擊類游戲,玩家通過操縱戰(zhàn)斗機上下左右移動,利用射擊按鈕發(fā)射子彈攻擊敵機,敵機不斷從屏幕上方出現(xiàn),玩家需要及時發(fā)射子彈將其擊落。本文介紹基于C語言的飛機作戰(zhàn)游戲系統(tǒng)完整開發(fā)流程和關(guān)鍵代碼,系統(tǒng)不依賴其他任何圖形化編程軟件或插件,涵蓋了飛機作戰(zhàn)游戲的所有重要元素。

1 功能概述

本游戲系統(tǒng)完全采用C語言編寫,實現(xiàn)了飛機作戰(zhàn)游戲所有主要功能,具體如下:

1)方向鍵和游戲鍵同時控制飛機移動。本系統(tǒng)實現(xiàn)了鍵盤方向鍵和游戲鍵(ASDW,不區(qū)分大小寫)[7]同時控制飛機移動的功能,滿足不同習(xí)慣用戶需求。

2)游戲開始倒計時。進入游戲界面后用戶按任意鍵開始游戲并有開始倒計時,初次體驗的用戶可以先查看界面中的游戲說明再開始游戲,老用戶可以直接開始游戲,節(jié)省等待時間。

3)游戲無延時、不屏o0J5ha7a3GX/pVFgzsN6/wcJZM1gGSflM2G0UfR6aPs=閃且有升級功能。本系統(tǒng)采用句柄函數(shù)和實時函數(shù)解決屏閃、延時等問題,運行相對流暢;本系統(tǒng)設(shè)計了升級功能,當用戶使用初始子彈消滅一定數(shù)量的敵機之后,子彈威力會逐步加強,敵機的下落速度也逐級加快。

4)用戶得分實時更新。

5)戰(zhàn)機生命次數(shù)可調(diào)可控。

2 系統(tǒng)流程

本系統(tǒng)基于C語言和Visual Studio平臺,系統(tǒng)設(shè)計完成并測試通過后會自動生成.exe格式可執(zhí)行文件,雙擊.exe可執(zhí)行文件或單擊網(wǎng)頁上程序運行鏈接即可開始游戲。進入游戲主界面后游戲處于暫停狀態(tài),單擊任意鍵開始游戲,玩家通過操縱飛機躲閃敵機進攻并通過發(fā)射子彈消滅敵機得分。如果戰(zhàn)機被敵機碰撞三次則游戲失敗,戰(zhàn)機在三次生命有效期內(nèi)每消滅20架敵機則火力升級一檔,伴隨敵機攻擊速度也加快一檔,當消滅100架敵機則游戲通關(guān),系統(tǒng)流程如圖1所示。

3 系統(tǒng)實現(xiàn)

3.1 創(chuàng)建項目

具體步驟如下:

1)打開Visual Studio平臺,單擊文件(F)菜單—新建(N)—項目(P)。在彈出的對話框左側(cè)選擇“Visual C++”,然后在右側(cè)選擇“Win32控制臺應(yīng)用程序”,輸入項目名稱“plane”,選擇項目保存路徑并單擊“確定”。

2)在彈出的程序向?qū)υ捒蛑袉螕簟跋乱徊健?,在設(shè)置對話框中勾選“空項目”,并取消勾選“安全開發(fā)生命周期檢查”,單擊“完成”即完成空項目創(chuàng)建。

3)右鍵單擊plane項目下的源文件—添加—新建項,為項目新建名為“aircraft.c”的源文件。

3.2 句柄函數(shù)解決屏閃[8]

在基于C語言的飛機作戰(zhàn)游戲中,戰(zhàn)機和敵機的實時移動依賴于主函數(shù)中的無限循環(huán)函數(shù)。為了消除殘影,一般使用system(“cls”)命令函數(shù)進行清屏,但是清屏函數(shù)會導(dǎo)致游戲畫面出現(xiàn)閃爍。本系統(tǒng)定義了gotoxy光標定位函數(shù)代替清屏函數(shù),解決了閃屏問題,并定義了hidecursor函數(shù)實現(xiàn)光標隱藏。函數(shù)的具體代碼如下:

void gotoxy(int x,int y){//光標定位函數(shù),代替system("cls")清屏

HANDLE handle=GetStdHandle(STD_OUTPUT_HANDLE);

COORD cor;

cor.X=x;

cor.Y=y;

SetConsoleCursorPosition(handle,cor);

}

void hidecursor(){//隱藏光標解決屏閃問題,如使用上面的函數(shù)會產(chǎn)生屏閃,則再調(diào)用這個函數(shù):

CONSOLE_CURSOR_INFO cursor={1,0};

HANDLE handle=GetStdHandle(STD_OUTPUT_HANDLE);

SetConsoleCursorInfo(handle,&cursor);

}

3.3 游戲主界面和倒計時

飛機作戰(zhàn)游戲主界面包含游戲區(qū)和游戲說明區(qū)兩部分,開始游戲前,游戲區(qū)顯示“按任意鍵開始游戲!”提示字樣,按任意鍵開始游戲時會有3秒倒計時提示;游戲說明區(qū)說明游戲操作方法:按空格鍵射子彈,ASDW或鍵盤方向鍵移動戰(zhàn)機,運行效果如圖2所示。Intruction是游戲主界面功能函數(shù),startTime是實現(xiàn)倒計時功能函數(shù),Show是定義戰(zhàn)機、敵機和子彈函數(shù)。詳細代碼如下:

void Intruction(){

gotoxy(WIDTH+2,HEIGHT/2-5); printf("游戲說明:\n");

gotoxy(WIDTH+2,HEIGHT/2-3); printf("ADWS或方向鍵移動飛機?。躰");

gotoxy(WIDTH+2,HEIGHT/2-1); printf("使用空格鍵發(fā)射子彈?。躰");

for(i=0;i<=WIDTH;i++){

gotoxy(i,HEIGHT); printf("-");

}

for(i=0;i<=HEIGHT;i++){

gotoxy(WIDTH,i); printf("|");

}

}

void startTime(){//游戲倒計時功能

gotoxy(WIDTH/2-10,HEIGHT/2-2); printf("按任意鍵開始游戲?。躰");

system("pause>nul");

gotoxy(WIDTH/2-10,HEIGHT/2); printf("游戲開始倒計時:3\n");

Sleep(1000);

gotoxy(WIDTH/2-10,HEIGHT/2); printf("游戲開始倒計時:2\n");

Sleep(1000);

gotoxy(WIDTH/2-10,HEIGHT/2); printf("游戲開始倒計時:1\n");

Sleep(1000);

}

void Show(){//游戲界面

gotoxy(0,0); hidecursor();

for(i=0;i<HEIGHT;i++){

for(j=0;j<WIDTH;j++){

if(gameMap[i][j]==0) printf(" ");

else if(gameMap[i][j]==1) printf("*");

else if(gameMap[i][j]==2) printf("^");

else if(gameMap[i][j]==3) printf("$");

}

printf("\n");

}

}

3.4 字母鍵和方向鍵控制戰(zhàn)機移動[9]

本系統(tǒng)設(shè)計了planeMove函數(shù)實現(xiàn)戰(zhàn)機移動功能。函數(shù)里面使用kbhit()函數(shù)判斷玩家是否按下鍵盤[5],如果鍵盤有按鍵按下則使用getch函數(shù)實時獲取鍵盤按鍵,通過條779eb34cf8de53ac2fe92a0ad5bc0ffa件判斷語句實現(xiàn)玩家通過鍵盤方向鍵或ASDW字母鍵控制戰(zhàn)機上下左右移動。詳細代碼如下:

void planeMove(){

int left,right;

left=plx-bulletWidth/2;

right=plx+bulletWidth/2;

if(kbhit()){

ch=getch();

if(ch=='a' || ch=='A' ||ch==75){

if(left>0){ gameMap[ply][plx]=0; plx--; gameMap[ply][plx]=1; }

}

else if(ch=='d' || ch=='D' || ch==77){

if(right<WIDTH-1){gameMap[ply][plx]=0; plx++; gameMap[ply][plx]=1; }

}

else if(ch=='w' || ch=='W' || ch==72){

if(ply>0){gameMap[ply][plx]=0; ply--; gameMap[ply][plx]=1; }

}

else if(ch=='s' || ch=='S' || ch==80){

if(ply<HEIGHT-1){ gameMap[ply][plx]=0; ply++; gameMap[ply][plx]=1; }

}

else if(ch==' '){

if(left<0) left=0;

if(right>WIDTH-1) right=WIDTH-1;

for(i=left;i<=right;i++)gameMap[ply-1][i]=2;

}

}

}

3.5 敵機的產(chǎn)生和移動等功能實現(xiàn)

本系統(tǒng)定義EplaneMove函數(shù)實現(xiàn)敵機移動等功能。首先,函數(shù)通過for循環(huán)產(chǎn)生EnNums架敵機,在循環(huán)函數(shù)中先判斷敵機與戰(zhàn)機坐標是否相同,相同則表示戰(zhàn)機被擊中,戰(zhàn)機生命減少一次;再判斷敵機是否降落到游戲區(qū)底部,降落至底部則敵機消失,同時調(diào)用隨機函數(shù)生成新的敵機。其次,敵機下落是通過保持敵機橫坐標不變、縱坐標+1來實現(xiàn)。最后,通過雙重for循環(huán)判斷戰(zhàn)機子彈是否消滅敵機來判斷是否得分。函數(shù)具體代碼如下:

void EplaneMove(){

for(m=0;m<EnNums;m++){

if(EPlane[m].eny==ply && EPlane[m].enx==plx){

DieTime--;

if(DieTime<=0){

printf("Game Over!\n"); system("pause");

Sleep(2000); exit(0);

}else{plx=WIDTH/2; ply=HEIGHT-2; gameMap[ply][plx]=1; }

}

else if(EPlane[m].eny>=HEIGHT-1){

gameMap[EPlane[m].eny][EPlane[m].enx]=0;

EPlane[m].enx=rand()%WIDTH; EPlane[m].eny=rand()%3;

gameMap[EPlane[m].eny][EPlane[m].enx]=3;continue;

}

gameMap[EPlane[m].eny][EPlane[m].enx]=0;

EPlane[m].eny++;

gameMap[EPlane[m].eny][EPlane[m].enx]=3;

for(i=0;i<HEIGHT;i++){

for(j=0;j<WIDTH;j++){

if(gameMap[i][j]==2){

for(k=0;k<EnNums;k++){

if(EPlane[k].eny==i && EPlane[k].enx==j){

score++;

if(score>100){

gotoxy(WIDTH/2-10,HEIGHT/2-2);

printf("恭喜通關(guān)?。躰"); system("pause");

Sleep(2000); exit(0);

}

if(score%20==0 &&bulletWidth<5){bulletWidth+=2; WTime-=50; }

gameMap[EPlane[k].eny][EPlane[k].enx]=0;

EPlane[k].enx=rand()%WIDTH; EPlane[k].eny=rand()%3;

gameMap[EPlane[k].eny][EPlane[k].enx]=3;

gameMap[i][j]=0;//子彈與敵機相遇子彈也消失

}

}

gameMap[i][j]=0;

if(i>0) gameMap[i-1][j]=2;

}

} } } }

3.6 主函數(shù)和實時得分功能實現(xiàn)

玩家控制“*”代表的戰(zhàn)機,使用空格鍵發(fā)射子彈消滅“$”代表的敵機即可得分,得分會在游戲說明區(qū)域?qū)崟r更新。得分達到20的整數(shù)倍時,子彈威力逐步升級,同時敵機下降速度也逐漸加快。當用戶控制的飛機被敵機撞擊時便會失去一條命,如果被敵機撞擊三次則游戲失敗。當用戶在戰(zhàn)機三次生命有效期內(nèi)消滅100架敵機,即得到100分時即通關(guān)成功!在主函數(shù)中調(diào)用相關(guān)功能函數(shù),完成程序設(shè)計。主函數(shù)完整代碼如下,系統(tǒng)運行效果如圖3所示。

void main(){

gameInit();

Intruction();

startTime();

while(1){

Sleep(WTime); Show();

planeMove(); EplaneMove();

gotoxy(WIDTH+2,HEIGHT/2+1);

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

}

}

4 程序說明

具體說明如下:

1)獲取鍵盤按鍵動作函數(shù)kbhit()和實時獲取鍵盤字符函數(shù)getch()都調(diào)用conio.h頭文件[10]。

2)隨機數(shù)函數(shù)srand((int)time(NULL))和rand()都調(diào)用time.h頭文件。

3)HANDLE、COORD和CONSOLE_CURSOR_INFO等句柄操作要導(dǎo)入windows.h頭文件。

4)本系統(tǒng)采用句柄函數(shù)HANDLE解決屏閃問題,采用實時函數(shù)getch()代替鍵盤緩存函數(shù)getchar()解決延時問題。

5)gameInit是對定義變量進行初始化的函數(shù),由于篇幅限制,本文未給出,讀者可自行給對象賦初值。

5 結(jié) 論

C語言的應(yīng)用領(lǐng)域涵蓋操作系統(tǒng)開發(fā)、應(yīng)用軟件開發(fā)、嵌入式開發(fā)、網(wǎng)絡(luò)架構(gòu)系統(tǒng)開發(fā)和游戲開發(fā)。掌握編程語言的關(guān)鍵在于學(xué)以致用。綜合考慮,游戲開發(fā)是C語言最容易實現(xiàn)的應(yīng)用領(lǐng)域。學(xué)習(xí)者只要掌握C語言中鍵盤控制對象的基本方法并勤加練習(xí),很容易掌握C語言游戲開發(fā)技能。

參考文獻:

[1] 周金芝,楊明,仝海燕,等.C語言程序設(shè)計智能化教學(xué)改革探究 [J].六盤水師范學(xué)院學(xué)報,2022,34(2):88-96.

[2] 沈旭,孟巍,彭正超.多人在線版貪吃蛇3D游戲App設(shè)計與開發(fā) [J].計算技術(shù)與自動化,2019,38 (4):126-132.

[3] 佟子豪,喬秀明,馬新宇.基于銀河編輯器的即時戰(zhàn)略游戲設(shè)計 [J].智能計算機與應(yīng)用,2022,12(7):178-180+184.

[4] 車萬翔,竇志成,馮巖松,等.大模型時代的自然語言處理:挑戰(zhàn)、機遇與發(fā)展 [J].中國科學(xué):信息科學(xué),2023,53(9):1645-1687.

[5] 明日科技.C語言從入門到精通:第6版 [M].北京:清華大學(xué)出版社,2023.

[6] 徐士雯.VR游戲化教學(xué)在中職課堂中的研究與應(yīng)用——以C語言冒泡排序算法為例 [D].大連:遼寧師范大學(xué),2023.

[7] 趙啟升,李存華.C語言程序設(shè)計——游戲案例驅(qū)動 [M].南京:南京大學(xué)出版社,2021.

[8] 李雨哲,孫煉.基于C語言的貪吃蛇游戲設(shè)計 [J].河南科技,2020(7):31-33.

[9] 崔旭.面向知識建構(gòu)的在線協(xié)作編程學(xué)習(xí)過程設(shè)計研究 [J].長春:東北師范大學(xué),2022.

[10] 李曉蕾,王守佳,劉鈺周,等.基于Funcode平臺的《華夏寶藏》游戲設(shè)計與開發(fā) [J].現(xiàn)代計算機,2023,29(10):98-103.

作者簡介:陳趙云(1982.05—),男,漢族,江西豐城人,講師,碩士研究生,研究方向:物聯(lián)網(wǎng)技術(shù)應(yīng)用、Web系統(tǒng)開發(fā)。

收稿日期:2024-02-04

DOI:10.19850/j.cnki.2096-4706.2024.17.021

Design and Implementation of Aircraft Combat Game System Based on C Language

CHEN Zhaoyun

(School of Electronics and Information Engineering, Heyuan Polytechnic, Heyuan 517000, China)

Abstract: C language is the introductory language for electronic information related majors in domestic colleges and universities and it is one of the prerequisite skills for graduates of related majors to be competent in professional field positions. C language is important but difficult to learn, and the difficulty of programming application is the main reason. Game development, as an important application field of C language, has the advantage of being more convenient and easy to learn than other application fields. This paper introduces an aircraft combat game based on C language, and the game realizes basic functions such as using letter keys and keyboard direction keys to control the movement of the aircraft to move up and down, left and right, firing bullets with the space key to eliminate enemy aircraft, recording scores in real time, and passing and upgrading the level. This paper makes a detailed description from the creation of project to the realization of the main functions, and it also shares all the key codes, hoping to be helpful to the relevant personnel.

Keywords: programming application; letter key; aircraft combat; key code

青岛市| 门头沟区| 伊宁市| 西贡区| 敦煌市| 英超| 施秉县| 万宁市| 云梦县| 三都| 遂昌县| 武强县| 靖安县| 迭部县| 乡宁县| 象州县| 都匀市| 高雄县| 东丽区| 绥芬河市| 定远县| 新乡县| 延寿县| 武穴市| 扶绥县| 福州市| 喀什市| 天柱县| 方山县| 永城市| 临西县| 安龙县| 翁牛特旗| 新津县| 肃宁县| 巴塘县| 太仆寺旗| 沂源县| 无为县| 合肥市| 固镇县|