C语言 细胞自动机(生命游戏)

  1 #include<stdio.h>
  2 #include<stdlib.h>
  3 #include <windows.h>
  4
  5 #define ROWS 60
  6 #define COLS 60
  7
  8 int board[ROWS][COLS];
  9 int temp[ROWS][COLS];
 10
 11 int system(const char *string);
 12 void randomize_board();
 13 void show_board();
 14 int num_neighbours(int x,int y);
 15 void update_board();
 16
 17 int main(){
 18     randomize_board();
 19     while(1){
 20         update_board();
 21     }
 22     return 0;
 23 }
 24
 25 //初始化
 26 void randomize_board(){
 27     for(int y=0;y<ROWS;y++){
 28         for(int x=0;x<COLS;x++){
 29             if(rand()%5==0){
 30                 board[x][y]=1;
 31             }
 32             temp[x][y] = board[x][y];
 33         }
 34     }
 35 }
 36
 37 //显示
 38 void show_board(){
 39     system("cls");
 40     for(int y=0;y<ROWS;y++){
 41         for(int x=0;x<COLS;x++){
 42             if(board[x][y]){
 43                 printf("■");
 44             }else{
 45                 printf("□");
 46             }
 47         }
 48         printf("\n");
 49     }
 50     Sleep(800);
 51 }
 52
 53 //计算邻居数
 54 int num_neighbours(int x,int y){
 55     int num_adj = 0; //附近存活的细胞数
 56     int tmpy = y;
 57     int tmpx = x;
 58
 59     //8号位
 60     if(y-1<0)
 61         tmpy = ROWS -1;
 62     else
 63         tmpy = y - 1;
 64     if(board[x][tmpy] == 1) num_adj++;
 65
 66     //2号位
 67     if(y+1>ROWS)
 68         tmpy = 0;
 69     else
 70         tmpy = y+1;
 71     if(board[x][tmpy]==1) num_adj++;
 72
 73     //4号位
 74     if(x-1<0)
 75         tmpx = COLS-1;
 76     else
 77         tmpx = x-1;
 78     if(board[tmpx][y]==1)num_adj++;
 79
 80     //6号位
 81     if(x+1>=COLS)
 82         tmpx = 0;
 83     else
 84         tmpx = x+1;
 85     if(board[tmpx][y]==1) num_adj++;
 86
 87     //9号位
 88     if (y + 1 >= ROWS)
 89         tmpy = 0;
 90     else
 91         tmpy = y + 1;
 92     if (x + 1 >= COLS)
 93         tmpx = 0;
 94     else
 95         tmpx = x + 1;
 96     if (board[tmpx][tmpy] == 1) num_adj++;
 97
 98     //1号位
 99     if (y - 1 <0)
100         tmpy = ROWS-1;
101     else
102         tmpy = y-1;
103     if (x - 1 < 0)
104         tmpx = COLS-1;
105     else
106         tmpx = x - 1;
107     if (board[tmpx][tmpy] == 1) num_adj++;
108
109     //3号位
110     if(x+1>=COLS)
111         tmpx = 0;
112     else
113         tmpx = x+1;
114     if(y-1<0)
115         tmpy = ROWS-1;
116     else
117         tmpy = y-1;
118     if(board[tmpx][tmpy]==1) num_adj++;
119
120     //7号位 y+ x-
121     if (y + 1 >= ROWS)
122         tmpy = 0;
123     else
124         tmpy = y + 1;
125     if(x-1<0)
126         tmpx = COLS-1;
127     else
128         tmpx = x - 1;
129     if(board[tmpx][tmpy]==1) num_adj++;
130
131     return num_adj;
132
133 }
134
135 //更新
136 void update_board(){
137     int neighbours = 0;
138
139     for(int y=0;y<ROWS;y++){
140         for(int x=0;x<COLS;x++){
141             neighbours = num_neighbours(x,y);
142             if(neighbours<2&&board[x][y]==1){
143                 temp[x][y]=0;
144             }
145             else if(neighbours>3&&board[x][y]==1){
146                 temp[x][y]=0;
147             }else if(neighbours==3&&board[x][y]==0){
148                 temp[x][y]=1;
149             }
150         }
151     }
152
153     for(int i=0;i<ROWS;i++){
154         for(int j=0;j<COLS;j++){
155             board[j][i]=temp[j][i];
156         }
157     }
158     show_board();
159 }

原文地址:https://www.cnblogs.com/blzm742624643/p/9348942.html

时间: 2024-10-15 09:19:54

C语言 细胞自动机(生命游戏)的相关文章

生命游戏&amp;一维细胞自动机 笔记

