Example #1
0
static boolean
history_forward (hex_t hex)
{
  unsigned int current = hex->history_current;
  int i, j;
  if (hex->history_current == hex->history_size)
    return FALSE;
  i = hex->history[current][0];
  j = hex->history[current][1];
  hex->end_of_game_p = hex->history[current][2];
  CELL (hex,i,j).player = hex->player;
  SWITCH_PLAYER (hex);
  hex->history_current++;
  return TRUE;
}
Example #2
0
static boolean
history_backward (hex_t hex)
{
  unsigned int current;
  int i, j;
  if (hex->history_current == 0)
    return FALSE;
  hex->history_current--;
  current = hex->history_current;
  i = hex->history[current][0];
  j = hex->history[current][1];
  hex->end_of_game_p = 0;
  CELL(hex,i,j).player = 0;
  SWITCH_PLAYER (hex);
  return TRUE;
}
Example #3
0
hex_status_t
hex_move (hex_t hex, uint i, uint j)
{
  hex_status_t status;
  unsigned int current;
  status = hex_move_1 (hex, hex->player, i, j);
  if (status == HEX_SUCCESS)
    {
      SWITCH_PLAYER (hex);
      /* Truncate the 'future' history */
      if (hex->history_current < hex->history_size)
        recompute_setting (hex);
      current = hex->history_current;
      hex->history[current][0] = i;
      hex->history[current][1] = j;
      hex->history[current][2] = hex->end_of_game_p;
      hex->history_current++;
      hex_truncate_history (hex);
    }
  return status;
}
Example #4
0
int ai_play(ai* self, int col, int row) {

    int i,
        move_id = -1,
        moves_len = self->moves_len;
    future_move *move;

    for (i=0; i<moves_len; i++) {
        move = (self->moves)[i];

        if ((move->col == col) && (move->row == row)) {
            move_id = i;
            break;
        }
    }
    if (move_id < 0) {
        return CANNOT_PLAY_HERE;
    }

    /* delete all others possible moves */
    for (i=0; i<moves_len; i++) {
        if (move_id != i) {
            free_future_move((self->moves)[i]);
        }
    }

    /* put this move's future moves into current position */
    self->moves = move->moves;
    self->moves_len = move->moves_len;

    /* delete this move */
    move->moves = NULL;
    free_future_move(move);

    put_piece_by_colrow(self->b, col, row, self->current_player_c);
    SWITCH_PLAYER(self->current_player_c);

    return 0;
}