NCF参数化建筑论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 42731|回复: 10
打印 上一主题 下一主题

[参赛作品] C+Z杯参赛 --【生命游戏】

[复制链接]
跳转到指定楼层
1m
发表于 2017-10-9 20:56:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

看到这个主题,感觉眼前一阵黑一阵白...
黑白是非,虚拟世界存黑白,真实社会乱是非...
黑夜白天,灯火通明不夜城,雾霾遮蔽少光明...
黑脸白衣,屠狗之辈多仗义,道貌岸然披羊皮...
黑与白的界线俨然已经模糊了,其实黑与白本身就存在辩证的统一
各种色彩加到一起是白色,各种色彩染料加到一起是黑色...
-----------------------------------------------------
黑与白是如此深奥的主题,有无法参透之厚重,做个【生命游戏】抛砖引玉!
1、规则制定
用正方形的格子阵列表示细胞,黑色表示生存,白色表示死亡;
每个细胞有两种状态,即存活或死亡,每个细胞与以自身为中心的周围八格细胞产生互动。
  • 当前细胞存活时,周围存活细胞<2时,该细胞死亡。(模拟生命数量稀少)
  • 当前细胞存活时,周围有2-4个存活细胞,该细胞存活。
  • 当前细胞存活时,周围存活细胞>4时,该细胞死亡。(模拟生命数量过多)
  • 当前细胞死亡时,周围存活细胞=3时,该细胞存活。(模拟繁殖)

随机确定初始状态。按照规则处理一轮得到下一代细胞状态,不断迭代。
2、随机确定初始状态,实现迭代过程。

评分

参与人数 1强度 +3 照度 +20 收起 理由
skywoolf + 3 + 20 支持一下!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享
推荐
发表于 2017-10-9 22:06:02 | 只看该作者
放个代码版的
  1. #_*_coding:UTF-8_*_
  2. #!/usr/bin/python

  3. #Author :CPF
  4. #Datatime :2017-06-03
  5. #copyright

  6. from itertools import groupby
  7. from itertools import count
  8. import random

  9. import Rhino.Geometry as rg
  10. from Grasshopper.Kernel.Data import GH_Path
  11. from Grasshopper import DataTree

  12. class Graph:
  13.     """
  14.     一个二维向量用来存储细胞的的状态值,死为0,生为1.
  15.     """
  16.     DEATH = 0
  17.     LIVE = 1
  18.     def __init__(self,row,col):
  19.         """
  20.         row行,col列,默认状态值为死
  21.         """
  22.         self.vec2 = [[Graph.DEATH for i in range(col)] for k in range(row)]
  23.         self._row = row
  24.         self._col = col
  25.         
  26.     @property
  27.     def row (self):
  28.         return self._row
  29.         
  30.     @property
  31.     def col(self):
  32.         return self._col
  33.         
  34.     def reset(self,live_rate):
  35.         """
  36.         重设细胞的的状态,live_rate为细胞的存活几率。
  37.         """
  38.         for i in range(self._row):
  39.             for k in range(self._col):
  40.                 rand_value = random.uniform(0,1)
  41.                 if live_rate > rand_value:
  42.                     self.vec2[i][k] = Graph.LIVE
  43.                 else:
  44.                     self.vec2[i][k] = Graph.DEATH
  45.         
  46.     def neighbor_live_count(self,row,col):
  47.         """
  48.         获取第row行,第col列的相邻的8个细胞的存活细胞数目
  49.         """
  50.         count = 0
  51.         neighbor = {'right_top':(-1,-1),'top':(-1,0),'left_top':(-1,1),
  52.                     'right':(0,-1),'lift':(0,1),
  53.                     'right_buttom':(1,-1),'buttom':(1,0),'left_buttom':(1,1)}
  54.         for value in neighbor.values():
  55.             if row == 0:
  56.                 neig_row = row + value[0]
  57.             else:
  58.                 neig_row = (row + value[0])%self.row
  59.             if col == 0:
  60.                 neig_col = col + value[1]
  61.             else:
  62.                 neig_col = (col + value[1])%self.col
  63.             if self.vec2[neig_row][neig_col] == Graph.LIVE:
  64.                 count = count + 1
  65.         return count
  66.         
  67.     def updates(self):
  68.         """
  69.         更新细胞的状态值
  70.         """
  71.         lists = []
  72.         for i in range(self._row):
  73.             row_list = []
  74.             for k in range(self.col):
  75.                 count = self.neighbor_live_count(i,k)
  76.                 row_list.append(count)
  77.             lists.append(row_list)

  78.         for i in range(self.row):
  79.             for k in range(self.col):
  80.                 count = lists[i][k]
  81.                 print count
  82.                 if count == 3 :
  83.                     self.vec2[i][k] = Graph.LIVE
  84.                 elif count != 2:
  85.                     self.vec2[i][k] = Graph.DEATH

  86.     def display(self):
  87.         """
  88.         显示细胞状态
  89.         """
  90.         state =[]
  91.         for row in self.vec2:
  92.             state.extend(row)
  93.         return state

  94. if bool:
  95.     graph = Graph(x,y)
  96.     graph.reset(0.4)
  97.     a = graph.display()
  98. else:
  99.     graph.updates()
  100.     a = graph.display()
复制代码

评分

参与人数 1强度 +1 收起 理由
toplay + 1 疏影横斜手很快,暗香浮动现大神

查看全部评分

3m
发表于 2017-10-9 23:54:47 | 只看该作者
是元胞自动机吧,好久没见人弄了~手好快!

点评

抢红包抢习惯了,手快有手慢无  详情 回复 发表于 2017-10-10 10:09
4m
发表于 2017-10-10 09:54:22 | 只看该作者
围观兔子

点评

不知是何方大圣,感谢支持!  详情 回复 发表于 2017-10-10 10:07
5m
 楼主| 发表于 2017-10-10 10:07:09 | 只看该作者

不知是何方大圣,感谢支持!
6m
 楼主| 发表于 2017-10-10 10:09:48 | 只看该作者
skywoolf 发表于 2017-10-9 23:54
是元胞自动机吧,好久没见人弄了~手好快!

抢红包抢习惯了,手快有手慢无
7m
发表于 2017-10-10 13:57:02 | 只看该作者
围观兔子,学习学习
8m
发表于 2017-10-15 20:29:24 | 只看该作者
牛逼!!!!!
9m
发表于 2019-12-2 07:55:26 | 只看该作者
学习学习。。。。。。。。。。。。。。。。。。
10m
发表于 2021-1-19 00:42:16 来自手机 | 只看该作者
ncf看到了兔神,不得了不得了
11m
发表于 2022-8-31 10:46:17 | 只看该作者
高手啊 这个厉害了

小黑屋|手机版|NCF参数化建筑论坛 ( 浙ICP备2020044100号-2 )    辽公网安备21021102000973号

GMT+8, 2024-11-21 20:53 , Processed in 0.081854 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表