40x40のライフゲームを作ったのですが
実行すると何行かに1回
[H[2J[H[2J[H[2J
のような文字列が出てきてしまい綺麗な絵柄にならないので解決方法を教えてください
#include <stdlib.h> #define MAXT 100 #define M 40 #define N 40 #define DEAD (0) #define ALIVE (1) int cell[M+2][N+2] = {DEAD}; void init() { cell[15][N / 2] = ALIVE; cell[16][N / 2] = ALIVE; cell[17][N / 2] = ALIVE; cell[18][N / 2] = ALIVE; cell[19][N / 2] = ALIVE; cell[20][N / 2] = ALIVE; cell[21][N / 2] = ALIVE; cell[22][N / 2] = ALIVE; cell[23][N / 2] = ALIVE; cell[24][N / 2] = ALIVE; } void dump() { for (int y = 0; y < M; y++) { for (int x = 0; x < N; x++) { printf(cell[y][x] == DEAD ? "." : "@"); } printf("\n"); } } void update() { int next[M][N]; for (int y = 0; y < M; y++) { for (int x = 0; x < N; x++) { int count = 0; if (y > 0 && cell[y - 1][x] == ALIVE) count++; if (y < M - 1 && cell[y + 1][x] == ALIVE) count++; if (x > 0 && cell[y][x - 1] == ALIVE) count++; if (x < N - 1 && cell[y][x + 1] == ALIVE) count++; if (y > 0 && x > 0 && cell[y - 1][x - 1] == ALIVE) count++; if (y > 0 && x < N - 1 && cell[y - 1][x + 1] == ALIVE) count++; if (y < M - 1 && x > 0 && cell[y + 1][x - 1] == ALIVE) count++; if (y < M - 1 && x < N - 1 && cell[y + 1][x + 1] == ALIVE) count++; if (cell[y][x] == DEAD) { next[y][x] = count == 3 ? ALIVE : DEAD; } else { next[y][x] = count == 2 || count == 3 ? ALIVE : DEAD; } } } for (int y = 0; y < M; y++) { for (int x = 0; x < N; x++) { cell[y][x] = next[y][x]; } } } int main() { int t; system("clear"); init(); dump(); system("sleep 0.1s"); for (t = 1;t <= MAXT;t++) { update(); system("clear"); dump(); system("sleep 0.1s"); } return 0; }
どういうプログラムなのか具体的に書いていただくなくては、何とも言えません
すいません
40x40のライフゲームと言ったら伝わるでしょうか
こちらの質問で
https://teratail.com/questions/280071
回答者に**大幅に手直し**して動くようにしてもらったプログラムですよね。そっちを解決済みにするほうが先なのでは?
申し訳ございません。このサイトを利用し始めてまだ日数が立っておらず、気分を害するような行為をしているとは思いませんでした。注意として、受け取るとともに、改善していこうと思います。
さて、表示されている文字は画面制御用のエスケープシーケンス(の一部)のように見えます。通常は画面制御に使われて画面には表示されない類の文字です。
こちらの環境では画面に表示されないので、あなたが使っているOSや端末アプリ、実行環境(仮想マシンかどうか)などを質問文に書き加える必要があります。
回答1件
あなたの回答
tips
プレビュー