數(shù)據(jù)結(jié)構(gòu)實(shí)習(xí)報(bào)告-池塘夜降彩色雨_第1頁
數(shù)據(jù)結(jié)構(gòu)實(shí)習(xí)報(bào)告-池塘夜降彩色雨_第2頁
數(shù)據(jù)結(jié)構(gòu)實(shí)習(xí)報(bào)告-池塘夜降彩色雨_第3頁
數(shù)據(jù)結(jié)構(gòu)實(shí)習(xí)報(bào)告-池塘夜降彩色雨_第4頁
數(shù)據(jù)結(jié)構(gòu)實(shí)習(xí)報(bào)告-池塘夜降彩色雨_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

一、需求分析1.本程序?qū)⒀菔久利惖摹俺靥烈褂辍本吧荷世_紛的雨點(diǎn)飄飄灑灑地從天而降,滴滴入水有聲,濺起圈圈微瀾。2.演示程序以用戶和計(jì)算機(jī)的對(duì)話方式執(zhí)行,即在計(jì)算機(jī)終端上顯示“提示信息”后,由用戶在鍵盤上輸入演示程序中需要的參數(shù),即可執(zhí)行程序。3.程序的執(zhí)行命令包括:1)設(shè)置雨點(diǎn)數(shù)量(數(shù)量越多密度越大)2)設(shè)置雨點(diǎn)下落速度二、概要設(shè)計(jì)

