参考书目《元胞自动机理论研究及其仿真应用》科学出版社
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函数
|