Exemplo n.º 1
0
void move(int index, char dir, struct game_state* Game, struct game_info* Info) {

	int *row = &Game->my_ants[index].row;
	int *col = &Game->my_ants[index].col;
	char *val = &Info->map[mkindex(*row, *col, Info)];

	if (*val == '0') *val = 'A';
	else *val = '.';

	fprintf(stdout, "O %i %i %c\n", *row, *col, dir);

	switch (dir) {
	case 'N':
		if (*row != 0) *row -= 1;
		else *row = Info->rows - 1;
		break;
	case 'E':
		if (*col != Info->cols - 1) *col += 1;
		else *col = 0;
		break;
	case 'S':
		if (*row != Info->rows - 1) *row += 1;
		else *row = 0;
		break;
	case 'W':
		if (*col != 0) *col -= 1;
		else *col = Info->cols - 1;
		break;
	}
	val = &Info->map[mkindex(*row, *col, Info)];

	if (*val == '0') *val = 'A';
	else *val = 'a';
}
Exemplo n.º 2
0
static inline void difuse_rules(int buff, int row, int col,
		struct game_state *G,
		struct game_info *I)
{
	int i;
	int buff_prev = (buff+1) % 2;
	int pos = MAP(mkindex(row, col, I));

	if (_last_seen[mkindex(row, col, I)] < turn)
		AGENT(buff_prev, EXPLORE, row, col)
			= INT_MAX
			- (0.001*INT_MAX)*_last_seen[mkindex(row, col, I)];

	if (pos == '%') {				/* wall */
		int agent;
		for (agent = 0; agent < NUM_AGENTS; agent++) {
			AGENT(buff_prev, agent, row, col) = 0;
		}
	} else if (pos == '*') {			/* food */
		AGENT(buff_prev, FOOD, row, col) = INT_MAX;
		for (i = 0; i < NUM_AGENTS; i++) if (i != FOOD)
			difuse_default(buff, i, row, col, I);
	} else if (pos == 'a') {		/* my ant */
		AGENT(buff_prev, ALLY, row, col) = INT_MAX;
		AGENT(buff_prev, ENEMY, row, col) = 0;
		AGENT(buff_prev, FOOD, row, col) = 0;
		AGENT(buff_prev, EXPLORE, row, col) = 0;
		difuse_default(buff, ENEMY_HILL, row, col, I);
	} else if (pos == 'A') {		/* my hill + my ant */
		AGENT(buff_prev, MY_HILL, row, col) = INT_MAX;
		AGENT(buff_prev, ALLY, row, col) = INT_MAX;
		AGENT(buff_prev, FOOD, row, col) = 0;
		AGENT(buff_prev, EXPLORE, row, col) = 0;
		difuse_default(buff, ENEMY_HILL, row, col, I);
	} else if (pos == '0') {		/* my hill */
		AGENT(buff_prev, MY_HILL, row, col) = INT_MAX;
		AGENT(buff_prev, EXPLORE, row, col) = 0;
	} else if (isdigit(pos) || isupper(pos)) {	/* enemy hill */
		AGENT(buff_prev, ENEMY_HILL, row, col) = INT_MAX;
	} else if (isalnum(pos)) {			/* enemy */
		AGENT(buff_prev, ENEMY, row, col) = INT_MAX;
		AGENT(buff_prev, ALLY, row, col) = INT_MIN;
	} else {
		for (i = 0; i < NUM_AGENTS; i++)
			difuse_default(buff, i, row, col, I);
	}
}
Exemplo n.º 3
0
static inline void dump_last_seen(struct game_info *I)
{
	int row, col;
	int buff = turn % 2;
	int buff_next = (turn+1) % 2;

	DBG("last_seen\n");

	for (row=0; row < I->rows; row++) {
		for (col=0; col < I->cols; col++) {
			char *beg = "\033[0m";
			int v = _last_seen[mkindex(row, col, I)];

			if (MAP(mkindex(row, col, I)) == '*') beg = "\033[30;42m";
			else if (MAP(mkindex(row, col, I)) == 'a') beg = "\033[30;47m";
			else if (MAP(mkindex(row, col, I)) == 'A') beg = "\033[30;47m";
			else if (MAP(mkindex(row, col, I)) == '0') beg = "\033[30;47m";
			else if (MAP(mkindex(row, col, I)) == '%') beg = "\033[44m";
			else if (isalnum(MAP(mkindex(row, col, I)))) beg = "\033[41m";
			DBG("%s%5d\033[0m", beg, 10*v);
		}
		DBG("\n");
	}
	DBG("\n");
}
Exemplo n.º 4
0
Arquivo: main.c Projeto: trieck/source
/*
 * main entry point
 */
int main(int argc, char *argv[])
{
    if (argc < 2)
        usage();

    mkindex(--argc, ++argv);

    return 0;
}
Exemplo n.º 5
0
void mark_seen(struct game_state *G, struct game_info *I)
{
	int i, ant;
	for (ant = 0; ant < G->my_count; ant++) {
		int row = ANTS(ant).row, col = ANTS(ant).col;
		for (i=1; i < circle[0]; i+=2) {
			_last_seen[mkindex(row+circle[i], col+circle[i+1], I)]
				= turn;
		}
	}
}
Exemplo n.º 6
0
static inline void dump_agent(unsigned int agent,
		struct game_info *I)
{
	int row, col;
	int buff = turn % 2;
	int buff_next = (turn+1) % 2;

	DBG("agent: %s\n", agent_string[agent]);
	if (agent >= NUM_AGENTS) return;

	for (row=0; row < I->rows; row++) {
		for (col=0; col < I->cols; col++) {
			char *beg = "\033[0m";
			int v = agent_get(buff, agent, row, col, I);

			if (MAP(mkindex(row, col, I)) == '*') beg = "\033[30;42m";
			else if (MAP(mkindex(row, col, I)) == 'a') beg = "\033[30;47m";
			else if (MAP(mkindex(row, col, I)) == 'A') beg = "\033[30;47m";
			else if (MAP(mkindex(row, col, I)) == '0') beg = "\033[30;47m";
			else if (MAP(mkindex(row, col, I)) == '%') beg = "\033[44m";
			else if (isalnum(MAP(mkindex(row, col, I)))) beg = "\033[41m";
			DBG("%s%5.2f\033[0m", beg, (double)v / INT_MAX);
		}
		DBG("\n");
	}
	DBG("\n");
}