zoukankan      html  css  js  c++  java
  • 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("
    ");
    	}
    }
    
    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);
    	}
    }


  • 相关阅读:
    一种通用的简易缓存设计方案
    SpringCloud接入Passport中台服务的FeignClient简易集成配置
    一种基于P2P技术的高效数据传输方式
    应用多环境部署和Redis高可用
    瑞金小吃
    前(单页面)后端完全分离的OAuth2授权和分享
    Session(数据)共享的前后端分离Shiro实战
    10万Http(单机和集群Server)Subscribe的可行性实验和压测
    2018年你应该了解的前端新技术
    js常见问题总结归纳
  • 原文地址:https://www.cnblogs.com/pangblog/p/3253851.html
Copyright © 2011-2022 走看看