X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?a=blobdiff_plain;f=galaxies.c;h=f4f75c629c7889b506b48c7c36f087e939003a37;hb=a0a581c8b5422bf0c5ed3fde6aa25811e4eb89fc;hp=f2762656aac99a99f4a24ef539aa126a7cf2f619;hpb=bef1b2c59b443a2778a01e6c167e29ee9670603a;p=sgt-puzzles.git diff --git a/galaxies.c b/galaxies.c index f276265..f4f75c6 100644 --- a/galaxies.c +++ b/galaxies.c @@ -373,7 +373,9 @@ static void add_assoc_with_opposite(game_state *state, space *tile, space *dot) } sfree(colors); + remove_assoc_with_opposite(state, tile); add_assoc(state, tile, dot); + remove_assoc_with_opposite(state, opposite); add_assoc(state, opposite, dot); } @@ -1299,6 +1301,8 @@ generate: game_update_dots(state); + if (state->ndots == 1) goto generate; + #ifdef DEBUGGING { char *tmp = encode_game(state); @@ -2589,7 +2593,7 @@ static char *interpret_move(const game_state *state, game_ui *ui, if (INUI(state, px, py)) { sp = &SPACE(state, px, py); - if (!(sp->flags & F_DOT) && !(sp->flags & F_TILE_ASSOC)) + if (!(sp->flags & F_DOT)) sprintf(buf + strlen(buf), "%sA%d,%d,%d,%d", sep, px, py, ui->dotx, ui->doty); } @@ -3263,7 +3267,7 @@ static void game_redraw(drawing *dr, game_drawstate *ds, for (x = 0; x < w; x++) { unsigned long flags = 0; int ddx = 0, ddy = 0; - space *sp; + space *sp, *opp; int dx, dy; /* @@ -3301,6 +3305,11 @@ static void game_redraw(drawing *dr, game_drawstate *ds, * everything goes briefly back to background colour. */ sp = &SPACE(state, x*2+1, y*2+1); + if (sp->flags & F_TILE_ASSOC) { + opp = tile_opposite(state, sp); + } else { + opp = NULL; + } if (ds->colour_scratch[y*w+x] && !flashing) { flags |= (ds->colour_scratch[y*w+x] == 2 ? DRAW_BLACK : DRAW_WHITE); @@ -3316,7 +3325,9 @@ static void game_redraw(drawing *dr, game_drawstate *ds, */ if ((sp->flags & F_TILE_ASSOC) && !ds->colour_scratch[y*w+x]) { if (ui->dragging && ui->srcx == x*2+1 && ui->srcy == y*2+1) { - /* don't do it */ + /* tile is the source, don't do it */ + } else if (ui->dragging && opp && ui->srcx == opp->x && ui->srcy == opp->y) { + /* opposite tile is the source, don't do it */ } else if (sp->doty != y*2+1 || sp->dotx != x*2+1) { flags |= DRAW_ARROW; ddy = sp->doty - (y*2+1); @@ -3622,7 +3633,7 @@ static void game_print(drawing *dr, const game_state *state, int sz) const struct game thegame = { "Galaxies", "games.galaxies", "galaxies", default_params, - game_fetch_preset, + game_fetch_preset, NULL, decode_params, encode_params, free_params,