久久99热66热这里只有精品,特黄特色的大片在线观看,亚洲日本三级在线观看,国产三级农村妇女在线,亚洲av毛片免费在线观看,哺乳叫自慰在线看,天天干美女av网

用C語(yǔ)言實(shí)現(xiàn)火箭的升空

時(shí)間:2023-05-01 12:37:30 資料 我要投稿
  • 相關(guān)推薦

用C語(yǔ)言實(shí)現(xiàn)火箭的升空

/計(jì)算機(jī)程序設(shè)計(jì)

用C語(yǔ)言實(shí)現(xiàn)火箭的升空

----課程設(shè)計(jì)(C語(yǔ)言)

題目:用C語(yǔ)言實(shí)現(xiàn)火箭的升空

學(xué)院:

專(zhuān)業(yè):

班級(jí):

姓名:

指導(dǎo)教師:

設(shè)計(jì)日期:

一. 選題背景:

問(wèn)題的提出:在科學(xué)技術(shù)高度發(fā)達(dá)的世界的今天,人類(lèi)向太空的探索已經(jīng)進(jìn)入

了熱門(mén)化階段,伴隨著我國(guó)航天事業(yè)的飛速發(fā)展,選擇了此次程序的設(shè)計(jì)。

在此,用C語(yǔ)言編制的程序,實(shí)現(xiàn)了對(duì)火箭“升空”的“鍵盤(pán)”控制。

二.設(shè)計(jì)思路.

本程序是從畫(huà)火箭架、星星、火箭以及發(fā)射火箭進(jìn)行的完整過(guò)程。畫(huà)火箭架是用了調(diào)

用函數(shù)DrawGun()函數(shù),這其中是用了兩個(gè)ellipse()函數(shù)畫(huà)上面的完整橢圓以及下面的半

橢圓,然后分別用moveto()函數(shù)和lineto()函數(shù)進(jìn)行移動(dòng)畫(huà)線點(diǎn)和執(zhí)行畫(huà)線過(guò)程。其中定

義的rightx ,righty ,leftx ,lefty以及centry1 ,rx ,ry ,變量對(duì)實(shí)現(xiàn)每個(gè)交叉點(diǎn)建的

連線提供了條件,然后用circle()函數(shù)對(duì)三條線的端點(diǎn)分別用函數(shù)畫(huà)圓,就是用以上的方

法實(shí)現(xiàn)了畫(huà)火箭發(fā)射架的過(guò)程;

畫(huà)星星調(diào)用了Drawstar()函數(shù),主要就是用srand()函數(shù)對(duì)每個(gè)象素進(jìn)行隨機(jī)分布以

及用random()函數(shù)和setcolor()函數(shù)對(duì)每一個(gè)象素進(jìn)行顏色處理,再用circle()函數(shù)對(duì)

每一個(gè)象素進(jìn)行了放大處理(在每一個(gè)象素上畫(huà)一個(gè)小圓);

畫(huà)火箭調(diào)用了DrawPlan()函數(shù),主要是用ellipse()函數(shù)對(duì)火箭的頂部畫(huà)橢圓,并再

次用moveto()函數(shù)和lineto()函數(shù)對(duì)火箭的外觀輪廓進(jìn)行畫(huà)線處理,定義的

width1 ,width2 ,y0 ,y1 ,y2 ,y3 ,y4等變量對(duì)火箭的繪制的精確有了保障。其中用的

setcolor()函數(shù)設(shè)置了此畫(huà)線的顏色,并用了setfillstyle()函數(shù)設(shè)置了歲火箭的閉合輪

廓天填充的模式和顏色,再用了floodfill()函數(shù)對(duì)火箭輪廓不同顏色的填充,當(dāng)然這其

中也用了setfillstyle()函數(shù)的兩次不同的應(yīng)用。為使火箭的圖象處于穩(wěn)定的狀態(tài),當(dāng)完

成畫(huà)火箭后,又用了imagesize()函數(shù)返回了保存此圖象所需要的字節(jié)數(shù)目,這對(duì)此次程

序是直關(guān)重要的了;

發(fā)射火箭是用了循環(huán)語(yǔ)句do-while結(jié)構(gòu),并用了putimage()函數(shù)用與移動(dòng)火箭的圖

象,方法是方法是用異或方式在屏幕上連續(xù)畫(huà)出火箭的圖像,每畫(huà)一次,新圖像和原來(lái)的

位置相差兩個(gè)像素點(diǎn)。這個(gè)值越大,飛行速度越快。運(yùn)行的退出是用了free()函數(shù)釋放分

配的塊,并用了closegraph()函數(shù)關(guān)閉了圖形系統(tǒng),除了以上主要的介紹外,此程序還用

了如outtextxy()函數(shù)(在指定的位置輸出指定的內(nèi)容,如“繼續(xù)”,“返回”等所需要

的條件等),setbkco()lor函數(shù)(設(shè)置屏幕的顏色),InstallGraph()函1數(shù)(圖形初始

化函數(shù)),getch()函數(shù)(從鍵盤(pán)無(wú)回顯的接收一個(gè)字符,用于控制火箭的進(jìn)程的“端口”),

等一系列的函數(shù)來(lái)設(shè)計(jì)此次程序。

三、主要解決問(wèn)題的方法及技術(shù)關(guān)鍵

1.主要問(wèn)題及解決方法

★ 火箭及火箭發(fā)射架的畫(huà)法問(wèn)題。因?yàn)榛鸺突鸺芏疾皇呛?jiǎn)單的如正方、長(zhǎng)方

形等圖形,而是由一些橢圓和圓形組織而成的復(fù)雜圖形。這就對(duì)火箭以及火箭架的

畫(huà)法提出了問(wèn)題:如何畫(huà)?解決的方法是用moveto()和lineto()函數(shù)來(lái)連接火箭

或火箭架的每一個(gè)交叉點(diǎn)(接點(diǎn))。

★ 屏幕的美觀問(wèn)題,即程序中對(duì)星星的顯示大小問(wèn)題。此次程序如何用C語(yǔ)言來(lái)

更加現(xiàn)實(shí)化的顯示星星?在這里有一個(gè)很巧妙的方法就是用circle()函數(shù)以每個(gè)

像素為圓心畫(huà)一個(gè)小圓,這樣做不僅美觀,而且增加了現(xiàn)實(shí)性。

★ 火箭艱苦的移動(dòng)問(wèn)題;鸺m然是比較圓滿的畫(huà)出,但移動(dòng)火箭卻遇到了困難,

如何移動(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ù)對(duì)“天空”中的星星進(jìn)行隨機(jī)分布顯示,這也是一種很巧妙的方法,

這樣即成了滿天繁星的美觀場(chǎng)景。

2.技術(shù)關(guān)鍵

◆ 對(duì)火箭的移動(dòng)技術(shù)。(do-while 以及 putimage()的應(yīng)用)

◆ 對(duì)火箭的位圖的字節(jié)保存過(guò)程。 四:程序流程圖

五.

#include /*下面是對(duì)程序中的某些函數(shù)做預(yù)定義*/

#include

#include

#include

#include

#define ESC 0x1b /*ESC的ASCII碼,十六進(jìn)制數(shù)*/

void InstallGraph(void); /*圖形初始化函數(shù)的聲明*/

void DrawGun(void); /*畫(huà)發(fā)射架函數(shù)的聲明*/

void DrawPlan(void); /*畫(huà)火箭函數(shù)的聲明*/

void DrawStar(void); /*畫(huà)星函數(shù)的聲明*/

void *buf; /*全局變量,用于存儲(chǔ)火箭的圖像*/

int x0=300; /*以下是火箭的位置初始化參數(shù)*/

int y0=340;

int width1=5; /*對(duì)火箭上部的寬度定義*/

int width2=20; /*對(duì)火箭下部的寬度定義*/

int height=25; /*對(duì)火箭的高度定義*/

int y1=8;

int y2=15;

int y3=23;

int y4=38;

main()

