From 1230a45a6581e3799b8c4a4d0310a3e61933a7c3 Mon Sep 17 00:00:00 2001 From: Joshua Simmons Date: Tue, 24 Jan 2012 23:34:37 -0700 Subject: goban plugin: hoshi locations for more board sizes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Hoshi locations were hardcoded and only for board sizes 9, 13 and 19. This new way has identical results for those board sizes, but also places hoshi on other size boards. There are no real standards for where hoshi should go on boards other than 9, 13 and 19, but I think the results obtained are aesthetically pleasing (and certainly better than not having any hoshi at all). Change-Id: I08e449f17d782d212d5b1e16ebd7df52aec9ffb9 Reviewed-on: http://gerrit.rockbox.org/68 Reviewed-by: Björn Stenberg Reviewed-by: Frank Gevaerts --- apps/plugins/goban/display.c | 67 +++++++++++++++++++++++++++----------------- 1 file changed, 41 insertions(+), 26 deletions(-) diff --git a/apps/plugins/goban/display.c b/apps/plugins/goban/display.c index 64b3adebb4..f701dbb315 100644 --- a/apps/plugins/goban/display.c +++ b/apps/plugins/goban/display.c @@ -1041,44 +1041,59 @@ draw_hoshi (unsigned short pos) static void draw_all_hoshi (void) { - if (board_width != board_height) + if (board_width != board_height || + board_width <= 2 || + board_width == 4 || + board_width == 6) { return; } - if (board_width == 19) + if (board_width == 3) { - draw_hoshi (POS (3, 3)); - draw_hoshi (POS (3, 9)); - draw_hoshi (POS (3, 15)); - - draw_hoshi (POS (9, 3)); - draw_hoshi (POS (9, 9)); - draw_hoshi (POS (9, 15)); - - draw_hoshi (POS (15, 3)); - draw_hoshi (POS (15, 9)); - draw_hoshi (POS (15, 15)); + draw_hoshi (POS (1, 1)); + return; } - else if (board_width == 9) + + if (board_width == 5) { + draw_hoshi (POS (1, 1)); + draw_hoshi (POS (1, 3)); draw_hoshi (POS (2, 2)); - draw_hoshi (POS (2, 6)); + draw_hoshi (POS (3, 1)); + draw_hoshi (POS (3, 3)); + return; + } - draw_hoshi (POS (4, 4)); + /* special case boards taken care of, handle the general case + * + * Note: board_width == board_height here (or we bailed out) so the two + * are interchangeable */ + int low_edge = (board_width < 12) ? 2 : 3; + int high_edge = board_width - low_edge - 1; + int mid = board_width / 2; - draw_hoshi (POS (6, 2)); - draw_hoshi (POS (6, 6)); - } - else if (board_width == 13) + /* corner hoshi, for big enough boards */ + if (board_width > 7) { - draw_hoshi (POS (3, 3)); - draw_hoshi (POS (3, 9)); - - draw_hoshi (POS (6, 6)); + draw_hoshi (POS (low_edge, low_edge)); + draw_hoshi (POS (low_edge, high_edge)); + draw_hoshi (POS (high_edge, low_edge)); + draw_hoshi (POS (high_edge, high_edge)); + } - draw_hoshi (POS (9, 3)); - draw_hoshi (POS (9, 9)); + /* side hoshi, for big enough boards (only makes sense on odd) */ + if (board_width > 12 && board_width % 2 == 1) + { + draw_hoshi (POS (low_edge, mid)); + draw_hoshi (POS (mid, low_edge)); + draw_hoshi (POS (high_edge, mid)); + draw_hoshi (POS (mid, high_edge)); + } + /* center hoshi */ + if (board_width % 2 == 1) + { + draw_hoshi (POS (mid, mid)); } } -- cgit v1.2.3