我是一个C++初学者,控制台实现了一个元胞自动机。

代码如下:

//"生命游戏"V1.0
//李国良于2017年1月1日编写完成 #include <iostream>
#include <ctime>
#include <Windows.h> using namespace std; const int LineSize = 60;
const int ColumnSize = 100; void initGame(int arr[LineSize][ColumnSize]);
void printMap(int arr[LineSize][ColumnSize]);
int getLivingNum(int arr[LineSize][ColumnSize], int x, int y);
void run(int arr[LineSize][ColumnSize]); int main()
{
SetConsoleTitle("生命游戏");
system("mode con cols=200");
int map[LineSize][ColumnSize];
initGame(map);
printMap(map);
cin.get();
system("cls");
while (true)
{
run(map);
printMap(map);
cin.get();
system("cls");
}
return 0;
} void initGame(int arr[LineSize][ColumnSize])
{
//随机生成
//srand((unsigned)time(NULL));
//for (int i = 0; i < LineSize; ++i)
//{
// for (int j = 0; j < ColumnSize; ++j)
// {
// arr[i][j] = rand() % 2;
// }
//} //脉冲星
//for (int i = 0; i < LineSize; ++i)
//{
// for (int j = 0; j < ColumnSize; ++j)
// {
// arr[i][j] = 0;
// }
//}
//arr[14][16] = 1;
//arr[14][17] = 1;
//arr[14][18] = 1;
//arr[14][22] = 1;
//arr[14][23] = 1;
//arr[14][24] = 1;
//arr[16][14] = 1;
//arr[16][19] = 1;
//arr[16][21] = 1;
//arr[16][26] = 1;
//arr[17][14] = 1;
//arr[17][19] = 1;
//arr[17][21] = 1;
//arr[17][26] = 1;
//arr[18][14] = 1;
//arr[18][19] = 1;
//arr[18][21] = 1;
//arr[18][26] = 1;
//arr[19][16] = 1;
//arr[19][17] = 1;
//arr[19][18] = 1;
//arr[19][22] = 1;
//arr[19][23] = 1;
//arr[19][24] = 1;
//arr[21][16] = 1;
//arr[21][17] = 1;
//arr[21][18] = 1;
//arr[21][22] = 1;
//arr[21][23] = 1;
//arr[21][24] = 1;
//arr[22][14] = 1;
//arr[22][19] = 1;
//arr[22][21] = 1;
//arr[22][26] = 1;
//arr[23][14] = 1;
//arr[23][19] = 1;
//arr[23][21] = 1;
//arr[23][26] = 1;
//arr[24][14] = 1;
//arr[24][19] = 1;
//arr[24][21] = 1;
//arr[24][26] = 1;
//arr[26][16] = 1;
//arr[26][17] = 1;
//arr[26][18] = 1;
//arr[26][22] = 1;
//arr[26][23] = 1;
//arr[26][24] = 1; //滑翔者
//for (int i = 0; i < LineSize; ++i)
//{
// for (int j = 0; j < ColumnSize; ++j)
// {
// arr[i][j] = 0;
// }
//}
//arr[1][1] = 1;
//arr[2][2] = 1;
//arr[2][3] = 1;
//arr[3][1] = 1;
//arr[3][2] = 1; //轻量级飞船
//for (int i = 0; i < LineSize; ++i)
//{
// for (int j = 0; j < ColumnSize; ++j)
// {
// arr[i][j] = 0;
// }
//}
//arr[1][2] = 1;
//arr[1][3] = 1;
//arr[1][4] = 1;
//arr[1][5] = 1;
//arr[2][1] = 1;
//arr[2][5] = 1;
//arr[3][5] = 1;
//arr[4][1] = 1;
//arr[4][4] = 1; //滑翔者枪
for (int i = 0; i < LineSize; ++i)
{
for (int j = 0; j < ColumnSize; ++j)
{
arr[i][j] = 0;
}
}
arr[1][25] = 1;
arr[2][23] = 1;
arr[2][25] = 1;
arr[3][13] = 1;
arr[3][14] = 1;
arr[3][21] = 1;
arr[3][22] = 1;
arr[4][12] = 1;
arr[4][16] = 1;
arr[4][21] = 1;
arr[4][22] = 1;
arr[4][35] = 1;
arr[4][36] = 1;
arr[5][11] = 1;
arr[5][17] = 1;
arr[5][21] = 1;
arr[5][22] = 1;
arr[5][35] = 1;
arr[5][36] = 1;
arr[6][1] = 1;
arr[6][2] = 1;
arr[6][11] =1;
arr[6][15] = 1;
arr[6][17] = 1;
arr[6][18] = 1;
arr[6][23] = 1;
arr[6][25] = 1;
arr[7][1] = 1;
arr[7][2] = 1;
arr[7][11] = 1;
arr[7][17] = 1;
arr[7][25] = 1;
arr[8][12] = 1;
arr[8][16] = 1;
arr[9][13] = 1;
arr[9][14] = 1; } void printMap(int arr[LineSize][ColumnSize])
{
int num = 0;
for (int i = 0; i < LineSize; ++i)
{
for (int j = 0; j < ColumnSize; ++j)
{
if (arr[i][j])
{
cout << " *";
++num;
}
else
{
cout << " ";
}
}
}
cout << "当前活细胞数量为:" << num << endl;
} int getLivingNum(int arr[LineSize][ColumnSize], int x, int y)
{
int num = 0;
for (int i = x - 1; i <= x + 1; ++i)
{
if (i < 0 || i >= LineSize)
{
continue;
}
for (int j = y - 1; j <= y + 1; ++j)
{
if (j < 0 || j >= ColumnSize)
{
continue;
}
if (arr[i][j] == 1)
{
++num;
}
}
}
if (arr[x][y] == 1)
{
--num;
}
return num;
} void run(int arr[LineSize][ColumnSize])
{
int num = 0;
int maps[LineSize][ColumnSize];
for (int i = 0; i < LineSize; ++i)
{
for (int j = 0; j < ColumnSize; ++j)
{
num = getLivingNum(arr, i, j);
if (num < 2 || num > 3)
{
maps[i][j] = 0;
}
else if (num == 3)
{
maps[i][j] = 1;
}
else
{
maps[i][j] = arr[i][j];
}
}
}
for (int i = 0; i < LineSize; ++i)
{
for (int j = 0; j < ColumnSize; ++j)
{
arr[i][j] = maps[i][j];
}
}
}

