日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

生命游戏的三种玩法

發布時間:2024/6/21 综合教程 27 生活家
生活随笔 收集整理的這篇文章主要介紹了 生命游戏的三种玩法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

生命游戲

規則

每個細胞有兩種狀態——存活或者死亡,每個細胞只與以其自身為中心的細胞產生互動。

當細胞為死亡狀態,若周圍有3個存活細胞,則該細胞變成存活狀態(模擬繁殖)

當細胞為存活狀態,若周圍有2個或3個存活細胞,保持原樣

    若周圍有3個以上存活細胞,該細胞變成死亡(模擬極度擁擠)

    若周圍有低于2個一下存活細胞,該細胞死亡(模擬人口稀疏)

這個游戲也叫康威生命游戲、細胞自動機、元胞自動機等。

圖案介紹

“脈沖星”:它周期為3,看起來像一顆爆發的星星

“滑翔者”:每4個回合它會延右下方移動一格,雖然細胞早就不是原來的細胞,但它能保持原來額形狀

“輕量級飛船”:它周期為4,每兩個“回合”向右走一格

“滑翔者槍”:它會不斷的產生一個有一個“滑翔者”

“繁殖者”:它會向右進行,留下一個接一個的“滑翔者槍”

C/C++實現

用C/C++模擬了最簡單的規則,代碼

  1 #include<stdio.h>
  2 #include<stdlib.h>
  3 #include<time.h> 
  4 
  5 const int DATH = 0;
  6 const int ALIVE = 1;
  7 const int maxn = 50;
  8 const int maxr = 100,maxl = 100;
  9 const int dx[] = { -1,-1,-1,0,1,1,1,0 }, dy[] = { -1,0,1,1,1,0,-1,-1 };
 10 
 11 int map[maxr][maxl], newmap[maxr][maxl];
 12 int m, n, general = 0;;
 13 
 14 //初始化,生成隨機數(無法避免隨機數的浪費)
 15 void rule1()
 16 {
 17     srand(time(NULL));
 18     for(int i = 0;i < m;i++)
 19         for (int j = 0; j < n; j++)
 20             map[i][j] = rand() % 2;        //假設約n/2
 21 }
 22 
 23 //"脈沖星",周期為3
 24 void rule2()
 25 {
 26     for (int i = 0; i < m; i++)
 27         for (int j = 0; j < n; j++)
 28             map[i][j] = 0;
 29     map[4][2] = map[5][2] = map[6][2] = 1;
 30     map[4][7] = map[5][7] = map[6][7] = 1;
 31     map[2][4] = map[2][5] = map[2][6] = 1;
 32     map[7][4] = map[7][5] = map[7][6] = 1;
 33 
 34     map[10][2] = map[11][2] = map[12][2] = 1;
 35     map[10][7] = map[11][7] = map[12][7] = 1;
 36     map[9][4] = map[9][5] = map[9][6] = 1;
 37     map[14][4] = map[14][5] = map[14][6] = 1;
 38 
 39     map[4][9] = map[5][9] = map[6][9] = 1;
 40     map[4][14] = map[5][14] = map[6][14] = 1;
 41     map[2][10] = map[2][11] = map[2][12] = 1;
 42     map[7][10] = map[7][11] = map[7][12] = 1;
 43 
 44     map[10][9] = map[11][9] = map[12][9] = 1;
 45     map[10][14] = map[11][14] = map[12][14] = 1;
 46     map[9][10] = map[9][11] = map[9][12] = 1;
 47     map[14][10] = map[14][11] = map[14][12] = 1;
 48 }
 49 
 50 //計算(x,y)周圍存活細胞的個數
 51 int neighbor_num(int x, int y,int map[][maxl])
 52 {
 53     int cnt = 0;
 54     for (int i = 0; i < 8; i++)
 55     {
 56         int nx = x + dx[i], ny = y + dy[i];
 57         if (nx >= 0 && nx < m && ny >= 0 && ny < n && map[nx][ny])  cnt++;
 58     }
 59     return cnt;
 60 }
 61 
 62 //打印第i代的結果
 63 void print_general()
 64 {
 65     printf("第%d代:
", general);
 66     for (int i = 0; i < m; i++)
 67     {
 68         for (int j = 0; j < n; j++)
 69             if (map[i][j])  printf("■");
 70             else printf("□");
 71         printf("
");
 72     }
 73 }
 74 
 75 //將map復制到tmp_map
 76 void copy_map(int map[][maxl], int tmp_map[][maxl])
 77 {
 78     for (int i = 0; i < m; i++)
 79         for (int j = 0; j < n; j++)
 80             tmp_map[i][j] = map[i][j];
 81 }
 82 
 83 //得到下一代
 84 void iteration()
 85 {
 86     int tmp_map[maxr][maxl];
 87     copy_map(map, tmp_map);        //保存之前圖像,使得當前元素狀態的改變還是基于之前的地圖,而不是被修改了的
 88     for(int i = 0;i < m;i++)
 89         for (int j = 0; j < n; j++)
 90         {
 91             int cnt = neighbor_num(i, j, tmp_map);
 92             switch (cnt)
 93             {
 94             case 2: continue;
 95             case 3: map[i][j] = ALIVE; break;
 96             default: map[i][j] = DATH; break;
 97             }
 98         }
 99 
100     general++;
101     print_general();
102 }
103 
104 int main()
105 {
106     scanf("%d%d", &m, &n);
107     rule1();
108     print_general();
109     while (1)
110         iteration();
111 
112     return 0;
113 }

View Code

Excel中的VBA實現

某位大神寫的,自帶滑翔機,鏈接

模擬軟件Golly

自帶各種規則和圖案,體驗感極好,當然也可以編寫規則和圖案,貼吧里有一些教程,鏈接

各種版本的下載鏈接:http://golly.sourceforge.net/

附(其生成的一些有趣圖片):

官網logo

謝賓斯基三角形

柔和的曲線

參考鏈接:維基百科-康威生命游戲

總結

以上是生活随笔為你收集整理的生命游戏的三种玩法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。