/* Game of life attempt... */ /* Could do a lot better with the algorithms I guess.. */ /* Will implement a GUI when I feel like it. Perhaps tomorrow */ #include #include #include #define FIELDH 40 /* FIELDH columns */ #define FIELDV 100 /* FIELDV rows */ #define TRUE 1 #define FALSE 0 typedef unsigned char UCHAR; static UCHAR field[FIELDH][FIELDV]; static UCHAR temp_field[FIELDH][FIELDV]; void print_neighbourhood(UCHAR neighbourhood[]); void print_field(); int is_life(UCHAR neighbourhood[]); int main() { int i, j; UCHAR neighbourhood[9]; memset(&field, 0, FIELDH*FIELDV); memset(&temp_field, 0, FIELDH*FIELDV); /* First we randomize the field */ srand(time(NULL)); for(i=0;i < FIELDH;i++) { for(j=0;j < FIELDV;j++) { field[i][j] = ( rand() % 2); } } print_field(); while(1) { for(i=0;i < FIELDH;i++) { for(j=0;j < FIELDV; j++) { /* Make a neighboorhood */ if((i-1) < 0 || j-1 < 0) { neighbourhood[0] = 0; } else { neighbourhood[0] = field[i-1][j-1]; } if((i-1) < 0) { neighbourhood[1] = 0; } else { neighbourhood[1] = field[i-1][j]; } if((i-1) < 0 || (j+1) >= FIELDV) { neighbourhood[2] = 0; } else { neighbourhood[2] = field[i-1][j+1]; } if((j-1) < 0 || (j-1) >= FIELDV) { neighbourhood[3] = 0; } else { neighbourhood[3] = field[i][j-1]; } neighbourhood[4] = field[i][j]; if((j+1) >= FIELDV) { neighbourhood[5] = 0; } else { neighbourhood[5] = field[i][j+1]; } if((i+1) >= FIELDH || (j-1) < 0) { neighbourhood[6] = 0; } else { neighbourhood[6] = field[i+1][j-1]; } if((i+1) >= FIELDH) { neighbourhood[7] = 0; } else { neighbourhood[7] = field[i+1][j]; } if((i+1) >= FIELDH || (j+1) >= FIELDV) { neighbourhood[8] = 0; } else { neighbourhood[8] = field[i+1][j+1]; } /*print_neighbourhood(neighbourhood);*/ if(is_life(neighbourhood)) { temp_field[i][j] = 1; } else { temp_field[i][j] = 0; } } } memcpy(&field, &temp_field, FIELDH*FIELDV); print_field(); sleep(1); } return 0; } void print_neighbourhood(UCHAR neighbourhood[]) { int i,j,k=0; for(i=0;i<3;i++) { for(j=0;j<3;j++) { if(neighbourhood[k++]) { printf("*"); } else { printf("-"); } } printf("\n"); } printf("\n"); } void print_field() { int i, j; for(i=0;i= 5) { return FALSE; } return TRUE; } if(c == 3) { return TRUE; } return FALSE; }