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生成.so供Mono调用
Mono诞生的初衷是为了吸引更多的Windows .Net程序员来加入Linux平台的开发.但在Linux世界中C语言依然是 主流.很多时候一些关键应用(比如大型 笛卡儿 乘积运算.需要调用平台硬件功 ...
- POJ 3258 River Hopscotch 二分枚举
题目:http://poj.org/problem?id=3258 又A一道,睡觉去了.. #include <stdio.h> #include <algorithm> ]; ...
- UIStackView 简单使用
UIStackView提供了一个高效的接口用于平铺一行或一列的视图组合.对于嵌入到StackView的视图,你不用再添加自动布局的约束了.Stack View管理这些子视图的布局,并帮你自动布局约束. ...
- Duplicate Symbol链接错的原因总结和解决方法-b
duplicate symbol是一种常见的链接错误,不像编译错误那样可以直接定位到问题的所在.但是经过一段时间的总结,发现这种错误总是有一些规律可以找的.例如,我们有如下的最简单的两个类代码: // ...
- android系统如何自适应屏幕大小
1.屏幕相关概念 1.1分辨率 是指屏幕上有横竖各有多少个像素 1.2屏幕尺寸 指的是手机实际的物理尺寸,比如常用的2.8英寸,3.2英寸,3.5英寸,3.7英寸 android将屏幕大小分为四个级别 ...
- Img图片超过了DIV的最大宽度 解决方案
在该图片所在的div限定一下里边所有的图片的最大长度,这个长度的值可以是div的长度的略小即可. 例如: <div class="content" style="w ...
- Android Canvas使用drawBitmap绘制图片
1.基本的绘制图片方法 //Bitmap:图片对象,left:偏移左边的位置,top: 偏移顶部的位置 drawBitmap(Bitmap bitmap, float left, float top, ...
- java学习多线程之卖票示例
这一节我们来说一个示例就是卖票示例: 需求: 我们现在有100张票,然后分四个窗口来卖,直到卖完为止. 思路: 1.先定一个一个票类,描述票的属性,还有打印卖出的票,并且实现Runnable中的run ...
- Leetcode 240. Search a 2D Matrix II
Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the follo ...
- BZOJ2105: 增强型LCP
2105: 增强型LCP Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 366 Solved: 86[Submit][Status] Descrip ...