Пример #1
0
void kpok::drawClick()
{
   int cardsToDraw[5];
   int w;

   drawButton->setEnabled(false);

   if (status == 0) {

      wonLabel->hide();

      cleanFoundCard();
      stopBlinking();
      stopWave();

      setCash(getCash() - cashPerRound);

      for (w=0; w<5;w++) {
         cardsToDraw[w]=0; 
         cardW[w]->setHeld(0);
      }

      for (w=0; w<highestCard;w++) done[w]=0;

      for (w=0;w<5;w++) {
         cards[w]=0;
         cardW[w]->heldLabel->hide();
         cardW[w]->show();
         cardW[w]->paintCard(cards[w],0,0);
      }

      drawCards(cardsToDraw);

      if (cardW[0]->queryHeld())
         drawTimer->start(0, TRUE);
      else
         drawTimer->start(drawDelay, TRUE);

   } else {
      clickToHold->hide();
      for (w=0; w<5;w++) cardsToDraw[w] = cardW[w]->queryHeld();

      for (w=0;w<5;w++) {
         if (!cardsToDraw[w]) {
            cards[w]=0;
            cardW[w]->show();
            cardW[w]->paintCard(cards[w],0,0);
         }
      }

      drawCards(cardsToDraw);


      if (cardW[0]->queryHeld())
         drawTimer->start(0, TRUE);
      else
         drawTimer->start(drawDelay, TRUE);

   }
}
Пример #2
0
void GameEngine::logic() {
    // exit game
    if (input_engine->pressing[EXIT]) {
        done = true;
        return;
    }

    // toggle fullscreen
    if (input_engine->pressing[FULLSCREEN_TOGGLE] && !input_engine->lock[FULLSCREEN_TOGGLE]) {
        input_engine->lock[FULLSCREEN_TOGGLE] = true;
        render_engine->toggleFullscreen();
    }

    if (input_engine->pressing[NEW_GAME] && !input_engine->lock[NEW_GAME]) {
        input_engine->lock[NEW_GAME] = true;
        init();
    }

    // game logic goes here

    // game over
    if (winner != -1)
        return;

    if (active_player == 0) {
        if (players[0].hand.empty())
            drawCards(0);

        if (input_engine->pressing_mouse && !input_engine->lock_mouse) {
            input_engine->lock_mouse = true;

            checkClickFlinch();
            checkClickReserve();
            checkClickHand();

            clearCompleted();
        }
    }
    else {
        if (players[1].hand.empty())
            drawCards(1);

        if (!(AIPlayFlinch() || AIPlayReserve()))
            AIPlayHand();

        clearCompleted();
    }
}
Пример #3
0
void PlayerState::endTurn()
{
	for (int cardIndex = 0; cardIndex < INSUPPLY; cardIndex++)
	{
		discard[cardIndex] += (inPlay[cardIndex] + hand[cardIndex]);
		inPlay[cardIndex] = 0;
		hand[cardIndex] = 0;
	}
	buys = 1;
	actions = 1;
	spentMoney = 0;
	drawCards(5);
}
Пример #4
0
int council_room_func(int card, struct gameState *state, int handPos, int *bonus, int currentPlayer)
{
	//+4 cards for player
	drawCards(currentPlayer, state, 4);
	int i;
	for(i = 0; i < state->numPlayers; ++i)
		if(i != currentPlayer)
			drawCard(i, state);
	
	state->numBuys++;

	discardCard(handPos, currentPlayer, state, 0);

	return 0;
}
Пример #5
0
ResponseCode Server_ProtocolHandler::cmdMulligan(Command_Mulligan * /*cmd*/, CommandContainer *cont, Server_Game *game, Server_Player *player)
{
	if (player->getSpectator())
		return RespFunctionNotAllowed;
	
	if (!game->getGameStarted())
		return RespGameNotStarted;
	
	Server_CardZone *hand = player->getZones().value("hand");
	int number = (hand->cards.size() <= 1) ? player->getInitialCards() : hand->cards.size() - 1;
		
	Server_CardZone *deck = player->getZones().value("deck");
	while (!hand->cards.isEmpty())
		player->moveCard(cont, hand, QList<int>() << hand->cards.first()->getId(), deck, 0, 0, false, false);

	deck->shuffle();
	cont->enqueueGameEventPrivate(new Event_Shuffle(player->getPlayerId()), game->getGameId());
	cont->enqueueGameEventPublic(new Event_Shuffle(player->getPlayerId()), game->getGameId());

	drawCards(game, player, cont, number);

	return RespOk;
}
Пример #6
0
void GameEngine::init() {
    winner = -1;

    if (players.empty())
        players.resize(2);

    for (unsigned i=0; i<players.size(); ++i) {
        players[i].hand.clear();
        players[i].reserve_piles.clear();
        players[i].reserve_piles.resize(5);
        while (!players[i].flinch_pile.empty()) {
            players[i].flinch_pile.pop();
        }
    }

    active_player = 2;
    hand_selected = -1;

    played_piles.clear();
    played_piles.resize(15);

    // create draw pile
    discard_piles.resize(15);
    for (unsigned i=0; i<15; ++i) {
        while (discard_piles[i].size() < 10)
            discard_piles[i].push(i+1);
    }
    createDrawPile();

    // deal cards
    for (unsigned i=0; i<players.size(); ++i) {
        for (unsigned j=0; j<10; ++j) {
            players[i].flinch_pile.push(draw_pile.top());
            draw_pile.pop();
        }

        drawCards(i);
    }

    // check who goes first
    for (unsigned i=0; i<players.size(); ++i) {
        if (players[i].flinch_pile.top() == 1) {
            active_player = i;
            playFlinch(i);
            break;
        }
    }
    if (active_player == 2) {
        for (unsigned i=0; i<players.size(); ++i) {
            for (unsigned j=0; j<players[i].hand.size(); ++j) {
                if (players[i].hand[j] == 1) {
                    active_player = i;
                    playHand(i, j);
                    break;
                }
            }
            if (active_player != 2)
                break;
        }
    }
    // neither players has a 1
    if (active_player == 2) {
        for (unsigned i=0; i<5; ++i) {
            reserveHand(0, 0, i);
            reserveHand(1, 0, i);
        }
        active_player = 0;
    }

}
Пример #7
0
void GUIPlayerView::draw(bool animating)
{
    drawCards(animating);
    drawName(animating);
}
Пример #8
0
void kpok::drawClick()
{
  if (!drawButton->isEnabled())
    return;

  // If this is the start of a new round, then deal new cards.
  if (m_game.getState() == StateStartRound) {
    drawButton->setEnabled(false);
    betBox->setEnabled(false);
    newRound();
  }
  else if (m_game.getState() == StateBet1) { // bet
    emit showClickToHold(false);

    bet();
    if (m_game.getState() == StateExchangeCards) {// should be set in bet()
      drawClick();
    }
  }
  else if (m_game.getState() == StateRaise1) { // continue bet
    bet();
    if (m_game.getState() == StateExchangeCards) {// should be set in bet()
      drawClick();
    }
  }
  else if (m_game.getState() == StateExchangeCards) { // exchange cards
    drawButton->setEnabled(false);
    playerBox[0]->setHeldEnabled(false);
    betBox->setEnabled(false);
    bool skip[PokerHandSize];
    for (int i = 0; i < PokerHandSize; i++)
      skip[i] = false;

    for (int i = 0; i < m_game.getNumActivePlayers(); i++) {
      if (!m_game.getActivePlayer(i)->getHuman())
	m_game.getActivePlayer(i)->exchangeCards(skip);
      else {
	for (int i = 0; i < PokerHandSize; i++) {
	  skip[i] = playerBox[0]->getHeld(i);
	  if (!skip[i])
	    playerBox[0]->paintDeck(i);
	}
      }
      drawCards(m_game.getActivePlayer(i), skip);
    }

    if (playerBox[0]->getHeld(0))
      drawTimer->start(0, TRUE);
    else
      drawTimer->start(drawDelay, TRUE);
  }
  else if (m_game.getState() == StateBet2) { // raise
    setBetButtonEnabled(false);
    bet();

    if (m_game.getState() == StateSee)//should be set in bet()->if no one has raised
      drawClick();
  }
  else if (m_game.getState() == StateRaise2) {
    bet();
    if (m_game.getState() == StateSee)
      drawClick();
  }
  else if (m_game.getState() == StateSee)
    winner();
}
Пример #9
0
void kpok::newRound()
{
  bool  onePlayerGame         = false;

  m_game.newRound();

  playerBox[0]->setHeldEnabled(false);

  if (m_numPlayers == 1)
    onePlayerGame = true;

  readOptions(); // maybe some options have changed so check em

  if (m_players[0].getCash() < m_game.getMinBet())
    noMoney();
  else {
    for (unsigned int i = 0; i < m_numPlayers; i++) {
      if (m_players[i].getCash() >= m_game.getMinBet())
	m_game.activatePlayer(&m_players[i]);
      else
	removePlayerFromRound(&m_players[i]);
    }
  }

  if (m_game.getNumActivePlayers() == 1 && m_game.getType() != SinglePlayer)
    switchToOnePlayerRules();

  m_blinkingBox = 0;
  wonLabel->hide();
  stopBlinking();
  stopWave();

  for (int i = 0; i < m_game.getNumActivePlayers(); i++)
    m_game.getActivePlayer(i)->newRound();

  // We are beginning a new round so every card is available.
  drawAllDecks();
  playerBox[0]->showHelds(false);

  // Deal first cards of the round
  bool skip[PokerHandSize];
  for (int i = 0; i < PokerHandSize; i++)
    skip[i] = false;

  for (int i = 0; i < m_game.getNumActivePlayers(); i++)
    drawCards(m_game.getActivePlayer(i), skip);

  if (m_game.getNumActivePlayers() > 1) {
    findHumanPlayer()->changeBet(m_game.getMinBet());
    m_game.bet(m_game.getMinBet());
    betBox->show();
  }
  else {
    m_game.getActivePlayer(0)->changeBet(cashPerRound);
    betBox->hide();
  }

  paintCash();

  drawTimer->start(drawDelay, TRUE);
}
Пример #10
0
ResponseCode Server_ProtocolHandler::cmdDrawCards(Command_DrawCards *cmd, CommandContainer *cont, Server_Game *game, Server_Player *player)
{
	return drawCards(game, player, cont, cmd->getNumber());
}