de 生命游戏是一种简单的聚合模型,展示了事物是如何聚合的,是自动机(CA)模型的一种.由剑桥大学约翰康威发明,其规则为: 1. 每个细胞拥有八个邻居,细胞状态只有存活(黑)和死亡(白)两种: 2.处于死亡状态的细胞可以在有三个存活邻居的情况下复活: 3.存活状态的细胞在相邻有2个一下或三个以上存活细胞的情况下会死去,2-3个相邻细胞存活时会继续存活: 从而产生了信号灯.闪光灯.滑翔机.警示灯等经典的变换. 遵循简单规则的简单图像聚合一起可以形成复杂图像,甚至如活物一般能进行空间平移(自组织模型

混沌,细胞自动机与生命游戏

混沌,细胞自动机与生命游戏 1.康威生命游戏的规则 生命游戏中,对于任意细胞,规则如下:每个细胞有两种状态-存活或死亡,每个细胞与以自身为中心的周围八格细胞产生互动. Ⅰ. A live square with two or three live neighbors survives (survival).Ⅱ. A dead square with exactly three live neighbors becomes a live cell (birth).Ⅲ. In all other c

生命游戏和细胞自动机的学习笔记

Last updated: 23rd. July, 2012 野比 2012 版权所有 (本文为学习笔记,知识浅薄.我会将学习中的实验记录和心得记录在此.) 欢迎对这方面感兴趣的爱好者一起研究. 寻求技术指导. 联系QQ:1429013154 我一直对人工智能很感兴趣,苦于数学基础太差,很多理论方面的东西理解起来十分吃力.最近又翻出以前的学习目标:人工生命.名字挺悬乎,其实很多人都曾和它有过交集,就算没有用到它进化出的好物种--智能机器人,至少也应该听过甚至中过它进化的恶劣物种--蠕虫病毒. 说

C语言练习题一道——生命游戏

生命游戏是一个很简单,但却是很有趣的程序习题.在一个四周都可以延伸到无限的 棋盘上的某个格子中会有一个有机体.每一个有机体在时间t 时,会依照环绕着它的8 个邻 居的特性而决定在时间t+1 时是否能生存下去.如果某一格在时间t 时: (1)有一个有机体,但是它的邻居少于或等于1 个,或者是大于3 个,那就会因为不 够稠密或太过稠密,这个有机体在时间t+1 时就会死亡:换言之,在t+1 时间,那一格中不 会存在有机体.下面就是几个在时间t+1 时会死亡的例子,如图1 所示. 图1 (2)有有机体在

元胞自动机+生命游戏

元胞自动机 元胞自动机(Cellular Automaton,复数为Cellular Automata,简称CA,也有人译为细胞自动机.点格自动机.分子自动机或单元自动机).是一时间和空间都离散的动力系统.散布在规则格网 (Lattice Grid)中的每一元胞(Cell)取有限的离散状态,遵循同样的作用规则,依据确定的局部规则作同步更新.大量元胞通过简单的相互作用而构成动态系统的演化. 不同于一般的动力学模型,元胞自动机不是由严格定义的物理方程或函数确定,而是用一系列模型构造的规则构成.凡是满

LeetCode:Game of Life - 康威生命游戏

1.题目名称 Game of Life(康威生命游戏) 2.题目地址 https://leetcode.com/problems/game-of-life 3.题目内容 英文: According to the Wikipedia's article: "The Game of Life, also known simply as Life, is a cellular automaton devised by the British mathematician John Horton Conw

关于康威生命游戏的学习

 康威生命游戏,又称康威生命棋,是英国数学家约翰·何顿·康威在1970年发明的细胞自动机.它最初于1970年10月在<科学美国人>杂志上马丁·葛登能的"数学游戏"专栏出现. 一个偶然机会发现了这个美妙的生命游戏.于是开始写程序来实现它,其实实现是很简单的,我现在还只能做到这个而已,不过还会继续深究下去的.先用Random来生成随机数,这样就可以在初始的时候在随机位置设定生死细胞了.输出的时候用2个for循环就是了.昨天做的时候遇到的问题是不知道最后该怎么判断了,因为判断

生命游戏HTML5 Canvas代码

生命游戏是英国数学家约翰·何顿·康威在1970年发明的细胞自动机.它最初于1970年10月在<科学美国人>杂志中马丁·葛登能(Martin Gardner,1914年11月21日-2010年5月22日.又译:马丁·加德纳)的"数学游戏"专栏出现. 生命游戏其实是一个零玩家游戏,它包括一个二维矩形世界,这个世界中的每个方格居住着一个活着的或死了的细胞.一个 细胞在下一个时刻生死取决于相邻八个方格中活着的或死了的细胞的数量.如果相邻方格活着的细胞数量过多,这个细胞会因为资源匮乏

生命游戏的三种玩法

生命游戏 每个细胞有两种状态--存活或者死亡,每个细胞只与以其自身为中心的细胞产生互动. 当细胞为死亡状态,若周围有3个存活细胞,则该细胞变成存活状态(模拟繁殖) 当细胞为存活状态,若周围有2个或3个存活细胞,保持原样 若周围有3个以上存活细胞,该细胞变成死亡(模拟极度拥挤) 若周围有低于2个一下存活细胞,该细胞死亡(模拟人口稀疏) 这个游戏也叫康威生命游戏.细胞自动机.元胞自动机等. 图案介绍 "脉冲星":它周期为3,看起来像一颗爆发的星星 "滑翔者":每4个回合