為實(shí)現(xiàn)以上程序,應(yīng)以有序鏈表存儲(chǔ)雨點(diǎn),需要一個(gè)圖形抽象數(shù)據(jù)類型。1.圖形抽象數(shù)據(jù)類型定義如下:ADTgraphicList{數(shù)據(jù)對(duì)象:D={ai|ai∈CharSet,i=1,2,……,n,n≥0}數(shù)據(jù)關(guān)系:R1={<ai-1,ai>|ai-1,ai∈D,ai-1<ai,i=1,2,……,n}基本操作:initgraphics(void)操作結(jié)果:圖形模式的初始化。rainDrop*creatDrop(void)操作結(jié)果:構(gòu)造雨點(diǎn)。creatRain(void)初始條件:雨點(diǎn)已存在。操作條件:使雨點(diǎn)產(chǎn)生持續(xù)下落的效果。drawRainLine(structrainDrop*p)

初始條件:雨點(diǎn)已存在。

操作結(jié)果;畫雨點(diǎn)下落路線。updateRainLineData(structrainDrop*p)

初始條件:雨點(diǎn)已經(jīng)出現(xiàn)。操作結(jié)果:更新雨點(diǎn)下落路線。clearRainLine(structrainDrop*p)初始條件:雨點(diǎn)已經(jīng)出現(xiàn)并畫出一段下落路線。操作結(jié)果:清除雨點(diǎn)下落路線。drawRainCircle(structrainDrop*p)初始條件:漣漪已產(chǎn)生。操作結(jié)果:畫出漣漪。updateRainCircleData(structrainDrop*p)初始條件:漣漪已產(chǎn)生。操作結(jié)果:更新漣漪狀態(tài)。clearRainCircle(structrainDrop*p)初始條件:漣漪已產(chǎn)生。操作結(jié)果:清除漣漪。rainDropDown(structrainDrop*p)初始條件:雨點(diǎn)已經(jīng)落到湖面。操作結(jié)果:雨點(diǎn)消失。clearAll(void)操作結(jié)果:清除所有。}ADTgraphicList2.本程序包括四個(gè)模塊:1)主程序模塊:voidmain(){輸入數(shù)據(jù);圖形模式初始化;構(gòu)造雨點(diǎn);雨點(diǎn)下落;清除雨點(diǎn);}2)圖形單元模塊——實(shí)現(xiàn)圖形的抽象數(shù)據(jù)類型;3)漣漪單元模塊——定義漣漪的結(jié)構(gòu);4)雨滴單元模塊——定義雨滴的結(jié)構(gòu);各模塊之間的調(diào)用關(guān)系如下:主程序模塊圖形單元模塊雨滴結(jié)構(gòu)單元模塊漣漪結(jié)構(gòu)單元模塊三、詳細(xì)設(shè)計(jì)#include<stdio.h>#include<stdlib.h>#include<conio.h>#include<windows.h>#include<graphics.h>//需要在VC6.0中添加graphics.h頭文件#include<time.h>#defineLENsizeof(structrainDrop)#pragmacomment(lib,"Winmm.lib")intrainDropNumber=60;intdownSpeed=20;structrainDrop*head;structrainCircle//定義水圈的相關(guān)參數(shù){ intx;//橫坐標(biāo) inty;//縱坐標(biāo) intr;//水圈變化半徑 intcurR;//水圈初始半徑 intrainCircleStep;//水圈產(chǎn)生步驟};structrainDrop//定義雨點(diǎn)下落過程的參數(shù){ intstartX;//初始橫坐標(biāo) intstartY;//初始縱坐標(biāo) intendY;//結(jié)束橫坐標(biāo) intcurX;//結(jié)束縱坐標(biāo) intcurY;//消失時(shí)的縱坐標(biāo) intrainColor;//雨滴顏色 intrainLineStep;//雨滴路徑步驟 intrainLineLength;//雨滴下落長(zhǎng)度 intstatus;//是否落到池塘 structrainCirclewater;//構(gòu)造漣漪 structrainDrop*next;//構(gòu)造指向下一個(gè)雨點(diǎn)的指針};voidinitgraphics(void)//圖形模式的初始化{ intgmode,gdriver; gdriver=DETECT; initgraph(&gdriver,&gmode,"");}structrainDrop*creatDrop(void)//隨機(jī)產(chǎn)生雨滴{ structrainDrop*p; p=(structrainDrop*)malloc(LEN); p->startX=rand()%640;//隨機(jī)產(chǎn)生初始橫坐標(biāo) p->startY=rand()%430;//隨機(jī)產(chǎn)生初始縱坐標(biāo) p->endY=430+rand()%50;//隨機(jī)產(chǎn)生結(jié)束縱坐標(biāo) p->curX=p->startX; p->curY=p->startY; p->rainLineStep=8;//過程共分為8個(gè)步驟 p->rainColor=rand()%15+1;//隨機(jī)產(chǎn)生雨滴顏色 p->rainLineLength=rand()%10+10;//隨機(jī)產(chǎn)生雨滴長(zhǎng)度 p->status=0; p->water.x=p->startX; p->water.y=p->endY; p->water.r=rand()%40;//隨機(jī)產(chǎn)生漣漪半徑 p->water.curR=rand()%2;//隨機(jī)產(chǎn)生漣漪初始半徑 p->water.rainCircleStep=rand()%2+1;//隨機(jī)產(chǎn)生漣漪變化步驟 p->next=NULL; return(p);}voidrecreatDrop(structrainDrop*p)//重復(fù)產(chǎn)生雨點(diǎn)(步驟同上){ p->startX=rand()%640; p->startY=rand()%430; p->endY=430+rand()%50; p->curX=p->startX; p->curY=p->startY; p->rainLineStep=8; p->rainColor=rand()%15+1; p->rainLineLength=rand()%10+10; p->status=0; p->water.x=p->startX; p->water.y=p->endY; p->water.r=rand()%40; p->water.curR=rand()%2; p->water.rainCircleStep=rand()%2+1;}voidcreatRain(void)//不間斷產(chǎn)生雨點(diǎn){ structrainDrop*p1,*p2; inti; p1=p2=creatDrop(); head=p1; for(i=0;i<rainDropNumber;i++) { p2=creatDrop(); p1->next=p2; p1=p2; }}voidupdateRainLineData(structrainDrop*p){//每個(gè)雨點(diǎn)的下落步驟 if(p->rainLineStep%5==0) p->rainLineStep++; p->curY+=p->rainLineStep; p->startY=p->curY-p->rainLineLength;}voiddrawRainLine(structrainDrop*p){//畫出雨點(diǎn)下落軌跡 setcolor(p->rainColor); line(p->startX,p->startY,p->curX,p->curY);}voidclearRainLine(structrainDrop*p){//清除雨點(diǎn)軌跡 setcolor(BLACK); line(p->startX,p->startY,p->curX,p->curY);}voidrainDropDown(structrainDrop*p){//如果初始坐標(biāo)大于結(jié)束坐標(biāo),則雨滴下落 if(p->curY>=p->endY) { clearRainLine(p); p->status=1; } else { clearRainLine(p);//清除舊雨點(diǎn)軌跡 updateRainLineData(p);更新雨點(diǎn)新的軌跡 drawRainLine(p);畫出軌跡 }}voidupdateRainCircleData(structrainDrop*p){ p->water.curR+=p->water.rainCircleStep;}voiddrawRainCircle(structrainDrop*p){//畫出漣漪 setcolor(p->rainColor); circle(p->water.x,p->water.y,p->water.curR);}voidclearRainCircle(structrainDrop*p){//清除漣漪 setcolor(BLACK); circle(p->water.x,p->water.y,p->water.curR);}voidfallToWater(structrainDrop*p){//落到水里的效果 if(p->water.curR>=p->water.r) { clearRainCircle(p); recreatDrop(p); } else { clearRainCircle(p); updateRainCircleData(p); drawRainCircle(p); }}voidrain(void){//下雨動(dòng)畫 structrainDrop*p; p=head; while(!kbhit()) { if(p==NULL) p=head; else { if(p->status==0) rainDropDown(p); else fallToWater(p); } Sleep(downSpeed); p=p->next; }}voidclearAll(void){//清除所有 structrainDrop*p,*pf; p=head; while(p!=NULL) { pf=p; p=p->next; free(pf); } closegraph();//關(guān)閉圖像}voidmain(){ printf("InputrainDropNumber:"); scanf("%d",&rainDropNumber);//輸入雨滴數(shù)量 printf("Inputdownspeed:"); scanf("%d",&downSpeed);//輸入下落速度 srand((unsigned)time(NULL)); creatRain(); rain(); clearAll(); return;}函數(shù)的調(diào)用關(guān)系圖反映了演示程序的層次結(jié)構(gòu):mainCreatrainrainclearAllcreatDroprainDropDownfallToWaterclearRainLineupdateRainLineDatadrawRainLineclearRainCirclerecreatDropupdateR

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論