按回车键进行下一次演化,控制台游戏运行起来屏幕有点闪烁。。。

用C++实现的元胞自动机的更多相关文章

  1. 简单二维元胞自动机 MATLAB实现

    20世纪50年代,乌尔姆和冯·诺依曼(对此人真是崇拜的五体投地)为了研究机器人自我复制的可能性,提出了一种叫做元胞自动机(Cellular Automaton,CA)的算法.该算法采用局相互作用规则, ...

  2. 美国康奈尔大学BioNB441元胞自动机MATLAB应用

    美国康奈尔大学BioNB441在Matlab中的元胞自动机 介绍 元胞自动机(CA)是用于计算计划利用当地的规则和本地通信.普遍CA定义一个网格,网格上的每个点代表一个有限数量的状态中的细胞.过渡规则 ...

  3. 游戏中的过程生成——元胞自动机 Celluar Automata 生成洞穴地形

    最近在学习过程生成技术,在这里写一些心得. 对于元胞自动机,我们这里只讨论输入是一副二维bool数组的情况,即大多数游戏中的情况. 一个元胞自动机,对于一个输入,给出一个同样格式的输出.输出中的每个点 ...

  4. 基于元胞自动机NaSch模型的多车道手动-自动混合驾驶仿真模型的Matlab实现

    模型的建立基本来自于:http://www.doc88.com/p-2078634086043.html 花了一天半的时间用新学会的matlab实现了一下. ───────────────────── ...

  5. 《 .NET并发编程实战》扩展阅读 - 元胞自动机 - 1 - 为什么要学元胞自动机

    先发表生成URL以印在书里面.等书籍正式出版销售后会公开内容.

  6. MATLAB元胞数组

    MATLAB元胞数组 元胞数组: 元胞数组是MATLAB的一种特殊数据类型,可以将元胞数组看做一种无所不包的通用矩阵,或者叫做广义矩阵.组成元胞数组的元素可以是任何一种数据类型的常数或者常量,每一个元 ...

  7. matlab中元胞数组(cell)转换为矩阵

    matlab中元胞数组(cell)转换为矩阵. cell转换为矩阵函数为:cell2mat(c),其中c为待转换的元胞数组: 转化之后的矩阵可能不满足我们对矩阵维数的要求,那么也许还需要下面两个函数: ...

  8. matlab笔记(1) 元胞结构cell2mat和num2cell

    摘自于:https://zhidao.baidu.com/question/1987862234171281467.html https://www.zybang.com/question/dcb09 ...

  9. 【AI】Exponential Stochastic Cellular Automata for Massively Parallel Inference - 大规模并行推理的指数随机元胞自动机

    [论文标题]Exponential Stochastic Cellular Automata for Massively Parallel Inference     (19th-ICAIS,PMLR ...

随机推荐

  1. 系统预定义委托与Lambda表达式

    NET中那些所谓的新语法之三:系统预定义委托与Lambda表达式   开篇:在上一篇中,我们了解了匿名类.匿名方法与扩展方法等所谓的新语法,这一篇我们继续征程,看看系统预定义委托(Action/Fun ...

  2. 折腾源WRT的AC路无线路由-2

    在创纪录的开箱图,开箱后,我觉得大尺寸,因此,获得一些各种尺寸,喜欢网上购物的参考.也许这,安装后,它占用的大小:基本长度=28.5cm.深度=19.5cm,高=19.5,因为制造商推荐的约两个天线是 ...

  3. 苹果公司的新的编程语言 Swift 高级语言(十五)--协议

    协议定义了适合某个特定任务或功能须要的方法.属性和其他需求的一个蓝图.协议本身不提供这些需求的实现,它仅仅是描写叙述了一个任务或功能实现的蓝图. 协议与java 语言中的接口定义类似,都是描写叙述了一 ...

  4. uml系列(四)——类图

    类图是uml的核心.学习类图,总共须要掌握三个部分:类:类之间的关系:类图怎么画. 首先,类.老规矩,先来张图. 类是什么:举个简单的样例:猫.狗.猪三个都是动物.这里面的"动物" ...

  5. Scala很难!

    Scala很难! 本文是从 Yes, Virginia, Scala is hard 这篇文章翻译而来. 首先要说的是,我是一个Scala粉丝,我作为一个Scala语言的倡导者差不多有5年历史了.我写 ...

  6. cocos2d-x3.2中将XCode发展project转移到VS2010可能会发生错误

    一些代码在线xcode写.我们希望我们自己的屌丝vs上述的实施,要重新构建它project,然后加载.但是绝对 没想到在VS里新建project再加入文件,编译后出现了好多错误.以下就把解决这些错误的 ...

  7. wcf的binding和host

    ----------------------------Binding绑定:定义:绑定表示通讯信道的配置:定义了客户端与服务端之间的协议:---传输协议:http.tcp.命名管道.msmq,自定义( ...

  8. ShopEx4.8.5.55328破解版

    ShopEx4.8.5.55328最新版完美破解版 http://club.1688.com/article/30369057.html?domainid=lhy16868 ShopEx4.8.5.5 ...

  9. JAVA 作业:图形界面

    自己动手写的一个小JAVA 程序: 一个学生管理小系统,虽然很挫,但是这我学JAVA的第一步.学了2天JAVA没有白费! import java.awt.*; import java.awt.even ...

  10. iOS基础 - UIButton - UIImageView

    封装思想:将相同的重复东西保存到方法里,不同的东西用参数代替.不相同的东西交给方法调用者,相同东西自己搞定. 一.UIButton和UIImageView的区别 1.显示图片 1> UIImag ...