1. 程式人生 > >[原始碼和文件分享]基於C語言實現的流星雨模擬課程設計

[原始碼和文件分享]基於C語言實現的流星雨模擬課程設計

一、課程設計內容及要求

程式模擬一組流星飛向地面的情景。地面用多行#來表示,流星用大寫字母不表示。程式產生一組流星(比如10個),從螢幕頂部下降飛向地面。一組流星中,每個流星的字元顏色是隨機的,下降的位置是隨機的,下降的速度也是隨機的。一個流星下落只能去掉一個#號,當最後一行地面有#被去掉時,程式終止。

二、設計思路

  • 程式在下降過程中,程式必須知道流星的字元、顏色、位置、速度,因此程式需要定義以下幾個陣列變數:存放流星字元的陣列,存放流星字元顏色的陣列,存放流星行位置的陣列,存放流星列位置的陣列,存放流星下降速度的陣列

  • 可定義二維陣列screen表示地面和天空,此陣列是一個24行81列的字元陣列。上面的行表示天空,陣列單元的值是空格;最下面的幾行(如5行)表示地面,陣列單元的值是’#’;整個螢幕的大小是80*25,即25行80列, 為了在輸出最後一行時不換行滾屏,程式只能利用上面的24行空間。把陣列定義成81列的目的是,每行的最後字元賦值成’\0’,就可以按照字串的方式輸出每行文字了

  • 程式首先輸出地面和天空,即輸出定義的二維陣列screen中的字串,前19行是空行,後5行是#號。這樣screen[24][81]的字元矩陣就與整個螢幕對應起來

  • 然後隨時機產生一組流星資料,包括字元、顏色、位置和速度。速度用一次下降多少行來表示,最大的速度是4。由於要隨機產生這些資料,因此需要呼叫random函式。random函式的原型是 int random(int num); 這個函式產生一個0—num-1之間的一個隨機數。 流星字元可以這樣產生:random(26)+’A’; 流星字元的顏色可以這樣產生:random(16)+1;流星下降的位置可以這樣產生:random(4)+1;流星的行位置一開始都是1; 流星的列位置可以這樣產生:random(80)+1;但要保證所有流星的列位置不能相同(設計一個演算法來判斷)

  • 呼叫random之前,用randomize()庫函式進行初始化。 兩個庫函式都在stdlib.h檔案中

  • 每個流星按照自己的速度下落,所謂的下落就是逐行移動流星字元:在下一行新的位置上顯示流星字元,在原來的位置上顯示空格以便擦除流星字元,然後再延遲等待幾十毫秒。這樣迴圈往復就構成了流星下落的動畫。 但要注意,流星的速度各不相同,而一次下落多行的流星也要逐行下落

  • 如果流星的新位置所對應的screen的單元格的值是’#’,則表示撞到了地面。 這種情況下在流星的新位置上輸出空格,擦除#號,並且對screen相應的單元賦值為空格,流星字元也要賦值為空格,以表示流星消失

  • 當screen[23]中任何一個單元格是空格時,程式終止


參考文件和完整的文件和原始碼下載地址:

https://www.write-bug.com/article/138.html