当前位置: 首页 > news >正文

c语言万花筒,C/C++——元胞自动机万花筒

程序功能

实现一个简单的元胞自动机,可以自定义初始状态、运行规则。以此基础实现一个能自动绘制大量万花筒图像的程序。

注:为了防止二维数组输出时画面闪烁,采取双屏幕缓冲区轮流显示。将缓冲区写好后一次性输出可以防止数组循环输出方式会导致的画面闪烁。

效果

生命游戏中的“滑翔机(gliders)”:

30a29eff8b340281095ebb7ab7edefb1.png万花筒:

?i=20190419151426272.gif

代码

#include

#include

#include

#include

#include

#include

#include

#define BLACK 0

#define WHITE 15

#define GREEN 10

#define YELLOW 14

#define RED 12

#define BLUE 9

#define CYAN 11

#define PURPLE 13

#define INCI(x) (((x)+1)%(COL))

#define DECI(x) (((x)+COL-1)%(COL))

#define INCJ(x) (((x)+1)%(RAW))

#define DECJ(x) (((x)+RAW-1)%(RAW))

#define MODE "mode 82,42"

#define COL 41

#define RAW 41

using namespace std;

int ct=0;

HANDLE hOutput, hOutBuf;//控制台屏幕缓冲区句柄

COORD coord={0,0};

WORD att;

DWORD bytes=0;

char data[COL][RAW];

int clr[8]={BLACK,WHITE,GREEN,YELLOW,RED,BLUE,CYAN,PURPLE};

int a[COL][RAW]={0},b[COL][RAW]={0};

unsigned int counts=0;

char str[11];

void f0()

{

int i,j,k;

memset(b,0,sizeof(b));

for(i=0;i

for(j=0;j

{

k=a[i][j];

b[(i+rand()%3-1)%COL][(j+rand()%3-1)%RAW]+=k;

b[(i+rand()%3-1)%COL][(j+rand()%3-1)%RAW]+=k;

}

for(i=0;i

for(j=0;j

{

a[i][j]=b[i][j]%8;

}

}

void f1()

{

int i,j,k;

memset(b,0,sizeof(b));

for(i=0;i

for(j=0;j

{

k=a[i][j];

//b[i][j]+=k;

b[DECI(i)][j]+=k;

b[INCI(i)][j]+=k;

b[i][DECJ(j)]+=k;

b[i][INCJ(j)]+=k;

}

for(i=0;i

for(j=0;j

{

a[i][j]=b[i][j]%8;

}

}

void f2p()

{

a[1][5]=1;

a[2][5]=1;

a[1][6]=1;

a[2][6]=1;

a[11][5]=1;

a[11][6]=1;

a[11][7]=1;

a[12][4]=1;

a[12][8]=1;

a[13][3]=1;

a[13][9]=1;

a[14][3]=1;

a[14][9]=1;

a[15][6]=1;

a[16][4]=1;

a[16][8]=1;

a[17][5]=1;

a[17][6]=1;

a[17][7]=1;

a[18][6]=1;

a[21][3]=1;

a[21][4]=1;

a[21][5]=1;

a[22][3]=1;

a[22][4]=1;

a[22][5]=1;

a[23][2]=1;

a[23][6]=1;

a[25][1]=1;

a[25][2]=1;

a[25][6]=1;

a[25][7]=1;

a[35][3]=1;

a[35][4]=1;

a[36][3]=1;

a[36][4]=1;

}

void f2()

{

int i,j,k;

memset(b,0,sizeof(b));

for(i=0;i

for(j=0;j

{

k=0;

if(a[DECI(i)][j])k++;

if(a[INCI(i)][j])k++;

if(a[i][DECJ(j)])k++;

if(a[i][INCJ(j)])k++;

if(a[DECI(i)][DECJ(j)])k++;

if(a[DECI(i)][INCJ(j)])k++;

if(a[INCI(i)][DECJ(j)])k++;

if(a[INCI(i)][INCJ(j)])k++;

if(k==3)b[i][j]=1;

else if(k==2)b[i][j]=a[i][j];

else b[i][j]=0;

}

for(i=0;i

for(j=0;j

{

a[i][j]=b[i][j];

}

}

void show()

{

int i,j;

for(i=0;i

{

for(j=0;j

{

coord.X=2*i;

coord.Y=j;

att=clr[a[i][j]];

if(a[i][j])

{

WriteConsoleOutputCharacterA(hOutBuf,"■",2,coord,&bytes);

}

else WriteConsoleOutputCharacterA(hOutBuf," ",2,coord,&bytes);

WriteConsoleOutputAttribute(hOutBuf,&att,1,coord,&bytes);

coord.X++;

WriteConsoleOutputAttribute(hOutBuf,&att,1,coord,&bytes);

}

}

itoa(counts,str,10);

coord.X=0;coord.Y=41;

WriteConsoleOutputCharacterA(hOutBuf,str,sizeof(str),coord,&bytes);

att=WHITE;

WriteConsoleOutputAttribute(hOutBuf,&att,1,coord,&bytes);

SetConsoleActiveScreenBuffer(hOutBuf);

f1();

//Sleep(50);

getch();counts++;

for(i=0;i

{

for(j=0;j

{

coord.X=2*i;

coord.Y=j;

att=clr[a[i][j]];

if(a[i][j])

{

WriteConsoleOutputCharacterA(hOutput,"■",2,coord,&bytes);

}

else WriteConsoleOutputCharacterA(hOutput," ",2,coord,&bytes);

WriteConsoleOutputAttribute(hOutput,&att,1,coord,&bytes);

coord.X++;

WriteConsoleOutputAttribute(hOutput,&att,1,coord,&bytes);

}

}

itoa(counts,str,10);

coord.X=0;coord.Y=41;

WriteConsoleOutputCharacterA(hOutput,str,sizeof(str),coord,&bytes);

att=WHITE;

WriteConsoleOutputAttribute(hOutput,&att,1,coord,&bytes);

SetConsoleActiveScreenBuffer(hOutput);

f1();

//Sleep(50);

getch();counts++;

}

int main()

{

srand(time(NULL));

system(MODE);

hOutBuf = CreateConsoleScreenBuffer(

GENERIC_WRITE,

FILE_SHARE_WRITE,

NULL,

CONSOLE_TEXTMODE_BUFFER,

NULL

);

hOutput = CreateConsoleScreenBuffer(

GENERIC_WRITE,

FILE_SHARE_WRITE,

NULL,

CONSOLE_TEXTMODE_BUFFER,

NULL

);

CONSOLE_CURSOR_INFO cci;

cci.bVisible = 0;

cci.dwSize = 1;

SetConsoleCursorInfo(hOutput, &cci);

SetConsoleCursorInfo(hOutBuf, &cci);

a[COL/2][RAW/2]=1;

//a[rand()%COL][rand()%RAW]=1;

//f2p();

while(1)show();

}

图片

一些比较好看的:

?i=20190419152830201.jpg?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0V5aXpvaGE=,size_16,color_FFFFFF,t_70

标签:int,C++,COL,RAW,元胞,include,万花筒,define

来源: https://blog.csdn.net/Eyizoha/article/details/89401253

相关文章:

  • C语言 9宫格 和为15,如何将1~9填入九宫格,使其横竖斜都等于15?
  • c语言的实验报告实验原理,c语言实验报告
  • c语言中二维数组循环,C语言循环语句在二维数组中的应用
  • c语言线性链表检验是否为空,线性链表的实现(c语言)
  • c 语言计算自信息量,基于知网义原信息量的词语相似度的计算方法
  • android 动画懒加载,Android - 懒加载
  • android怎样拼接带参数的url,这种url网址如何拼接成android 的Retrofit注解
  • android:style/theme.holo.light,Galaxy Nexus上的Android Theme.Holo.Light在模拟器没有的时候有灰色背景...
  • 华为Android10版怎么截屏,华为Mate10怎么截屏?华为Mate10两种截图方法
  • solar2 android,Solar2(太阳系行星2)
  • 同一个页面显示多个html界面,浏览器怎么设置在同一个界面/窗口打开多个网页...
  • html中判断电话是否正确,jsjquery验证邮箱和手机号是否正确范例
  • 2021年高考成绩还能查询吗,【去年高考成绩还能查吗】_怎么查询以前的高考成绩往年高考成绩能查吗...
  • 电脑播放html5绿屏,我的电脑在看暴风影音时总是绿屏 是为什么啊?有什么解决良策啊?...
  • 使用计算机 发展了人的运算能力,计算机的发展
  • Git同步原始仓库到Fork仓库中
  • hadoop集群管理系统搭建规划说明
  • HashMap剖析之内部结构
  • interface和setter,getter
  • iOS 系统授权开发
  • js对象的深浅拷贝
  • Js基础知识(四) - js运行原理与机制
  • leetcode-27. Remove Element
  • Python进阶细节
  • STAR法则
  • webgl (原生)基础入门指南【一】
  • 当SetTimeout遇到了字符串
  • 基于HAProxy的高性能缓存服务器nuster
  • 免费小说阅读小程序
  • 前端临床手札——文件上传
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • 用mpvue开发微信小程序
  • 用Python写一份独特的元宵节祝福
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • 组复制官方翻译九、Group Replication Technical Details
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • $.ajax中的eval及dataType
  • (分布式缓存)Redis分片集群
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (篇九)MySQL常用内置函数
  • (四) 虚拟摄像头vivi体验
  • (四)Controller接口控制器详解(三)
  • (转)Linux整合apache和tomcat构建Web服务器
  • (转)菜鸟学数据库(三)——存储过程
  • **PyTorch月学习计划 - 第一周;第6-7天: 自动梯度(Autograd)**
  • .NET 3.0 Framework已经被添加到WindowUpdate
  • .NET DataGridView数据绑定说明
  • .Net接口调试与案例
  • .net经典笔试题
  • .NET使用HttpClient以multipart/form-data形式post上传文件及其相关参数
  • /etc/fstab和/etc/mtab的区别