From aeb1137ef67c42c7dbe9d7a1d83bcfc732753b79 Mon Sep 17 00:00:00 2001 From: Petr Baudis Date: Thu, 9 Sep 2010 14:28:21 +0200 Subject: [PATCH] playout_moggy_choose(): Factor out fillboard_check() --- playout/moggy.c | 37 ++++++++++++++++++++++++++----------- 1 file changed, 26 insertions(+), 11 deletions(-) diff --git a/playout/moggy.c b/playout/moggy.c index 7d7f5a7..5beb332 100644 --- a/playout/moggy.c +++ b/playout/moggy.c @@ -681,6 +681,28 @@ local_2lib_check(struct playout_policy *p, struct board *b, struct move *m, stru } coord_t +fillboard_check(struct playout_policy *p, struct board *b) +{ + struct moggy_policy *pp = p->data; + unsigned int fbtries = b->flen / 8; + if (pp->fillboardtries < fbtries) + fbtries = pp->fillboardtries; + + for (unsigned int i = 0; i < fbtries; i++) { + coord_t coord = b->f[fast_random(b->flen)]; + if (immediate_liberty_count(b, coord) != 4) + continue; + foreach_diag_neighbor(b, coord) { + if (board_at(b, c) != S_NONE) + goto next_try; + } foreach_diag_neighbor_end; + return coord; +next_try:; + } + return pass; +} + +coord_t playout_moggy_choose(struct playout_policy *p, struct board *b, enum stone to_play) { struct moggy_policy *pp = p->data; @@ -746,17 +768,10 @@ playout_moggy_choose(struct playout_policy *p, struct board *b, enum stone to_pl } /* Fill board */ - unsigned int fbtries = b->flen / 8; - for (unsigned int i = 0; i < (fbtries < pp->fillboardtries ? fbtries : pp->fillboardtries); i++) { - coord_t coord = b->f[fast_random(b->flen)]; - if (immediate_liberty_count(b, coord) != 4) - continue; - foreach_diag_neighbor(b, coord) { - if (board_at(b, c) != S_NONE) - goto next_try; - } foreach_diag_neighbor_end; - return coord; -next_try:; + if (pp->fillboardtries > 0) { + coord_t c = fillboard_check(p, b); + if (!is_pass(c)) + return c; } return pass; -- 2.11.4.GIT