計算機技術(shù)基礎(chǔ)(c語言)課程設(shè)計-潛艇大戰(zhàn).doc_第1頁
計算機技術(shù)基礎(chǔ)(c語言)課程設(shè)計-潛艇大戰(zhàn).doc_第2頁
計算機技術(shù)基礎(chǔ)(c語言)課程設(shè)計-潛艇大戰(zhàn).doc_第3頁
計算機技術(shù)基礎(chǔ)(c語言)課程設(shè)計-潛艇大戰(zhàn).doc_第4頁
計算機技術(shù)基礎(chǔ)(c語言)課程設(shè)計-潛艇大戰(zhàn).doc_第5頁
已閱讀5頁,還剩9頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

計算機技術(shù)基礎(chǔ)課程設(shè)計C語言設(shè)計報告題目:簡單潛艇大戰(zhàn)一、 選題背景:隨著人們生活水平的提高,人們對精神生活的要求也隨之提高了,當(dāng)然,娛樂也成了人們生活中必不可少的一部分,為此,我用C語言編輯了一個簡單的簡單潛艇大戰(zhàn)游戲程序。它操作起來簡單方便,運行速度快。二、設(shè)計思想:簡單潛艇大戰(zhàn)就是玩家和電腦對戰(zhàn)的游戲,玩家在確保本身不被敵人擊中的情況下?lián)糁袛橙藙t得分,若被敵人擊中游戲結(jié)束。此程序利用了if,for,while等多種語句進(jìn)行了編譯,而且多次使用了for語句進(jìn)行了循環(huán),用if語句進(jìn)行操作,if語句是用來處理條件選擇的一種語句。此游戲可以任意移動玩家的位置。三、程序流程圖結(jié)束若電腦中彈則玩家得分游戲繼續(xù),若玩家中彈則游戲結(jié)束圖形初始化開始玩家敵人判斷是否攻擊敵人判斷是否攻擊玩家否否(敵人在攻擊范圍之內(nèi)) (玩家在攻擊范圍之內(nèi))四、程序清單#include #include #include #include #define KEY_ESC 0x01#define KEY_SPACE 0x39#define KEY_LEFT 0x4b#define KEY_RIGHT 0x4dint speed=10000;char key_state128,key_pressed128;/*鍵盤操作用的變量*/int score=0;/*得分*/char scorestr10;/*輸出分?jǐn)?shù)的變量*/struct Fire/*子彈的結(jié)構(gòu)體*/int x;int y;int start;/*是否發(fā)射炮彈*/amyfire6;/*屏幕上最多有5個敵人可以發(fā)子彈*/struct Play/*玩家的結(jié)構(gòu)體*/int x;int y;struct Fire fire6;life;play;struct Amy/*敵人的結(jié)構(gòu)體*/int x;int y;int speed;/*敵人的速度*/int color;int direction;life;amy6;void InitGraph(void);/*圖形初始化*/void CloseGraph(void);/*圖形結(jié)束*/void GamePlay(void);/*具體玩游戲*/void DrawPlay(void);/*畫玩家*/void DrawAmy(int i);/*畫敵人*/void DrawFire(int x,int y,int n);/*畫子彈,0去除,1顯示*/void DrawAmyFire(int x,int y,int n);/*畫子彈,0去除,1顯示*/void DrawBlack(int x,int y,int color);/*去除原來地方的物體*/void PrScore();/*輸出得分*/int GetKey(int ScanCode);/*這里開始都是按鍵函數(shù)*/void interrupt far (*OldInt9Handler)();void far interrupt NewInt9();void InstallKeyboard();void ShutDownKeyboard();void main(void)InitGraph();/*圖形初始化*/GamePlay();/*具體玩游戲*/CloseGraph();/*圖形結(jié)束*/void InitGraph(void)/*圖形初始化*/int gd=DETECT,gm;initgraph(&gd,&gm,c:tc);cleardevice();InstallKeyboard();void DrawPlay(void)/*畫玩家*/setfillstyle(SOLID_FILL,6);bar(play.x-20,play.y-10,play.x+20,play.y);setfillstyle(SOLID_FILL,4);bar(play.x-20,play.y-10,play.x-10,play.y);void DrawAmy(int i)/*畫敵人*/setfillstyle(SOLID_FILL,amyi.color);bar(amyi.x-20,amyi.y-10,amyi.x+20,amyi.y);setfillstyle(SOLID_FILL,GREEN);if(amyi.direction=1)bar(amyi.x-20,amyi.y-10,amyi.x-10,amyi.y);elsebar(amyi.x+10,amyi.y-10,amyi.x+20,amyi.y);void DrawBlack(int x,int y,int color)/*去除原來地方的物體*/setfillstyle(SOLID_FILL,color);bar(x-20,y-10,x+20,y);void DrawFire(int x,int y,int n)/*畫子彈,0去除,1顯示*/if(n=0)setfillstyle(SOLID_FILL,BLUE);elsesetfillstyle(SOLID_FILL,0);setcolor(BLUE);fillellipse(x,y,5,5);void DrawAmyFire(int x,int y,int n)/*畫子彈,0去除,1顯示*/if(n=0)setfillstyle(SOLID_FILL,BLUE);elsesetfillstyle(SOLID_FILL,YELLOW);/*敵人的炮彈是黃的*/setcolor(BLUE);fillellipse(x,y,3,3);void PrScore()/*輸出得分*/setfillstyle(SOLID_FILL,8);/*把原來分?jǐn)?shù)去除*/bar(30,0,200,40);setcolor(11);/*輸出新得分*/settextstyle(0,0,2);sprintf(scorestr,%d,score);outtextxy(30,20,scorestr);void GamePlay(void)/*具體玩游戲*/int i,j;setfillstyle(SOLID_FILL,BLUE);bar(0,100,640,480);setfillstyle(SOLID_FILL,8);bar(0,0,640,99);play.x=200;play.y=99;/*玩家初始位置*/for(i=0;i6;i+)play.firei.start=0;/*一開始的子彈都為沒發(fā)射狀態(tài)*/amyfirei.start=0;amyi.life=0;play.life=1;DrawPlay();/*玩家初始位置*/PrScore();/*輸出得分*/randomize();while(1) for(i=0;i6;i+)/*查找玩家是否有發(fā)射的子彈*/ if(play.firei.start=1)/*發(fā)射的子彈*/ DrawFire(play.firei.x,play.firei.y,0);/*去除原來子彈位置*/ play.firei.y+=3; DrawFire(play.firei.x,play.firei.y,1);/*顯示新位置*/ for(j=0;j(amyj.x-22)&play.firei.x(amyj.y-14)&play.firei.y480)/*子彈超出屏幕就等于消失*/ play.firei.start=0; DrawFire(play.firei.x,play.firei.y,0); for(i=0;i6;i+)/*敵人炮彈的產(chǎn)生*/ if(amyi.life=1&amyi.color14&amyfirei.start=0)/*敵人發(fā)射炮彈的條件*/ amyfirei.start=1; amyfirei.x=amyi.x; amyfirei.y=amyi.y-10; for(i=0;i(play.x-14)&amyfirei.x(play.x+14)&(amyfirei.y+3)100)/*擊中玩家*/ play.life=0; amyfirei.start=0; DrawAmyFire(amyfirei.x,amyfirei.y,0); DrawBlack(play.x,play.y,8);/*去除玩家*/ break; if(amyfirei.y96)/*敵人炮彈超出海洋就消失*/ amyfirei.start=0; setfillstyle(SOLID_FILL,8); setcolor(8); fillellipse(amyfirei.x,amyfirei.y,3,3); delay(speed);/*間隔時間可以自己定*/ if(play.life!=1)/*玩家被擊中*/ break; for(i=0;i6;i+) if(amyi.life=0)/*出現(xiàn)一個敵人后就跳出循環(huán)*/ amyi.life=1; amyi.color=rand()%4+10;/*敵人的顏色*/ amyi.y=rand()%300+130;/*高度隨機*/ amyi.speed=2+rand()%10;/*敵人的移動速度隨機*/ amyi.direction=rand()%2;/*敵人的移動方向,0左邊,1右邊出來*/ if(amyi.direction=0) amyi.x=-20; else amyi.x=660; break; if(GetKey(KEY_ESC)/*退出鍵*/ break; if(GetKey(KEY_SPACE)/*發(fā)射*/ for(i=0;i6;i+) if(play.firei.start=0)/*發(fā)射一顆子彈后跳出循環(huán)*/ play.firei.x=play.x; play.firei.y=105; play.firei.start=1; break; if(GetKey(KEY_RIGHT)&play.x20)/*左鍵的控制*/ DrawBlack(play.x,play.y,8); play.x-=10; DrawPlay(); for(i=0;i660|amyi.x-20)/*敵人超出屏幕范圍就消失*/ amyi.life=0; if(play.life=0)/*被擊中失敗的話*/ setcolor(6); settextstyle(0,0,3); outtextxy(250,40,GAME OVER);while(1)if(GetKey(KEY_ESC)/*結(jié)束游戲按ESC*/break;void CloseGraph(void)/*圖形結(jié)束*/ShutDownKeyboard();closegraph();void far interrupt NewInt9(void)unsigned char ScanCode,temp;ScanCode=inportb(0x60);temp=inportb(0x61);outportb(0x61,temp | 0x80);outportb(0x61,temp & 0x7f);if(ScanCode&0x80) ScanCode&=0x7f; key_stateScanCode=0; else key_stateScanCode=1; key_pressedScanCode=1; outportb(0x20,0x20);void InstallKeyboard(void)int i;for(i=0;i128;i+)key_statei=key_pressedi=0;OldInt9Handler=getvect(9); /*中斷向量值*/setvect(9,NewInt9); /*中斷程序NewInt9地址存入指定的中斷向量表中INT 09H*/void ShutDownKeyboard(void)setvect(9,OldInt9Handler);int GetKey(int ScanCode)int res;res=

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論