Example #1
0
static coord_t *
replay_genmove(struct engine *e, struct board *b, struct time_info *ti, enum stone color, bool pass_all_alive)
{
	struct replay *r = e->data;
	struct playout_setup s; memset(&s, 0, sizeof(s));

	coord_t coord = r->playout->choose(r->playout, &s, b, color);

	if (!is_pass(coord)) {
		struct move m;
		m.coord = coord; m.color = color;
		if (board_play(b, &m) >= 0)
			goto have_move;

		if (DEBUGL(2)) {
			fprintf(stderr, "Pre-picked move %d,%d is ILLEGAL:\n",
				coord_x(coord, b), coord_y(coord, b));
			board_print(b, stderr);
		}
	}

	/* Defer to uniformly random move choice. */
	board_play_random(b, color, &coord, (ppr_permit) r->playout->permit, r->playout);

have_move:
	if (!group_at(b, coord)) {
		/* This was suicide. Just pass. */
		/* XXX: We should check for non-suicide alternatives. */
		return coord_pass();
	}

	return coord_copy(coord);
}
Example #2
0
File: move.c Project: ujh/HouseBot
/* No sanity checking */
coord_t *
str2coord(char *str, int size)
{
	if (!strcasecmp(str, "pass")) {
		return coord_pass();
	} else if (!strcasecmp(str, "resign")) {
		return coord_resign();
	} else {
		char xc = tolower(str[0]);
		return coord_init(xc - 'a' - (xc > 'i') + 1, atoi(str + 1), size);
	}
}