Ejemplo n.º 1
0
Archivo: grid.c Proyecto: progschj/TLDR
static int grid_clone_lua(lua_State *L) {
    check_userdata_type(L, 1, "grid");
    grid *g0 = lua_touserdata(L, 1);
    grid *g = lua_newuserdata(L, sizeof(grid));
    *g = grid_clone(g0);
    grid_create_metatable_lua(L);
    return 1;
}
Ejemplo n.º 2
0
Archivo: grid.c Proyecto: progschj/TLDR
void grid_dilate(grid *g1) {
    grid tmp = grid_clone(g1);
    int x0 = g1->x0;
    int y0 = g1->y0;
    int x1 = g1->x0 + g1->width;
    int y1 = g1->y0 + g1->height;
    for(int x = x0;x<x1;++x) {
        for(int y = y0;y<y1;++y) {
            double value = 0.0;
            for(int xoffset = -1;xoffset<=1;++xoffset) {
                for(int yoffset = -1;yoffset<=1;++yoffset) {
                    int xn = x + xoffset;
                    int yn = y + yoffset;
                    if(grid_contains(&tmp, xn, yn) && grid_get(&tmp, xn, yn) != 0)
                        value = 1.0;
                }
            }
            grid_set(g1, x, y, value);
        }
    }
    grid_destroy(tmp);
}
Ejemplo n.º 3
0
void golutil_cycle(Grid *grid) {
    Grid *prev = grid_clone(grid);
    for (int i = 0; i < grid->rows; ++i) {
        for (int j = 0; j < grid->cols; j++) {
            int neighbours = 0;
            neighbours += grid_get_at(prev, i-1, j-1);
            neighbours += grid_get_at(prev, i, j-1);
            neighbours += grid_get_at(prev, i+1, j-1);
            neighbours += grid_get_at(prev, i-1, j);
            neighbours += grid_get_at(prev, i+1, j);
            neighbours += grid_get_at(prev, i-1, j+1);
            neighbours += grid_get_at(prev, i, j+1);
            neighbours += grid_get_at(prev, i+1, j+1);
            if (grid_get_at(prev, i, j) &&
                    (neighbours < 2 || neighbours > 3)) {
                grid_set_at(grid, i, j, 0);
            } else if (!grid_get_at(prev, i, j) && neighbours == 3) {
                grid_set_at(grid, i, j, 1);
            }
        }
    }

    grid_delete(prev);
}