版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、用C語言實(shí)現(xiàn)火升空作者:日期:/計(jì)算機(jī)程序設(shè)計(jì)-課程設(shè)計(jì)(C語 言)題目:用c語言實(shí)現(xiàn)火箭的升空學(xué)院:專業(yè):班級(jí):姓名:指導(dǎo)教師:設(shè)計(jì)日期:選題背景:問題的提出:在科學(xué)技術(shù)高度發(fā)達(dá)的世界的今天,人類向太空的探索已經(jīng)進(jìn)入了熱門化階段,伴隨著我國航天事業(yè)的飛速發(fā)展,選擇了此次程序的設(shè)計(jì)。在此,用C語言編制的程序,實(shí)現(xiàn)了對火箭“升空”的“鍵盤”控制。.設(shè)計(jì)思路本程序是從畫火箭架、星星、火箭以及發(fā)射火箭進(jìn)行的完整過程。畫火箭架是用了調(diào)用函數(shù)DrawGun()函數(shù),這其中是用了兩個(gè)ellipse。函數(shù)畫上面的完整橢圓以及下面的半橢圓,然后分別用moveto()函數(shù)和lineto()函數(shù)進(jìn)行移動(dòng)畫線點(diǎn)和執(zhí)
2、行畫線過程。其中定義的rightx ,righty ,leftx ,lefty以及centryl ,rx ,ry ,變量對實(shí)現(xiàn)每個(gè)交叉點(diǎn)建的連線提供了條件,然后用circle()函數(shù)對三條線的端點(diǎn)分別用函數(shù)畫圓,就是用以上的方法實(shí)現(xiàn)了畫火箭發(fā)射架的過程;畫星星調(diào)用了 Drawstar()函數(shù),主要就是用srand()函數(shù)對每個(gè)象素進(jìn)行隨機(jī)分布以 及用random()函數(shù)和setcolor()函數(shù)對每一個(gè)象素進(jìn)行顏色處理,再用circle() 函數(shù)對每一個(gè)象素進(jìn)行了放大處理(在每一個(gè)象素上畫一個(gè)小圓);畫火箭調(diào)用了 DrawPlan()函數(shù),主要是用ellipse()函數(shù)對火箭的頂部畫橢圓,并再
3、次用 moveto()函數(shù)和lin eto() 函數(shù)對火箭的外觀輪廓進(jìn) 行畫線處理,定義的 width1 ,width2 ,y0 ,y1 ,y2 ,y3 ,y4等變量對火箭的繪制的精確有了保障。其中用的setcolor()函數(shù)設(shè)置了此畫線的顏色,并用了 setfillstyle()函數(shù)設(shè)置了歲火箭的閉合輪廓天填充的模式和顏色,再用了 floodfill() 函數(shù)對火箭輪廓不同顏色的填充,當(dāng)然這其 中也用了 setfillstyle() 函數(shù)的兩次不同的應(yīng)用。 為使火箭的圖象處于穩(wěn)定的狀態(tài), 當(dāng)完 成畫火箭后,又用了 imagesize()函數(shù)返回了保存此圖象所需要的字節(jié)數(shù)目,這對此次程 序是直
4、關(guān)重要的了;發(fā)射火箭是用了循環(huán)語句do-while結(jié)構(gòu),并用了 putimage()函數(shù)用與移動(dòng)火箭的圖象,方法是方法是用異或方式在屏幕上連續(xù)畫出火箭的圖像,每畫一次,新圖像和原來的位置相差兩個(gè)像素點(diǎn)。這個(gè)值越大,飛行速度越快。運(yùn)行的退出是用了free()函數(shù)釋放分配的塊,并用了 closegraph()函數(shù)關(guān)閉了圖形系統(tǒng),除了以上主要的介紹外,此程 序還用了如outtextxy() 函數(shù)(在指定的位置輸出指定的內(nèi)容,如繼續(xù)”,返回”等所需要的條件等),setbkco()lor 函數(shù)(設(shè)置屏幕的顏色),In stallGraph()函1數(shù)(圖形初始化函數(shù)),getch()函數(shù)(從鍵盤無回顯的接
5、收一個(gè)字符,用于控制火箭的 進(jìn)程的“端口”),等一系列的函數(shù)來設(shè)計(jì)此次程序。三、主要解決問題的方法及技術(shù)關(guān)鍵1. 主要問題及解決方法 火箭及火箭發(fā)射架的畫法問題。因?yàn)榛鸺突鸺芏疾皇呛唵蔚娜缯?、長方形等圖形,而是由一些橢圓和圓形組織而成的復(fù)雜圖形。這就對火箭以及火箭架的畫法提出了問題:如何畫?解決的方法是用moveto()和lineto()函數(shù)來連接火箭或火箭架的每一個(gè)交叉點(diǎn)(接點(diǎn))。 屏幕的美觀問題,即程序中對星星的顯示大小問題。此次程序如何用C語言來更加現(xiàn)實(shí)化的顯示星星?在這里有一個(gè)很巧妙的方法就是用circle()函數(shù)以每個(gè)像素為圓心畫一個(gè)小圓,這樣做不僅美觀,而且增加了現(xiàn)實(shí)性。 火
6、箭艱苦的移動(dòng)問題?;鸺m然是比較圓滿的畫出,但移動(dòng)火箭卻遇至U了困難,如何移動(dòng)?再這里,是用了do-while 結(jié)構(gòu)以及putimage()函數(shù),設(shè)置了每接收一個(gè)字符前后的位圖就相差幾個(gè)像素點(diǎn)(本程序中相差2個(gè)像素點(diǎn))。 滿天繁星的美麗天空如何制作?此程序中的解決方法是用一個(gè)for循環(huán)結(jié)構(gòu)和random()函數(shù)對“天空”中的星星進(jìn)行隨機(jī)分布顯示,這也是一種很巧妙的方法,這樣即成了滿天繁星的美觀場景。2. 技術(shù)關(guān)鍵 對火箭的移動(dòng)技術(shù)。(do-while 以及putimage()的應(yīng)用) 對火箭的位圖的字節(jié)保存過程。 四:程序流程圖f定義、賦值、包含的進(jìn)入主函數(shù),定義8#in elude I*F面
7、是對程序中的某些函數(shù)做預(yù)定義*I#in clude#in clude#in clude#in clude#defi ne ESC0x1bI*ESC的ASCII碼,十六進(jìn)制數(shù)*Ivoid In stallGraph(void);I*圖形初始化函數(shù)的聲明*Ivoid DrawG un( void);I*畫發(fā)射架函數(shù)的聲明*Ivoid DrawPla n(void);I*畫火箭函數(shù)的聲明*Ivoid DrawStar(void);I*畫星函數(shù)的聲明*Ivoid *buf;I*全局變量,用于存儲(chǔ)火箭的圖像*Iint x0=300;I*以下是火箭的位置初始化參數(shù)*Iint y0=340;int widt
8、h1=5;/*對火箭上部的寬度定義*/int width2=20;/*對火箭下部的寬度定義*/int height=25;int y1=8;int y2=15;int y3=23;int y4=38;main ()/*對火箭的高度定義*/int size;/*以下是定義幾個(gè)變量*/int i=0;int key;int stati on;InstallGraph(); /*圖形初始化函數(shù)*/i+=2;9setbkcolor(WHITE);/*設(shè)置背景顏色*/cleardevice(); /*清除屏幕的圖形*/setcolor(RED);/* 設(shè)置字的顏色*/outtextxy(80,100,R
9、eady!.Now,any key to SET OFF !);/*在屏幕上輸出字符*/DrawG un();/*調(diào)用畫火箭架函數(shù)*/getch();/*從鍵盤上無回顯的接收一個(gè)字符*/cleardevice();/*再一次清除屏幕圖形*/setbkcolor(BLUE);/*再次設(shè)置屏幕顏色*/DrawGu n();/*再一次調(diào)用畫火箭架函數(shù)*/DrawPla n();/*調(diào)用畫火箭函數(shù)*/DrawStar():/*調(diào)用畫星星函數(shù)*/setcolor(LIGHTRED);/*設(shè)置畫線的顏色*/doputimage(xO-width2,yO-height-3*width1-i,buf,XOR_
10、PUT);每畫一次,/*主循環(huán)開始,用于移動(dòng)火箭,方法是用異或方式在屏幕上連續(xù)畫出火箭的圖像,新圖像和原來的位置相差兩個(gè)像素點(diǎn)。這個(gè)值越大,飛行速度越快*/putimage(xO-width2,yO-height-3*width1-i,buf,XOR_PUT);key=getch();/*從鍵盤上無回顯的接收一個(gè)字符,并賦值*/if(y0-height-3*width1-i=0)/* 如果火箭發(fā)射成功*/outtextxy(60,100,Successfully! Press ESC to quit);幕上輸出字符*/*在屏if (key=ESC)if (y0-height-3*width1-
11、i0) /*如果在發(fā)射過程中*/cleardevice();/*再一次清除屏幕圖形*/outtextxy(100,100,Failue. What did you do?); /*在屏幕上輸出字符*/outtextxy(130,300,Press any key to quit.);/*在屏幕上輸出字符*/getch();/*再從鍵盤上無回顯的接收一個(gè)字符*/while(key!=ESC);free(buf);/*釋放已分配的塊*/closegraph();/*操作已經(jīng)完成,關(guān)閉圖形系統(tǒng)*/return 0;/*返回編輯界面*/void In stallGraph(void)/*圖形初始化函數(shù)
12、*/int grdriver=DETECT;/*以下是定義幾個(gè)變量*/17int grmode;int errorcode;char *errormsg; /*定義一個(gè)字符型指針,因?yàn)楹竺娴恼Z句所返回的是一個(gè)指針*/in itgraph(&grdriver, &grmode, ); /*初始化圖形系統(tǒng)*/errorcode=graphresult();后一次不成功的圖形操作的錯(cuò)誤代碼/*返回最,并賦值*/errormsg=grapherrormsg(errorcode); /*返回一個(gè)錯(cuò)誤信息串的指針,并賦值*/if(errorcode!=grOk)輸出錯(cuò)誤的信息串*/printf(Graph
13、ics error: %sn,errormsg); /*prin tf(Press any key to exit.n);/*輸出退出返回編輯界面的條件 */getch();/*從鍵盤上接收一個(gè)字符以返回*/exit(1);/*返回退出*/*畫星函數(shù)*/void DrawStar(void)int seed=2000;/*以下是定義幾個(gè)變量*/width=getmaxx(); /*返回屏幕的最大X坐標(biāo),并賦值*/height=getmaxy(); /*返回屏幕的最大Y坐標(biāo)并賦值*/int i;int dotx;int doty,height;int width;int color;int ma
14、xcolor;maxcolor=getmaxcolor(); /*返回可以傳給函數(shù)setcolor的最大顏色值,并賦值*/sran d(seed);/*初始化隨機(jī)數(shù)發(fā)生器*/i=0;for(;i1000;i+)dotx=i+ra ndom(width-1); /*以下是生成隨機(jī)的點(diǎn)*/doty=i+ra ndom(height-1);color=ra ndom(maxcolor);setcolor(color);/*設(shè)置當(dāng)前畫線顏色*/putpixel(dotx,doty,color);/*在指定的位置化一像素*/circle(dotx+1,doty+1,1);/*在給定的點(diǎn)畫圓*/sran
15、d(seed);/*初始化隨機(jī)數(shù)發(fā)生器*/void DrawG un()/*畫發(fā)射架函數(shù)*/int x0=300;/*以下是定義幾個(gè)變量并賦值*/int y0=430;int height=45;int rx=20;int ry=5;int rightx,righty;int leftx;int lefty;int cen tery 1=30;rightx=righty=leftx=lefty=12; setcolor(WHITE);/*ellipse(x0,y0,180,360,rx,ry);/*ellipse(x0,y0-height,0,360,rx,ry); /* line(xO+rx
16、,yO,xO+rx,yO-height); /*/line(xO-rx,yO,xO-rx,yO-height); /* moveto(xO+rx,yO);/*lin eto(x0+rx+rightx,y0+righty); /* moveto(xO+rx+rightx,yO+righty); /* lin eto(x0+rx+rightx+10,y0+righty+10); /* circle(xO+rx+rightx+1O,yO+righty+1O,4); /*設(shè)置當(dāng)前畫線顏色*/在指定位置畫一個(gè)半橢圓*/在指定位置畫一橢圓*/以下是畫發(fā)射架每條線的過程,畫火箭架右側(cè)豎線畫火箭架左側(cè)豎線*/
17、移動(dòng)初始點(diǎn)到右側(cè)豎線下端點(diǎn)*/畫右側(cè)斜線上部分*/移動(dòng)初始點(diǎn)到右側(cè)斜線上部分下端點(diǎn)*/畫右側(cè)斜線的下部分*/在右側(cè)斜線下部分下端點(diǎn)畫圓*/moveto(xO,yO+ry);/*移動(dòng)初始點(diǎn)到下半橢圓線的中點(diǎn)*/lineto(xO,yO+centery1); /*畫從下半橢圓線中點(diǎn)開始向下的線的上部分*/moveto(xO,yO+ce ntery1); /*移動(dòng)初始點(diǎn)到以上畫線的下端點(diǎn)*/lineto(xO,yO+centery1+10); /*畫以上點(diǎn)向下的下部分的線段*/circle(xO,yO+centery1+10,4); /*在以上畫線段的下端點(diǎn)畫圓*/moveto(xO-rx,yO);
18、/*移動(dòng)初始點(diǎn)到下半橢圓最左側(cè)點(diǎn)*/lineto(xO-rx-leftx,yO+lefty); /*畫左斜線的上部分線段*/moveto(x0-rx-leftx,y0+lefty); /*移動(dòng)初始點(diǎn)到以上畫線段的下端點(diǎn)*/lin eto(x0-rx-leftx-10,y0+lefty+10); /*畫左斜線的下部分*/circle(x0-rx-leftx-10,y0+lefty+10,4); /*在左斜線下端點(diǎn)畫一個(gè)圓*/lin e(xO-rx-leftx,yO+lefty,xO,yO+ce ntery1);點(diǎn)間的線段*/*畫連接左斜線與居中線的兩個(gè)內(nèi)端line(xO,yO+centery1,
19、x0+rx+rightx,y0+righty); /*畫連接右斜線與居中線的兩個(gè)內(nèi)端點(diǎn)間的線段*/void DrawPla n( void)/*畫火箭函數(shù)*/int size; /*定義一個(gè)變量*/setcolor(LIGHTRED); /*設(shè)置當(dāng)前畫線顏色 */setfillstyle(1,BLUE); /*設(shè)置填充模式和顏色*/ellipse(x0,y0-height,0,180,width1,3*width1); /*在指定位置畫一橢圓*/moveto(x0+width1,y0); /*移動(dòng)初始點(diǎn)到火箭張部右側(cè)豎線的下端點(diǎn)*/lineto(xO+width1,yO-height); /*
20、畫右側(cè)連接半橢圓與以上點(diǎn)間的線段*/moveto(x0+width1,y0); /*移動(dòng)初始點(diǎn)到火箭上部右側(cè)豎線的下端點(diǎn)*/lineto(x0+width2,y0+y2);/*畫火箭尾部右側(cè)的上層斜線*/moveto(x0-width1,y0); /*移動(dòng)初始點(diǎn)到火箭上部左側(cè)豎線的下端點(diǎn)*/lineto(xO-width1,yO-height); /*畫左側(cè)連接半橢圓與以上點(diǎn)間的線段*/moveto(x0-width1,y0); /*移動(dòng)初始點(diǎn)到火箭上部左側(cè)豎線的下端點(diǎn)*/lineto(x0-width2,y0+y2); /*畫火箭尾部左側(cè)的上層斜線*/moveto(x0+width2,y0+y3); /*移動(dòng)初始點(diǎn)到火箭尾部最右側(cè)線段下端點(diǎn)*/lineto(x0+width2,y0+y1); /*畫由以上端點(diǎn)豎直向上的線段*/moveto(x0+width2,y0+y3); /*移動(dòng)初始點(diǎn)到火箭尾部最右側(cè)線段下端點(diǎn)*/lineto(x0+width1,y0+y2); /*畫火箭尾部右側(cè)的下層斜線*/moveto(x0-width2,y0+y3); /*移動(dòng)初始點(diǎn)到火箭尾部最左側(cè)線段下端點(diǎn)*/lineto(x0-width2,y0+y1); /*畫由以上線段豎直向
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 供應(yīng)鏈中的物流決策
- 5風(fēng)兒輕輕吹(說課稿)-2023-2024學(xué)年道德與法治一年級(jí)下冊統(tǒng)編版
- Module 1 (說課稿)-2023-2024學(xué)年外研版(一起)英語五年級(jí)下冊
- 13《寒號(hào)鳥》說課稿-2024-2025學(xué)年語文二年級(jí)上冊統(tǒng)編版
- 2024新教材高中歷史 第八單元 20世紀(jì)下半葉世界的新變化 第21課 世界殖民體系的瓦解與新興國家的發(fā)展說課稿 部編版必修中外歷史綱要下
- 4 曹沖稱象(說課稿)-2024-2025學(xué)年統(tǒng)編版語文二年級(jí)上冊001
- 基于2025年度投資計(jì)劃的股權(quán)轉(zhuǎn)讓協(xié)議2篇
- 2025年度模具行業(yè)市場開拓與代理合同4篇
- 【可行性報(bào)告】2025年糧油加工項(xiàng)目可行性研究分析報(bào)告
- 2025年雙面花盤式大提花織機(jī)項(xiàng)目投資可行性研究分析報(bào)告
- 軟件項(xiàng)目應(yīng)急措施及方案
- 2025河北邯鄲經(jīng)開國控資產(chǎn)運(yùn)營管理限公司招聘專業(yè)技術(shù)人才5名高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2024年民法典知識(shí)競賽考試題庫及答案(共50題)
- 2025老年公寓合同管理制度
- 2024-2025學(xué)年人教版數(shù)學(xué)六年級(jí)上冊 期末綜合卷(含答案)
- 2024中國汽車后市場年度發(fā)展報(bào)告
- 鈑金設(shè)備操作培訓(xùn)
- 感染性腹瀉的護(hù)理查房
- 天津市部分區(qū)2023-2024學(xué)年高二上學(xué)期期末考試 物理 含解析
- 水利工程招標(biāo)文件樣本
- 第17課 西晉的短暫統(tǒng)一和北方各族的內(nèi)遷(說課稿)-2024-2025學(xué)年七年級(jí)歷史上冊素養(yǎng)提升說課稿(統(tǒng)編版2024)
評(píng)論
0/150
提交評(píng)論