1999 Fall 程式設計
     作業二:模擬 Life Game

簡化的 Life Game

在一個 N * N 的方格棋盤上, 有一些生命體在延續/繁衍著, 在每一方格內如果顯示 * 符號的話就代表那裡有一個生命體, 不顯示任何東西的地方就是沒有生命體存在, 他們生存的規則是這樣子的:

  1. 對於一個生命體來說, 如果他的周圍八格內存活的生命體總數太少 (一個或是沒有) 的話, 他自己在下一個時刻就會因為無法抵抗天敵而死去, 同樣地如果生命體總數太多 (四個或是以上) 的話, 在下一個時刻他也會因為食物太少而死去。

  2. 在任何空格上如果周圍八格內的生命體總數剛好是三個的話, 在下一個時刻就會誕生一個新的生命體。

  3. 如下圖所示, 黑色 * 代表目前的生命體, 橙色圓圈是下一個時刻即將誕生的生命體的位置, 藍色圓圈的位置是下一個時刻即將死亡的生命體:

注意:

  1. 整個遊戲的表現和你的邊界條件是相關的, 為了簡單起見, 在我們的遊戲中我們把棋盤外都假設毫無生命存在。

  2. 整個遊戲中我們好像把時間凝結住了, 把時間看成某一個時刻和下一個時刻這樣子不連續的點, 在真實世界裡會稍為複雜一些

如何寫一個 C 程式來模擬這樣子一個生存環境呢?

  1. 這是一個模擬的環境, 所以你需要用迴圈來模擬時間的進行, 在迴圈內代表相同的時刻所發生的事情, 逐一替每一個方格點檢查它目前的狀況, 並且求出它下一個時刻的狀態

  2. 你可以用陣列變數來記錄棋盤上方格內是否有生命體

  3. 一開始棋盤上的狀況請運用亂數來產生
    #include <time.h>
    #include <stdlib.h>
    ...
    srand(time(0));
    ...
    rand()
    ...
    

  4. 你需要用移動游標的函式來控制列印的位置
    #include <conio.h>
    ...
        gotoxy(x, y);
    

  5. 為了要清楚一點地看到變化的情況, 你可以使用
    #include <dos.h>
    ...
        delay(millisecond);
    
    來延緩執行的速度

  6. 你需要去檢查棋盤上是否還有變化, 如果沒有變化了, 就是已經達到穩定的狀況, 這時可以結束你的迴圈。 因為有的時候會進入一種震盪的狀態, 所以執行的時間 (迴圈數目) 應該要有上限。

程式要求:

  1. 除了以亂數初始化之外, 請提供以文字輸入的方式來初始化方格上的生命體, 例如:

  2. 請儘量用函式來簡化程式邏輯

  3. 請注意這個作業要求你儘量完整地測試你的程式, 本作業除了一般的要求之外請繳交程式碼之檔案, 以方便老師測試你程式的正確性

  4. 請以 ANSI C 語法及函式庫來製作

範例執行程式

☆作業繳交的要求☆

程式設計課程 首頁

製作日期: 99/10/19 by 丁培毅 (Pei-yih Ting)
E-mail: pyting@cs.ntou.edu.tw