描述:
在平面上的正方形格被填上黑色或白色。在其中一格正方形有一只“蚂蚁”。它的头部朝向上下左右其中一方。
若蚂蚁在黑格,右转90度,将该格改为白格,向前移一步;
若蚂蚁在白格,左转90度,将该格改为黑格,向前移一步。
实现:
显示方面依旧使用了easyX
由于不可能让蚂蚁无限走下去,人为地规定了步数20000步,当然也可以自己修改。并且人为规定它要在200*200的矩形中走并处理边界。
源代码:
#include <graphics.h>
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
#include <conio.h>
int main()
{
int orgData[200][200];//记录当前元胞空间状态
int times;//用于下面的循环控制
int GraphDriver = 480, GraphMode = 400;
int x, y, r;//r取1.2.3.4分别代表四个运动方向
int tx, ty;//tx和ty是下一步蚂蚁要走的位置
//初始化,开始时空间状态均为0(白为0,黑为1
for (int i = 0; i < 200; i++)
for (int j = 0; j < 200; j++)
orgData[i][j] = 0;
//初始化显示窗口
initgraph(GraphDriver, GraphMode);
//将所有的点都初始化为白色(不知道为什么在这里使用setbkcolor无用)
for (int i = 0; i < 200; i++)
for (int j = 0; j < 200; j++)
putpixel(i, j, WHITE);
//x,y为初始时刻蚂蚁的坐标
x = 100;
y = 100;
//初始运动方向向下
r = 3;
//设置初始位置
orgData[x][y] = 1;
putpixel(x, y, BLACK);
//这里规定步数
for (times = 1; times < 20000; times++)
{
//1代表向上,2代表向左,3代表向下,4代表向右
switch (r)
{
case 1:
tx = x;
ty = y - 1;
break;
case 2:
tx = x - 1;
ty = y;
break;
case 3:
tx = x;
ty = y + 1;
break;
case 4:
tx = x + 1;
ty = y;
break;
default:
tx = x;
ty = y;
}
//用tx和ty给x、y赋值并处理循环边界(因为可能为超出那个200*200的格子,而且不处理边界的话下面赋值可能会出问题,数组xy超出边界
if (tx >= 0)
if (tx < 200)
x = tx;
else
x = tx - 200;
else
x = tx + 200;
if (ty >= 0)
if (ty < 200)
y = ty;
else
y = ty - 200;
else
y = ty + 200;
if (orgData[x][y] == 0)//为白则涂黑左转
{
orgData[x][y] = 1;
putpixel(x, y, BLACK);
r = r % 4 + 1;
}
else//为黑则涂白右转
{
orgData[x][y] = 0;
putpixel(x, y, WHITE);
r = (r + 2) % 4 + 1;
}
}
system("pause");
}
结果截图: