語(yǔ)言 流星雨的實(shí)現(xiàn)_第1頁(yè)
語(yǔ)言 流星雨的實(shí)現(xiàn)_第2頁(yè)
語(yǔ)言 流星雨的實(shí)現(xiàn)_第3頁(yè)
語(yǔ)言 流星雨的實(shí)現(xiàn)_第4頁(yè)
語(yǔ)言 流星雨的實(shí)現(xiàn)_第5頁(yè)
已閱讀5頁(yè),還剩12頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、題目:流星雨的實(shí)現(xiàn)學(xué)院:班級(jí):姓名:學(xué)號(hào):指導(dǎo)教師:時(shí)間:目錄 一 課程設(shè)計(jì)目的2二 設(shè)計(jì)內(nèi)容與要求3三 概要設(shè)計(jì)3四 詳細(xì)設(shè)計(jì)4五 運(yùn)行界面5六 設(shè)計(jì)總結(jié)15七 教師評(píng)語(yǔ)16一 課程設(shè)計(jì)目的程序模擬一組流星飛向地面的情境,地面用多行#來(lái)表示,流星用大寫(xiě)字母表示。二 設(shè)計(jì)內(nèi)容與要求1 內(nèi)容:程序產(chǎn)生一組流星(比如10個(gè)),從屏幕頂部下降飛向地面。2 一組流星中,每個(gè)流星的字符顏色是隨機(jī)的,下降的位置是隨機(jī)的,下降的速度也是隨機(jī)的。一個(gè)流星下落只能去掉一個(gè)#號(hào),當(dāng)最后一行地面有#被去掉時(shí),程序終止。三 概要設(shè)計(jì) 首先定義二維數(shù)組screen表示地面和天空,此數(shù)組是一個(gè)24行81列的字符數(shù)組。上面

2、的行表示天空,數(shù)組單元的值是空格;最下面的幾行(如5行)表示地面,數(shù)組單元的值是#;整個(gè)屏幕的大小是80*25,即25行80列, 為了在輸出最后一行時(shí)不換行滾屏,程序只能利用上面的24行空間。把數(shù)組定義成81列的目的是,每行的最后字符賦值成0,就可以按照字符串的方式輸出每行文本了。 編寫(xiě)的程序在下降過(guò)程中,程序必須知道流星的字符、顏色、位置、速度,因此程序需要定義以下幾個(gè)數(shù)組變量:存放流星字符的數(shù)組,存放流星字符顏色的數(shù)組,存放流星行位置的數(shù)組,存放流星列位置的數(shù)組,存放流星下降速度的數(shù)組。 輸出時(shí)程序首先輸出地面和天空,即輸出定義的二維數(shù)組screen中的字符串,前21行是空行,后3行是#號(hào)

3、。這樣screen2481的字符矩陣就與整個(gè)屏幕對(duì)應(yīng)起來(lái)。然后隨時(shí)機(jī)產(chǎn)生一組流星數(shù)據(jù),包括字符、顏色、位置和速度。速度用一次下降多少行來(lái)表示,最大的速度是4。由于要隨機(jī)產(chǎn)生這些數(shù)據(jù),因此需要調(diào)用random函數(shù)。(random函數(shù)的原型是 int random(int num); 這個(gè)函數(shù)產(chǎn)生一個(gè)0num-1之間的一個(gè)隨機(jī)數(shù)。 流星字符可以這樣產(chǎn)生:random(26)+A; 流星字符的顏色可以這樣產(chǎn)生:random(16)+1;流星下降的位置可以這樣產(chǎn)生:random(4)+1;流星的行位置一開(kāi)始都是1; 流星的列位置可以這樣產(chǎn)生:random(80)+1;但要保證所有流星的列位置不能相同。

4、調(diào)用random之前,用randomize()庫(kù)函數(shù)進(jìn)行初始化。 兩個(gè)庫(kù)函數(shù)都在stdlib.h文件中。)設(shè)置后,每個(gè)流星按照自己的速度下落,所謂的下落就是逐行移動(dòng)流星字符: 在下一行新的位置上顯示流星字符,在原來(lái)的位置上顯示空格以便擦除流星字符,然后再延遲等待幾十毫秒。這樣循環(huán)往復(fù)就構(gòu)成了流星下落的動(dòng)畫(huà)。 但要注意,流星的速度各不相同,而一次下落多行的流星也要逐行下落。如果流星的新位置所對(duì)應(yīng)的screen的單元格的值是#,則表示撞到了地面。 這種情況下在流星的新位置上輸出空格,擦除#號(hào),并且對(duì)screen相應(yīng)的單元賦值為空格,流星字符也要賦值為空格,以表示流星消失。當(dāng)screen23中任何一

