add missing game_state.cpp file

This commit is contained in:
Maximilian Keßler 2023-11-11 12:40:36 +01:00
parent 5b0834bc22
commit 1266791750
Signed by: max
GPG key ID: BCC5A619923C0BA5

60
src/game_state.cpp Normal file
View file

@ -0,0 +1,60 @@
#include "game_state.h"
namespace Hanabi {
void Game::make_turn()
{
assert(next_action < actions.size());
Card const next_draw = deck[deck.size() - state->draw_pile_size()];
state->rotate_next_draw(next_draw);
Action const & action = actions[next_action];
std::uint8_t index;
switch(action.type) {
case Hanabi::ActionType::color_clue:
case Hanabi::ActionType::rank_clue:
state->give_clue();
break;
case Hanabi::ActionType::discard:
index = state->find_card_in_hand(action.card);
ASSERT(index != std::uint8_t(-1));
state->discard(index);
break;
case Hanabi::ActionType::play:
index = state->find_card_in_hand(action.card);
ASSERT(index != std::uint8_t(-1));
state->play(index);
break;
case Hanabi::ActionType::vote_terminate_players:
case Hanabi::ActionType::vote_terminate:
case Hanabi::ActionType::end_game:
;
}
++next_action;
}
void Game::revert_turn()
{
state->revert();
}
void Game::forward_until(size_t turn, size_t draw_pile_break)
{
for (size_t i = 0; i < std::min(turn - 1, actions.size()); i++) {
if (state->draw_pile_size() == draw_pile_break) {
break;
}
make_turn();
}
}
void Game::revert_until(size_t draw_pile_break)
{
while(state->draw_pile_size() < draw_pile_break) {
revert_turn();
}
while(state->last_action_type() == ActionType::clue)
{
revert_turn();
}
}
}