ラングトンのアリの描画
Posted feedbacks - C
コマンドライン上で描写するので、フィールドが狭いですがギリギリ列の生成は確認できました。列が生成されるまで時間がかかったので100回の移動ごとに描写していますが、この辺は適宜変更してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | #include<stdio.h>
#include<stdlib.h>
#define XMAX 75 //フィールドの横幅
#define YMAX 75 //フィールドの縦幅
#define CNTSPACE 100 //描写間隔
char field[XMAX][YMAX];
enum Direction {up, right, down, left};
int main(void)
{
enum Direction dir;
int x, y, i, j, cnt = 0;
for(i = 0; i < XMAX; i++) //0が白、1が黒なので全て白に初期化
{
for(j = 0; j < YMAX; j++)
{
field[i][j] = 0;
}
}
x = XMAX / 2; //フィールド中央からスタート
y = YMAX / 2;
dir = up; //進行方向は上からスタート
while((x >= 0) && (y >= 0) && (x < XMAX) && (y < YMAX))
{
cnt++;
if(field[x][y])
{
field[x][y] = 0;
if(dir == left) dir = up;
else dir++;
}
else
{
field[x][y] = 1;
if(dir == up) dir = left;
else dir--;
}
switch(dir)
{
case up: y++; break;
case down: y--; break;
case right: x++; break;
case left: x--; break;
}
if(cnt == CNTSPACE)
{
system("cls");
for(i = 0; i < XMAX; i++)
{
for(j = 0; j < YMAX; j++)
{
field[i][j] ? putchar('@') : putchar('_');
}
putchar('\n');
}
cnt = 0;
}
}
return 0;
}
|


Songmu #9331() [ JavaScript ] Rating8/10=0.80
- 黒いマスにアリがいた場合、90°右に方向転換し、そのマスの色を反転させ、1マス前進する。
- 白いマスにアリがいた場合、90°左に方向転換し、そのマスの色を反転させ、1マス前進する。
詳しくはWikipedia等で調べるか、参考ページに拙作のデモがありますのでご覧下さい。
see: JavaScriptでラングトンの蟻
Rating8/10=0.80-0+
[ reply ]