{

int size; /*以下是定義幾個(gè)變量*/

int i=0;

int key;

int station;

InstallGraph(); /*圖形初始化函數(shù)*/

setbkcolor(WHITE); /*設(shè)置背景顏色*/

cleardevice(); /*清除屏幕的圖形*/

setcolor(RED); /*設(shè)置字的顏色*/

outtextxy(80,100,"Ready!!!...Now,any key to SET OFF !!!");

/*在屏幕上輸出字符*/

DrawGun(); /*調(diào)用畫(huà)火箭架函數(shù)*/

getch(); /*從鍵盤(pán)上無(wú)回顯的接收一個(gè)字符*/

cleardevice(); /*再一次清除屏幕圖形*/

setbkcolor(BLUE); /*再次設(shè)置屏幕顏色*/

DrawGun(); /*再一次調(diào)用畫(huà)火箭架函數(shù)*/

DrawPlan(); /*調(diào)用畫(huà)火箭函數(shù)*/

DrawStar(); /*調(diào)用畫(huà)星星函數(shù)*/

setcolor(LIGHTRED); /*設(shè)置畫(huà)線的顏色*/

do

{

putimage(x0-width2,y0-height-3*width1-i,buf,XOR_PUT);

/*主循環(huán)開(kāi)始,用于移動(dòng)火箭,方法是用異或方式在屏幕上連續(xù)畫(huà)出火箭的圖像,每畫(huà)一次,新圖像和原來(lái)的位置相差兩個(gè)像素點(diǎn)。這個(gè)值越大,飛行速度越快*/

i+=2;

putimage(x0-width2,y0-height-3*width1-i,buf,XOR_PUT);

key=getch(); /*從鍵盤(pán)上無(wú)回顯的接收一個(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-i>0) /*如果在發(fā)射過(guò)程中*/

{

cleardevice(); /*再一次清除屏幕圖形*/

outtextxy(100,100,"Failue. What did you do?"); /*在屏幕上輸出字符*/

outtextxy(130,300,"Press any key to quit."); /*在屏幕上輸出字符*/

getch(); /*再?gòu)逆I盤(pán)上無(wú)回顯的接收一個(gè)字符*/

}

}

}

while(key!=ESC);

free(buf); /*釋放已分配的塊*/

closegraph(); /*操作已經(jīng)完成,關(guān)閉圖形系統(tǒng)*/

return 0; /*返回編輯界面*/

}

void InstallGraph(void) /*圖形初始化函數(shù)*/

{

int grdriver=DETECT; /*以下是定義幾個(gè)變量*/

int grmode;

int errorcode;

char *errormsg; /*定義一個(gè)字符型指針,因?yàn)楹竺娴恼Z(yǔ)句所返回的是一個(gè)指針*/

initgraph(&grdriver,&grmode," "); /*初始化圖形系統(tǒng)*/

errorcode=graphresult(); /*返回最

后一次不成功的圖形操作的錯(cuò)誤代碼,并賦值*/ errormsg=grapherrormsg(errorcode); /*返回一個(gè)錯(cuò)誤信息串的指針,并賦值*/

if(errorcode!=grOk)

{

printf("Graphics error: %s\n",errormsg); /*輸出錯(cuò)誤的信息串*/

printf("Press any key to exit.\n"); /*輸出退出返回編輯界面的條件*/

getch(); /*從鍵盤(pán)上接收一個(gè)字符以返回*/

exit(1); /*返回退出*/

}

}

void DrawStar(void) /*畫(huà)星函數(shù)*/

