程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 生命游戲。,生命游戲

生命游戲。,生命游戲

編輯:C++入門知識

生命游戲。,生命游戲


生命游戲其實是一個零玩家游戲,它包括一個二維矩形世界,這個世界中的每個方格居住著一個活著的或死了的細胞。一個細胞在下一個時刻生死取決於相鄰八個方格中活著的或死了的細胞的數量。如果相鄰方格活著的細胞數量過多,這個細胞會因為資源匮乏而在下一個時刻死去;相反,如果周圍活細胞過少,這個細胞會因太孤單而死去。實際中,你可以設定周圍活細胞的數目怎樣時才適宜該細胞的生存。如果這個數目設定過高,世界中的大部分細胞會因為找不到太多的活的鄰居而死去,直到整個世界都沒有生命;如果這個數目設定過低,世界中又會被生命充滿而沒有什麼變化。實際中,這個數目一般選取2或者3;這樣整個生命世界才不至於太過荒涼或擁擠,而是一種動態的平衡。這樣的話,游戲的規則就是:當一個方格周圍有2或3個活細胞時,方格中的活細胞在下一個時刻繼續存活;即使這個時刻方格中沒有活細胞,在下一個時刻也會“誕生”活細胞。在這個游戲中,還可以設定一些更加復雜的規則,例如當前方格的狀況不僅由父一代決定,而且還考慮祖父一代的情況。你還可以作為這個世界的上帝,隨意設定某個方格細胞的死活,以觀察對世界的影響。

 

以上內容來自百度。某公司線上筆試出了這麼一個編程題。模仿了有限的二維空間(x*y)的情況,輸入當前時刻,得到下一時刻的狀態。

代碼很簡單 ,運行通過了測試,當然我也不知道是否完全正確。只是記錄一下,歸於ACM吧 。望批評指正。

下面是我的代碼():

  1 #include <iostream>
  2 
  3 
  4 using namespace std;
  5 
  6 void Test(int x,int y);
  7 char**  imalloc(int x,int y);
  8 void ifree(int x,char** Temp);
  9 char **now    =    NULL;
 10 char **next    =    NULL;
 11 
 12 int main()
 13 {
 14     int x    =    0;
 15     int y    =    0;
 16     int i = 0;
 17     
 18     
 19     while(cin>>x>>y)
 20     {
 21         //申請內存
 22         now    =    imalloc(x+2,y+3);    //申請(x+1)*(y+1) 外加每行後面的“\0”
 23         next=    imalloc(x,y+1);
 24         
 25         //輸入
 26         for (i = 0;i<x;i++)
 27         {    
 28             cin>>*(now+i+1)+1;
 29             
 30         }
 31         Test(x,y);
 32         
 33         //輸出
 34         cout<<x<<" "<<y<<endl;
 35         for (i = 0;i<x;i++)
 36         {
 37             cout<<*(next+i)<<endl;
 38         }
 39         
 40         //釋放內存
 41         ifree(x+2,now);
 42         ifree(x,next);
 43         
 44     }
 45     
 46     return 0;
 47 }
 48 char** imalloc(int x,int y)
 49 {
 50     int i    =    0;
 51     
 52     char** Temp    =    new char*[x];
 53     for (i=0;i<x;i++)
 54     {
 55         *(Temp+i)    =    new char[y];    
 56         memset(*(Temp+i),0,y);
 57         
 58     }
 59     return Temp;
 60 
 61 
 62 }
 63 void ifree(int x,char** Temp)
 64 {
 65     int i =0;
 66     for (i=0;i<x;i++)
 67     {
 68         delete *(Temp+i);        
 69     }
 70     delete Temp;
 71 
 72 }
 73 void Test(int x,int y)
 74 {
 75 
 76     int i = 0;
 77     int j = 0;
 78     for (i=0;i<x;i++)
 79     {
 80 
 81         for (j=0;j<y;j++)
 82         {
 83             int iCount    =    0;
 84             //判斷鄰居的情況呀
 85             //左上
 86             if (now[i][j]=='*')
 87             {
 88                 iCount++;
 89             }
 90             //上
 91             if (now[i][j+1]=='*')
 92             {
 93                 iCount++;
 94             }
 95             //右上
 96             if (now[i][j+2]=='*')
 97             {
 98                 iCount++;
 99             }
100             //左
101             if (now[i+1][j]=='*')
102             {
103                 iCount++;
104             }
105             //右
106             if (now[i+1][j+2]=='*')
107             {
108                 iCount++;
109             }
110             //左下
111             if (now[i+2][j]=='*')
112             {
113                 iCount++;
114             }
115             //下
116             if (now[i+2][j+1]=='*')
117             {
118                 iCount++;
119             }
120             //右上
121             if (now[i+2][j+2]=='*')
122             {
123                 iCount++;
124             }
125         
126             //判斷當前位置的下一刻
127             if (now[i+1][j+1]=='*')    //當前活著
128             {    
129                 if (iCount<2||iCount>3)
130                 {
131                     next[i][j]    =    '.';
132                 }
133                 else if (iCount==2||iCount==3)
134                 {
135                     next[i][j]    =    '*';
136                 }
137 
138             }
139             else if (now[i+1][j+1]=='.')//當前死亡
140             {
141                 
142                 if (iCount==3)
143                 {
144                     next[i][j]    =    '*';
145                 }
146                 else
147                 {
148                     next[i][j]    =    '.';
149                 }
150             }
151         
152         }
153     }
154 }

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved