我是一个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. Spring IOC之BeanFactory

    BeanFactory提供了SpringIOC功能的基础但是它只是直接在用在和第三方框架的整合中,而且现在对于大部分的Spring用户来讲这一句成为了过去.BeanFactory和相关的接口,例如Be ...

  2. SQLite数据库查看工具(免费)

    1. SQLite Administrator http://sqliteadmin.orbmu2k.de/ iteSpy 2.  SQLiteSpy   http://www.yunqa.de/de ...

  3. Twitter Bootstrap JavaScript插件

    Twitter Bootstrap JavaScript插件本文收集了10款非常不错的JavaScript Twitter bootstrap扩展插件,利用Boostrap开发者可以节省大量的时间修复 ...

  4. ajax的get请求

    get和post是http请求方法最主要的两种方式. get: 先实现一个简单的get请求 index.html <!DOCTYPE html> <html lang="e ...

  5. Object.prototype.propertyIsEnumerable

    语法: obj.propertyIsEnumerable(prop); 此方法返回一个布尔值,表明指定的属性名是否是当前对象可枚举的自身属性. 1.如果是用户自定义了对象的属性,将返回true,比如 ...

  6. ios中mvc的FormsAuthentication.SetAuthCookie(cookieUserName, false)失败

    如果楼主使用.net开发,要注意FormsAuthentication.SetAuthCookie 方法的使用会导致ios出现该问题.因为这个方法在ios设备上是把票据加入到url中,导致url和你的 ...

  7. SpringMVC 异常处理

    SpringMVC学习系列(10) 之 异常处理 在项目中如何处理出现的异常,在每个可能出现异常的地方都写代码捕捉异常?这显然是不合理的,当项目越来越大是也是不可维护的.那么如何保证我们处理异常的代码 ...

  8. 线程:Semaphore实现信号灯

    Semaphore是一个计数的信号量,可以维护当前访问自身的线程个数,并提供了同步机制.使用Semaphore可以控制同时访问资源的线程个数,例如实现一个文件允许的线程访问数.打个通俗的比喻,Sema ...

  9. System.Net.Http 简介

    System.Net.Http 简介 System.Net.Http 是微软推出的最新的 HTTP 应用程序的编程接口, 微软称之为“现代化的 HTTP 编程接口”, 主要提供如下内容: 1. 用户通 ...

  10. DateTime 格式化

    在格式化的时候,希望输出2013/10/01 但可能实际的输出是2013-10-01. string s1 = result.Item1.ToString("yyyy/MM/dd" ...