{

int seed=2000; /*以下是定義幾個(gè)變量*/

int i;

int dotx;

int doty,http://m.dameics.com/news/55A9D0018FF7F9CA.htmlheight;

int width;

int color;

int maxcolor;

maxcolor=getmaxcolor(); /*返回可以傳給函數(shù)setcolor的最大顏色值,并賦值*/ width=getmaxx(); /*返回屏幕的最大X坐標(biāo),并賦值*/

height=getmaxy(); /*返回屏幕的最大Y 坐標(biāo)并賦值*/

srand(seed);/*初始化隨機(jī)數(shù)發(fā)生器*/

i=0;

for(;i

{

dotx=i+random(width-1); /*以下是生成隨機(jī)的點(diǎn)*/

doty=i+random(height-1);

color=random(maxcolor);

setcolor(color); /*設(shè)置當(dāng)前畫(huà)線顏色*/

putpixel(dotx,doty,color); /*在指定的位置化一像素*/

circle(dotx+1,doty+1,1); /*在給定的點(diǎn)畫(huà)圓*/

}

srand(seed); /*初始化隨機(jī)數(shù)發(fā)生器*/

}

void DrawGun() /*畫(huà)發(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 centery1=30;

rightx=righty=leftx=lefty=12;

setcolor(WHITE); /*設(shè)置當(dāng)前畫(huà)線顏色*/

ellipse(x0,y0,180,360,rx,ry); /*在指定位置畫(huà)一個(gè)半橢圓*/

ellipse(x0,y0-height,0,360,rx,ry); /*在指定位置畫(huà)一橢圓*/

line(x0+rx,y0,x0+rx,y0-height); /*以下是畫(huà)發(fā)射架每條線的過(guò)程,畫(huà)火箭架右側(cè)豎線*/

line(x0-rx,y0,x0-rx,y0-height); /*畫(huà)火箭架左側(cè)豎線*/

moveto(x0+rx,y0); /*移動(dòng)初始點(diǎn)到右側(cè)豎線下端點(diǎn)*/

lineto(x0+rx+rightx,y0+righty); /*畫(huà)右側(cè)斜線上部分*/

moveto(x0+rx+rightx,y0+righty); /*移動(dòng)初始點(diǎn)到右側(cè)斜線上部分下端點(diǎn)*/ lineto(x0+rx+rightx+10,y0+righty+10); /*畫(huà)右側(cè)斜線的下部分*/

circle(x0+rx+rightx+10,y0+righty+10,4); /*在右側(cè)斜線下部分下端點(diǎn)畫(huà)圓*/ moveto(x0,y0+ry); /*移動(dòng)初始點(diǎn)到下半橢圓線的中點(diǎn)*/

lineto(x0,y0+centery1); /*畫(huà)從下半橢圓線中點(diǎn)開(kāi)始向下的線的上部分*/ moveto(x0,y0+centery1); /*移動(dòng)初始點(diǎn)到以上畫(huà)線的下端點(diǎn)*/

lineto(x0,y0+centery1+10); /*畫(huà)以上點(diǎn)向下的下部分的線段*/

circle(x0,y0+centery1+10,4); /*在以上畫(huà)線段的下端點(diǎn)畫(huà)圓*/

moveto(x0-rx,y0); /*移動(dòng)初始點(diǎn)到下半橢圓最左側(cè)點(diǎn)*/

lineto(x0-rx-leftx,y0+lefty); /*畫(huà)左斜線的上部分線段*/

moveto(x0-rx-leftx,y0+lefty); /*移動(dòng)初始點(diǎn)到以上畫(huà)線段的下端點(diǎn)*/

lineto(x0-rx-leftx-10,y0+lefty+10); /*畫(huà)左斜線的下部分*/

circle(x0-rx-leftx-10,y0+lefty+10,4); /*在左斜線下端點(diǎn)畫(huà)一個(gè)圓*/

line(x0-rx-leftx,y0+lefty,x0,y0+centery1); /*畫(huà)連接左斜線與居中線的兩個(gè)內(nèi)端點(diǎn)間的線段*/

line(x0,y0+centery1,x0+rx+rightx,y0+righty); /* 畫(huà)連接右斜線與居中線的兩個(gè)內(nèi)端點(diǎn)間的線段*/

}

void DrawPlan(void) /*畫(huà)火箭函數(shù)*/

