Langton蚂蚁参考书目《元胞自动机理论研究及其仿真应用》科学出版社
演化规则
1)若蚂蚁处于黑格,则左转90度,将格子涂白
2)若蚂蚁处于白格,则右转90度,将格子涂黑
#include "stdafx.h"
#include <windows.h> #include<graphics.h> #include<stdlib.h> #include<time.h> #include<stdio.h> int main() { int orgData[100][100]; int i, j, times; int GraphDriver = DETECT, GraphMode; int x, y, r; int tx, ty; for (i = 0; i < 100; i++) for (j = 0; j < 100; j++) orgData[i][j] = 0; initgraph(&GraphDriver, &GraphMode, "");//显示初始化 setcolor(WHITE); rectangle(270, 190, 370, 290); x = 50; y = 50;//蚂蚁初始位置 r = 1;//初始运动方向 orgData[x][y] = 1; putpixel(x + 270, y + 190, WHITE); for (times = 1; times < 20000; times++) { Sleep(2); switch (r) { //1表示向上 case(1):tx = x; ty = y - 1; break; //2表示向左 case(2):tx = x - 1; ty = y; break; //3表示向下 case(3):tx = x; ty = y + 1; break; //4表示向右 case(4):tx = x + 1; ty = y; break; default:tx = x; ty = y; } //循环边界处理 if (tx >= 0) if (tx < 100) x = tx; else x = tx - 100; else x = tx + 100; if (ty >= 0) if (ty < 100) y = ty; else y = ty - 100; else y = ty + 100; //处于白格左转涂黑 if (orgData[x][y] == 0) { orgData[x][y] = 1; putpixel(x + 270, y + 190, BLACK); r = r % 4 + 1; } //处于黑格右转图白 else { orgData[x][y] = 0; putpixel(x + 270, y + 190, WHITE); r = (r + 2) % 4 + 1; } } return 0; }
注:代码摘自参考书目
笔者为方便观察,加入了Sleep函数
#include "stdafx.h"
#include <windows.h> #include<graphics.h> #include<stdlib.h> #include<time.h> #include<stdio.h> int main() { int orgData[100][100]; int i, j, times; int GraphDriver = DETECT, GraphMode; int x, y, r; int tx, ty; for (i = 0; i < 100; i++) for (j = 0; j < 100; j++) orgData[i][j] = 0; initgraph(&GraphDriver, &GraphMode, "");//显示初始化 setcolor(WHITE); rectangle(270, 190, 370, 290); x = 50; y = 50;//蚂蚁初始位置 r = 1;//初始运动方向 orgData[x][y] = 1; putpixel(x + 270, y + 190, WHITE); for (times = 1; times < 20000; times++) { Sleep(2); switch (r) { //1表示向上 case(1):tx = x; ty = y - 1; break; //2表示向左 case(2):tx = x - 1; ty = y; break; //3表示向下 case(3):tx = x; ty = y + 1; break; //4表示向右 case(4):tx = x + 1; ty = y; break; default:tx = x; ty = y; } //循环边界处理 if (tx >= 0) if (tx < 100) x = tx; else x = tx - 100; else x = tx + 100; if (ty >= 0) if (ty < 100) y = ty; else y = ty - 100; else y = ty + 100; //处于白格左转涂黑 if (orgData[x][y] == 0) { orgData[x][y] = 1; putpixel(x + 270, y + 190, BLACK); r = r % 4 + 1; } //处于黑格右转图白 else { orgData[x][y] = 0; putpixel(x + 270, y + 190, WHITE); r = (r + 2) % 4 + 1; } } return 0; }
注:代码摘自参考书目
笔者为方便观察,加入了Sleep函数
Langton蚂蚁——简单的元胞自动机(2)
最新推荐文章于 2024-02-28 04:00:00 发布