我是一个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. OCP-1Z0-051-题目解析-第3题

    3. You need to extract details of those products in the SALES table where the PROD_ID columncontains ...

  2. 【蜗牛—漫漫IT路之大学篇(九) 】

    再来一篇叨叨的博客 近期,状态还是那个状态,人还是那个人. 前两天,感冒了,可能是宿舍阴面的事吧.然后,中午睡觉的时候穿着短袖披了一件外套,然后鼻子就不通气了.只是,前天晚上,我骑着崔国强的车子跑了不 ...

  3. Java设置环境变量

    客上转过来的. 非常多人写了非常久java代码.还不知道环境变量是怎么一回事.科普一下. 一.java设置环境变量 - 精简版   1.右键打开我的电脑->属性->高级->环境变量 ...

  4. Asp.Net MVC5入门学习

    添加一个Controller(控制器) 因为我们用的是Asp.Net MVC,MVC最终还是一套框架,所以我们还是需要遵循它才能玩下去,或者说是更好的利用来便于我们的开发,要是对MVC概念还有点模糊的 ...

  5. navigator获取参数

    <script type="text/javascript" language="javascript"> document.write(" ...

  6. 并行编程之PLINQ

    并行编程之PLINQ 并行 LINQ (PLINQ) 是 LINQ 模式的并行实现.PLINQ 的主要用途是通过在多核计算机上以并行方式执行查询委托来加快 LINQ to Objects 查询的执行速 ...

  7. C++反汇编与逆向分析技术揭秘

    C++反汇编-继承和多重继承   学无止尽,积土成山,积水成渊-<C++反汇编与逆向分析技术揭秘> 读书笔记 一.单类继承 在父类中声明为私有的成员,子类对象无法直接访问,但是在子类对象的 ...

  8. C/S应用升级更新完整解决方案

    年末福利,C/S应用升级更新完整解决方案放送 程序员,工作累寿命短,大家应该学会分享,别浪费有限的生命与健康做重复的事情. C/S方式实现的应用有个升级更新功能是必需的,以前整过一个但是没考虑多套C/ ...

  9. Solrcloud,tomcat,外部zookeeper配置

  10. FastDFS php API

    <?php if (!class_exists('FastDFS', false)) { define('FDFS_PROTO_PKG_LEN_SIZE', 8); define('FDFS_P ...