简单生命游戏

运用easyx实现
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<time.h>
#include<graphics.h>
#define c_height 400//屏幕大小
#define c_width 400
struct cell {
    bool live_state;
    int stability;
};
cell map[22][22] = { 0 };//细胞存活
void init() {
    setfillcolor(BLUE);
    for (int i = 1; i < 21; i++) {
        for (int j = 1; j < 21; j++) {
            map[i][j].live_state = rand() % 2;//随机赋予细胞存活状态
            map[i][j].stability = 0;
        }
    }
}
void draw() {
    for (int i=1; i < 21; i++) {
        for (int j = 1; j < 21; j++) {
            if (map[i][j].live_state == true)solidrectangle(20 * (i-1), 20 * (j-1), 20 * i, 20 * j);//画出活着的细胞
            else clearrectangle(20 * (i - 1), 20 * (j - 1), 20 * i, 20 * j);
        }
    }
}
void rule() {
    cell map_temp[22][22] = { 0 };//临时记录
    for (int i = 1; i < 21; i++) {
        for (int j = 1; j < 21; j++) {
            int live = 0;
            for (int x = i - 1; x <= i + 1; x++) {
                for (int y = j - 1; y <= j + 1; y++) {
                    if (map[x][y].live_state == true)live++;
                }
            }
            if (map[i][j].live_state == true) {
                if (live < 3 || live>4)  map_temp[i][j].live_state = 0,map[i][j].stability++;
                else map_temp[i][j].live_state = 1, map[i][j].stability++;
            }
            else {
                if (live == 3) map_temp[i][j].live_state = 1, map[i][j].stability++;
            }
        }
    }
    for (int i = 0; i < 22; i++) {
        for (int j = 0; j < 22; j++) {
            map[i][j].live_state = map_temp[i][j].live_state;
        }
    }
}
void monitor(){
    for (int i = 1; i < 21;i++) {
        for (int j = 1; j < 21; j++) {
            printf("%d  ", map[i][j].stability);
        }
        printf("\\n");
    }
    printf("-------------------------------------------------------------------------------------------------------------\\n");
}
int main()
{
    srand((unsigned)time(0));
    initgraph(c_height, c_width, 1);
    init();
    while (1) {
        draw();
        rule();
        if (GetAsyncKeyState(68) & 0x8000)system("pause");//d暂停
        if (GetAsyncKeyState(27) & 0x8000)closegraph(), exit(0);//esc退出
        monitor();
        Sleep(50);
    }
}