5、個(gè)單元格是空格時(shí),程序終止。四 詳細(xì)設(shè)計(jì)模塊一:輸入天空和地面,天空和地面都是靜止的。模塊二:產(chǎn)生一組流星,流星的表示。模塊三:流行的顏色,位置,速度。模塊四:若碰到#號(hào),流星和#號(hào)同時(shí)消失。模塊五:若第24行的流星被碰到,程序終止。流星的實(shí)現(xiàn)輸入天空和地面產(chǎn)生一組流星流行的顏色,位置,速度若碰到#號(hào),流星和#號(hào)同 五 運(yùn)行界面1 程序框圖2 程序清單#include <stdio.h>#include <stdlib.h>#include <time.h>#include <windows.h>#include <conio.h>

6、#define ROW24#define COL81#define REAL100#define NUM10 #define SPEED4 int random(int num);static void setSky();static void display();int check_last_row();void word_n_down();int word_one_down(int begin,int position,int speed ,int word,int *word_end);void gotoxy(int x,int y);char sky_groundREALCOL;int

7、 test = 0;int cycle_end = 0;int word_endNUM;int list = 0;int beginNUM;int positionNUM;int wordNUM;int speedNUM;int main()int end_flag = 0;time_t t; srand(unsigned) time(&t);setSky();while(!(end_flag = check_last_row()for(int a=0;a<NUM;a+)word_enda = 0;list = 0;cycle_end = 0;word_n_down();syst

8、em("pause");return 0;static void setSky()for(int b=0;b<REAL;b+)for(int c=0;c<COL-1;c+)sky_groundbc = ' 'sky_groundbCOL-1 = '0'for(int d=ROW-5;d<ROW;d+)for(int e=0;e<COL-1;e+)sky_groundde = '#'sky_grounddCOL-1 = '0'static void display()gotoxy(0,0)

9、;for(int f=0;f<ROW;f+)printf("%s",sky_groundf);int random(int num)return(rand() % num);int check_last_row()for(int g=0;g<COL;g+)if(sky_ground23g = ' ')return 1;return 0;void word_n_down()for(int h=0;h<NUM;h+)beginh = random(ROW-5);positionh = random(COL-2);wordh = random(2

10、6) + 'A'speedh = random(SPEED)+1;while(1)if(cycle_end >= NUM)break;test = list-1;if(test < 0)test = 0;if(check_last_row()system("pause");exit(0);for(int i=0;i<NUM;i+)word_one_down(begini,positioni,speedi, wordi,&word_endi);list +;display();Sleep(200);int word_one_down(

11、int begin,int position,int speed,int word,int *word_end)if(*word_end) = 0)if(begin+list*speed >= ROW)return 0;sky_groundbegin+test*speedposition = ' 'if(begin+list*speed >= 19)for(int z=19;z<ROW;z+)if(sky_groundzposition = '#')sky_groundzposition = ' '*word_end = 1;c

12、ycle_end +;break;elsesky_groundbegin+list*speedposition = word;return 0;void gotoxy(int x,int y)COORD coord;coord.X=x;coord.Y=y;SetConsoleCursorPosition( GetStdHandle( STD_OUTPUT_HANDLE ), coord );3、系統(tǒng)運(yùn)行結(jié)果六 設(shè)計(jì)總結(jié)經(jīng)過(guò)一個(gè)星期的上機(jī)實(shí)踐學(xué)習(xí),使我對(duì)C語(yǔ)言有了更進(jìn)一步的認(rèn)識(shí)和了解,要想學(xué)好它要重在實(shí)踐,要通過(guò)不斷的上機(jī)操作才能更好地學(xué)習(xí)它,通過(guò)實(shí)踐,我也發(fā)現(xiàn)我的好多不足之處,首先是自己在指法上還不行,經(jīng)常按錯(cuò)字母,通過(guò)學(xué)習(xí)也有所改進(jìn);再有對(duì)C語(yǔ)言的一些標(biāo)準(zhǔn)庫(kù)函數(shù)不太了解,還有對(duì)函數(shù)調(diào)用的正確使用不夠熟悉,還有對(duì)C語(yǔ)言中經(jīng)常出現(xiàn)的錯(cuò)誤也不了解,通過(guò)實(shí)踐,使我在這幾個(gè)方面的認(rèn)識(shí)有所提高。雖然設(shè)計(jì)時(shí)完成了,但是我覺(jué)得其中還是由一些不足之處:1. 警告句。程序中缺少一些警告句,例如:“是否真的刪除(y/n)?”。2. 重名的情況。由于考慮的不周全,沒(méi)有設(shè)計(jì)遇到重名的情況該怎么處理。3. 選擇單一。我們?cè)O(shè)計(jì)的程序中,只設(shè)計(jì)了按名字選擇,進(jìn)行操作,忽略了重名的情況。短短的一周課程設(shè)計(jì)結(jié)束了,但是這段時(shí)間

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論