-2
只是覺得我會在康威的生命遊戲中破解一番,但是我正在嚴重掙扎......這是一個驚喜!有人可能暗示算法問題?只是一個小小的推動?這不是功課。C中的生命遊戲
#include <stdio.h>
#include <stdlib.h>
#define HEIGHT 10
#define WIDTH 10
int *gb[HEIGHT];
int *gb2[HEIGHT];
void copy() {
int i, j;
for (i = j = 0; i < HEIGHT; i++) {
for (; j < WIDTH; j++) {
gb2[i][j] = gb[i][j];
}
}
}
void init() {
int i, j;
for (i = 0; i < HEIGHT; i++) {
gb [i] = malloc(sizeof(int)*WIDTH);
gb2[i] = malloc(sizeof(int)*WIDTH);
}
for (i = j = 0; i < HEIGHT; i++) {
for (; j < WIDTH; j++) {
gb [i][j] = 0;
}
}
gb[0][0] = 1;
gb[0][1] = 1;
gb[1][0] = 1;
gb[1][1] = 1;
copy();
}
void printg() {
int i, j;
printf(" ");
for (i = 0; i < WIDTH; i++) {
printf("%2d ", i);
}
printf("\n\n");
for (i = 0; i < HEIGHT; i++) {
printf("%d ", i);
for (j = 0; j < WIDTH; j++) {
printf(" %c ", gb2[i][j]?'+':'-');
}
printf("\n");
}
}
void ckill(int i, int j) {
gb2[i][j] = 0;
}
void clive(int i, int j) {
gb2[i][j] = 1;
}
void newgen() {
int i, j = i = 1, n = 0;
for (; i < HEIGHT-1; i++) {
for (j = 0; j < WIDTH-1; j++) {
if (gb[i][j+1]) n++;
if (gb[i+1][j]) n++;
if (gb[i+1][j+1]) n++;
if (gb[i-1][j-1]) n++;
if (gb[i][j-1]) n++;
if (gb[i-1][j]) n++;
if (gb[i+1][j-1]) n++;
if (gb[i-1][j+1]) n++;
if (n < 2) ckill(i, j);
else if ((n == 2 || n == 3) && gb[i][j]) clive(i, j);
else if (n > 3) ckill(i, j);
else if (n == 3 && gb[i][j] == 0) clive(i, j);
}
}
}
int main() {
int i;
init();
newgen();
printg();
for (i = 0; i < HEIGHT; i++) {
free(gb[i]);
}
}
這需要沒有輸入,但在(0,0),(0,1)與活細胞開始了,(1,0),(1,1)。一代後,它應該保持不變,但相反殺死細胞,所以只有(0,0)和(1,0)是活的。
有什麼具體的,你想我們看看?否則,這可能會因爲不是真正的問題而關閉。在codereview上可能會更好。 – Marlon
你遇到什麼問題?你的意見是什麼?你的預期產出是多少?你的實際產出是多少? –
考慮到你的代表,我以爲你會意識到,解釋什麼是不工作是必要的。 –