Skip to content

Instantly share code, notes, and snippets.

@MX-2000
Created March 26, 2025 10:59
void c_reset(CCpr *env) {
env->tick = 0;
for (int r = 0; r < env->height; r++) {
for (int c = 0; c < env->width; c++) {
int adr = grid_index(env, r, c);
env->grid[adr] = EMPTY;
}
}
// Walls need to cover vision radius around the grid
for (int r = 0; r < env->vision; r++) {
for (int c = 0; c < env->width; c++) {
env->grid[r * env->width + c] = WALL;
}
}
for (int r = 0; r < env->height; r++) {
for (int c = 0; c < env->vision; c++) {
env->grid[r * env->width + c] = WALL;
}
}
for (int r = env->height - env->vision; r < env->height; r++) {
for (int c = 0; c < env->width; c++) {
env->grid[r * env->width + c] = WALL;
}
}
for (int r = 0; r < env->height; r++) {
for (int c = env->width - env->vision; c < env->width; c++) {
env->grid[r * env->width + c] = WALL;
}
}
// Agents
srand(time(NULL));
for (int i = 0; i < env->num_agents; i++) {
env->logs[i] = (Log){0};
Agent *agent = &env->agents[i];
agent->id = i;
int adr = 0;
bool allocated = false;
// Random allocation
while (!allocated) {
adr = rand() % (env->height * env->width);
if (env->grid[adr] == EMPTY) {
int r = adr / env->width;
int c = adr % env->width;
agent->r = r;
agent->c = c;
allocated = true;
}
}
assert(env->grid[adr] == EMPTY);
env->grid[adr] = get_agent_tile_from_id(agent->id);
}
init_foods(env);
memset(env->terminals, 0, env->num_agents * sizeof(unsigned char));
compute_observations(env);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment