Exemple #1
0
void Session::playHand(SessionLog& log) {
  _init_hand();
  HandState hand_state(_betting_rules->getStackSize(), _button);
  log.recordHandStart(*this, hand_state);
  _main_loop(log, hand_state);
  _finish_hand(log, hand_state);
}
Exemple #2
0
static void move_donkeys()
{
  DONKEY *donkey;
  int new_flags;
  int flags;
  int x, y;

  /* see the `hand' */

  get_hand();
  if (hand_state() == HAND_FULL) {
    kill_hand();
    get_hand();
    /* speed up */
    move_freq -= get_level()->donkey.move_freq_countdown;
    if (move_freq < get_level()->donkey.move_freq_min)
      move_freq = get_level()->donkey.move_freq_min;
  }

  /* move the donkeys... */

  /* EXIT */
  /* go to first `exit' */
  if (!get_first_hand_pos(&x, &y)) {
    for(ever) {
      /* get the donkey in the block */
      donkey = get_block_donkey(x, y);
      /* ok? */
      if (donkey) {
        flags = get_block_flags2(donkey->x, donkey->y);

        donkey->xold = donkey->x;
        donkey->yold = donkey->y;

        move_donkey_position(donkey, flags);

        /* the flags of the block to come */
        new_flags = get_block_flags2(donkey->x, donkey->y);

        /* next position not is a `exit' block */
        if (!(new_flags & BLOCK_FLAG_EXIT)) {
          if (hand_state() != HAND_BAD) {
            /* return to old position */
            donkey->x = donkey->xold;
            donkey->y = donkey->yold;
          }
        }
        else {
          if ((get_block_donkey2(donkey->x, donkey->y)) &&
              (get_block_donkey2(donkey->x, donkey->y) != donkey)) {
            if (hand_state() != HAND_BAD) {
              /* return to old position */
              donkey->x = donkey->xold;
              donkey->y = donkey->yold;
            }
          }
        }

        /* restore `donkey' pointers in the block */
        if (get_block_donkey2(donkey->xold, donkey->yold) == donkey)
          set_block_donkey2(donkey->xold, donkey->yold, NULL);

        set_block_donkey2(donkey->x, donkey->y, donkey);
        donkey->moved = TRUE;
        donkey->flip = (donkey->xold == donkey->x)? donkey->flip:
                       (donkey->xold >  donkey->x)? TRUE: FALSE;
      }

      /* go to next `exit' */
      if (get_next_hand_pos(&x, &y))
        break;
    }
  }

  /* OTHERS */
  for (donkey=donkey_list; donkey; donkey=donkey->next) {
    if (donkey->moved)
      continue;

    flags = get_block_flags2(donkey->x, donkey->y);

    if (flags & BLOCK_FLAG_STOP)
      continue;

    donkey->xold = donkey->x;
    donkey->yold = donkey->y;

    move_donkey_position(donkey, flags);

    /* restore `donkey' pointers in the block */
    if (get_block_donkey2(donkey->xold, donkey->yold) == donkey)
      set_block_donkey2(donkey->xold, donkey->yold, NULL);

    set_block_donkey2(donkey->x, donkey->y, donkey);
    donkey->moved = TRUE;
    donkey->flip = (donkey->xold == donkey->x)? donkey->flip:
                   (donkey->xold >  donkey->x)? TRUE: FALSE;
  }

  /* STOP */
  for (donkey=donkey_list; donkey; donkey=donkey->next) {
    if (donkey->moved) {
      donkey->moved = FALSE;
      continue;
    }

    flags = get_block_flags2(donkey->x, donkey->y);

    donkey->xold = donkey->x;
    donkey->yold = donkey->y;

    move_donkey_position(donkey, flags);

    /* is new position occupied? */
    if ((get_block_donkey2(donkey->x, donkey->y)) &&
        (get_block_donkey2(donkey->x, donkey->y) != donkey)) {
      /* if yes... return to old position */
      donkey->x = donkey->xold;
      donkey->y = donkey->yold;

      active_red_alarm(100);
    }

    /* restore `donkey' pointers in the block */
    if (get_block_donkey2(donkey->xold, donkey->yold) == donkey)
      set_block_donkey2(donkey->xold, donkey->yold, NULL);

    set_block_donkey2(donkey->x, donkey->y, donkey);
    donkey->flip = (donkey->xold == donkey->x)? donkey->flip:
                   (donkey->xold >  donkey->x)? TRUE: FALSE;
  }
}