{

int size; /*定義一個(gè)變量*/

setcolor(LIGHTRED); /*設(shè)置當(dāng)前畫(huà)線顏色*/

setfillstyle(1,BLUE); /*設(shè)置填充模式和顏色*/

ellipse(x0,y0-height,0,180,width1,3*width1); /*在指定位置畫(huà)一橢圓*/ moveto(x0+width1,y0); /*移動(dòng)初始點(diǎn)到火箭張部右側(cè)豎線的下端點(diǎn)*/

lineto(x0+width1,y0-height) ; /*畫(huà)右側(cè)連接半橢圓與以上點(diǎn)間的線段*/ moveto(x0+width1,y0); /*移動(dòng)初始點(diǎn)到火箭上部右側(cè)豎線的下端點(diǎn)*/ lineto(x0+width2,y0+y2) ; /*畫(huà)火箭尾部右側(cè)的上層斜線*/

moveto(x0-width1,y0); /*移動(dòng)初始點(diǎn)到火箭上部左側(cè)豎線的下端點(diǎn)*/ lineto(x0-width1,y0-height); /*畫(huà)左側(cè)連接半橢圓與以上點(diǎn)間的線段*/ moveto(x0-width1,y0); /*移動(dòng)初始點(diǎn)到火箭上部左側(cè)豎線的下端點(diǎn)*/ lineto(x0-width2,y0+y2); /*畫(huà)火箭尾部左側(cè)的上層斜線*/

moveto(x0+width2,y0+y3); /*移動(dòng)初始點(diǎn)到火箭尾部最右側(cè)線段下端點(diǎn)*/ lineto(x0+width2,y0+y1); /*畫(huà)由以上端點(diǎn)豎直向上的線段*/

moveto(x0+width2,y0+y3); /*移動(dòng)初始點(diǎn)到火箭尾部最右側(cè)線段下端點(diǎn)*/ lineto(x0+width1,y0+y2); /*畫(huà)火箭尾部右側(cè)的下層斜線*/

moveto(x0-width2,y0+y3); /*移動(dòng)初始點(diǎn)到火箭尾部最左側(cè)線段下端點(diǎn)*/ lineto(x0-width2,y0+y1); /*畫(huà)由以上線段豎直向上的線段*/

moveto(x0-width2,y0+y3); /*移動(dòng)初始點(diǎn)到火箭尾部最左側(cè)線段下端點(diǎn)*/ lineto(x0-width1,y0+y2); /*畫(huà)火箭尾部左側(cè)的下層斜線*/

moveto(x0,y0+y4); /*移動(dòng)初始點(diǎn)到火箭的最下端點(diǎn)*/

lineto(x0+width1,y0+y2); /*畫(huà)由以上端點(diǎn)到右側(cè)下層斜線上端點(diǎn)間的線段*/ moveto(x0,y0+y4); /*移動(dòng)初始點(diǎn)到火箭的最下端點(diǎn)*/

lineto(x0-width1,y0+y2); /* 畫(huà)由以上端點(diǎn)到左側(cè)下層斜線上端點(diǎn)間的線段*/ setfillstyle(2,WHITE); /*設(shè)置填充模式和顏色*/

floodfill(x0,y0,LIGHTRED); /*填充一個(gè)有界區(qū)域*/

size=imagesize(x0-width2-1,y0-height-3*width1,x0+width2+1,y0+y4); /*返回保存位圖像所需的字節(jié)數(shù)*/

buf=malloc(size); /*從堆中分配大小為size字節(jié)的塊*/

if(!buf)

{

printf("No enough memory!");

exit(0); /*退出*/

}

getimage(x0-width2,y0-height-3*width1,x0+width2,y0+y4,buf);

/*確定保存圖像所需的存儲(chǔ)區(qū)大小*/

}

六、設(shè)計(jì)結(jié)果說(shuō)明: /*如果火箭圖象沒(méi)有生成*/

▲ 設(shè)計(jì)優(yōu)點(diǎn):本程序較巧妙的實(shí)現(xiàn)了從繪制到發(fā)射的過(guò)程。設(shè)計(jì)時(shí)對(duì)各種操作的所需要的進(jìn)程設(shè)計(jì)的比較全面。

▲ 設(shè)計(jì)不足:本程序只能對(duì)火箭的“上”起作用,而對(duì)其“左右”的控制不起作用。

【用C語(yǔ)言實(shí)現(xiàn)火箭的升空】相關(guān)文章:

c語(yǔ)言心得04-24

C語(yǔ)言課程教案04-24

奮力托舉火箭升空泰然書(shū)寫(xiě)華彩人生-記我國(guó)著名火箭發(fā)動(dòng)機(jī)專(zhuān)家張貴田院士05-03

C語(yǔ)言實(shí)習(xí)心得01-01

C語(yǔ)言實(shí)習(xí)總結(jié)01-19

基于TMS320C6713坐標(biāo)轉(zhuǎn)換的實(shí)現(xiàn)04-28

基于80C196KC的磁性檢測(cè)的實(shí)現(xiàn)05-01

氣象探測(cè)火箭發(fā)射用軟件射表04-30

C語(yǔ)言基礎(chǔ)實(shí)驗(yàn)報(bào)告10-11

c語(yǔ)言實(shí)踐報(bào)告模型10-28