BBC 生命大设计
BBC霍金的生命的意义一视频中,有一段图案特别漂亮,于是我就写了一下,具体的繁殖规则是这样的:有存活体和死方格两个部分构成,我分别用 ' * ' 和 ‘ ’ 表示。当一个存活体周围有超过三个存活体时,这个存活体就会因为过度拥挤而死亡,当一个死方格周围有三个存活体时,这个死方格就会产生新的生命。
这里我使用了滚动数组,从而优化了代码。
不过在运行的时候发现,死亡率依旧很高,并没有达到视频中那么漂亮的图案,而是很快就死了。我分析了一下,觉得是繁殖生长的条件太苛刻了,从而并没有较好的生长出来,而死亡相对比较容易发生。所以看到的图案是,一开始有很多很多的细胞,没过多久就死光了。
#include <cstdio>
#include <iostream>
#include <cstring>
#include <stdlib.h>
#include <time.h> using namespace std; #define LLEN 100 char map[2][LLEN][LLEN];
int point[8][2] = {{0,1}, {0,-1}, {1,0}, {-1,0}, {1,1}, {1,-1}, {-1,-1}, {-1,1}}; void _print(int index) {
for(int i = 0; i < LLEN; i++) {
for(int j = 0; j < LLEN; j++) {
printf("%c", map[index][i][j]);
}
printf("\n");
}
} int find(int index, int x, int y) {
int res = 0;
for(int i = 0; i < 8; i++) {
int xx = x + point[i][0];
int yy = y + point[i][1];
if(xx >= 0 && xx < LLEN && yy >= 0 && yy < LLEN) {
if('*' == map[index][xx][yy]) res++;
}
}
return res;
} void init(int index) {
for(int i = 0; i < LLEN; i++) {
for(int j = 0; j < LLEN; j++) {
map[index][i][j] = ' ';
}
}
} int main(int argc, char* argv[]) {
int a, b;
a = 0;
b = 1;
system("clear");
srand((int)time(0));
for(int i = 0; i < LLEN; i++) {
for(int j = 0; j < LLEN; j++) {
int t = random()%2;
if(0 == t) {
map[a][i][j] = '*';
}
else {
map[a][i][j] = ' ';
}
map[b][i][j] = ' ';
}
} _print(a);
while(1) {
sleep(1);
system("clear");
swap(a, b);
init(a);
for(int i = 0; i < LLEN; i++) {
for(int j = 0; j < LLEN; j++) {
if('*' == map[b][i][j] && find(b, i, j) > 3) { // 死亡规则
map[a][i][j] = ' ';
}
else if(' ' == map[b][i][j] && find(b, i, j) == 3) { // 繁殖规则
map[a][i][j] = '*';
}
}
}
_print(a);
}
}
BBC 生命大设计的更多相关文章
- java设计6大设计原则
@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...
- Java设计模式GOF之6大设计原则
Java设计模式GOF之6大设计原则原则 1.开闭原则(Open Close Principle) 一个软件实体如类.模块和函数应该对扩展开放,对修改关闭. 开闭原则是面向对象的可复用设计的第一块基石 ...
- 什么是好的产品——Diet Rams的十大设计原则
博朗(BRAUN)的首席设计师Diet Rams的十大设计原则 第一条,好的产品是有创意的,它必须是一个创新的东西: 第二条,好的产品是有用的,一定要对人有用: 第三条,好的产品是优美的,它必须有美感 ...
- 九思,OA协同九大设计要点
伴随着产品线的丰富和客户数量的增加,我们发现烂尾项目也与日俱增,客户和OA公司之间的矛盾日益尖锐,一套好OA系统远非增加几个特色功能这么简单,套用孔子"君子有九思"的话,好的OA系 ...
- Python6大设计原则
内容总览 六大设计原则都有哪些 一.单一职责原则 二.里氏替换原则 三.依赖倒置原则 四.接口隔离原则 五.迪米特法则 六.开放封闭原则 内容详解 一.单一职责原则 单一职责原则:英文名称是Singl ...
- 大设计时代:针对超大网页布局的一些思考和建议 [Aseoe]
对于有些设计项目来说,老套的设计模式并不奏效,你需要设计的大点,要比以往设计的元素还要大,因此就非常适合采用超大网页布局.无论是采用大块大块的背景照片还是背景视频,超大网页布局的效果非常显著:极具视觉 ...
- Java面向对象7大设计原则
目录 单一职责原则 SRP 开闭原则 OCP 里氏替换原则 LSP 依赖倒置原则 DIP 接口隔离原则 ISP 组合复用原则 CRP 迪米特法则 LOD 单一职责原则 SRP 一个类只有一个引起修改变 ...
- abp模块生命周期设计思路剖析
abp中将生命周期事件抽象为4个接口: //预初始化 public interface IOnPreApplicationInitialization { void OnPreApplicationI ...
- java7大设计原则
1.单一职责原则(srp) 每一个对象或者类只有一个职责.高内聚.低耦合. 2.开闭原则(ocp) 对扩展开放,对修改关闭.使用性,灵活性,扩展性,稳定性延续性,重复.维护. 3.里氏替换原则(lsp ...
随机推荐
- C# net部署图片分布式存储服务器的小案例
如果web服务用户多了,访问多了,用户上传的图片,文件等内容放在一块,想必服务器是承受不住的,这个时候,我们就需要考虑分布式存储的方法了. 如图所示:一个web服务器拖2个图片服务器 如何做到用户上传 ...
- 【MS Office2013小技巧】Word中公式中的等号对齐
步骤: 1. 先将所需要对齐的公式分不同行打出来: 2. 选中所有公式,右键点击并选择“对齐点(A) =”,如图 此时,如果能够正常对齐,则无需进行下面的步骤,但如果出现下图情况并未正常对齐的,再进行 ...
- 最浅显、易懂的Linux 硬链接与软链接的理解
正文: Linux上的文件可以这么理解:文件-->文件名.文件是一个Object,也就是磁盘上的二进制数据.一个文件可以有多个文件名,平时我们都是通过文件名访问文件Object. 这样,硬链接可 ...
- 事件tou
#define EV_TIMER_RESOLUTION 1 /* 1 msec */ #define EV_READ_EVENT EPOLLIN #define EV_WRITE_EVENT EPOL ...
- Android判断界面
仿造微信,第一次进入去引导界面,否则进启动界面. package edu.hpu.init; import edu.hpu.logic.R; import android.app.Activ ...
- hdu 3072
强连通分量——tarjin 算法 这道题和前面那道hdu 2767唯一不同就是,2767需要找出最小数量的边使图成为连通分量,而这个题需要一点点贪心的思想在里面,它需要求出代价最小的边使图成为连通分量 ...
- JAVA 反序列化攻击
Java 反序列化攻击漏洞由 FoxGlove 的最近的一篇博文爆出,该漏洞可以被黑客利用向服务器上传恶意脚本,或者远程执行命令. 由于目前发现该漏洞存在于 Apache commons-collec ...
- mysql 区间锁 对于没有索引 非唯一索引 唯一索引 各种情况
The locks are normally next-key locks that also block inserts into the "gap" immediately b ...
- java学习多线程之死锁
形成死锁的前提是同步代码块嵌套. 什么是死锁?当一个线程拿到锁以后在这个锁内部的代码需要访问另一段的代码的时候另外一个程序的锁被另外一个线程拿到,这样的话,就造成了两个锁互不想让程序没法往下执行的这种 ...
- bzoj1085
肯定是搜索题无疑问, 首先要求在15步以内(包括15步)到达目标状态,也就是限定了搜索的深度,于是我们用dfs更合适 但这样复杂度仍然太大,原因就是我们在搜索中做了很多很不优的尝试 考虑当前状态若与目 ...