From 1c4b618bde3cb82957364319d0dc982716bf1bf9 Mon Sep 17 00:00:00 2001 From: Vegard Storheil Eriksen Date: Fri, 10 Dec 2010 03:23:36 +0100 Subject: Handle concealed and extended kan. --- server/player.cpp | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) (limited to 'server/player.cpp') diff --git a/server/player.cpp b/server/player.cpp index 2454a98..0c30608 100644 --- a/server/player.cpp +++ b/server/player.cpp @@ -379,3 +379,45 @@ void Game::Player::make_kan(Tile tile, int target, PlayerNum discarder) { open.push_back(Set(Set::Kan, kan, true)); } + +void Game::Player::make_kan(int target) { + Tiles kan; + + Tiles::iterator it = hand.begin() + target; + Tile t = *it; + kan.push_back(Tile::Back); + it = hand.erase(it); + + it = std::find(it, hand.end(), t); + kan.push_back(*it); + it = hand.erase(it); + + it = std::find(it, hand.end(), t); + kan.push_back(*it); + it = hand.erase(it); + + it = std::find(it, hand.end(), t); + kan.push_back(Tile::Back); + hand.erase(it); + + open.push_back(Set(Set::Kan, kan, false)); +} + +void Game::Player::make_kan_extend(int target) { + Set& set = open[target - 1]; + + Tiles::iterator it = std::find(hand.begin(), hand.end(), set.tiles.front()); + Tile t = *it; + hand.erase(it); + + t.rotated = true; + + for(it = set.tiles.begin(); it != set.tiles.end(); it++) { + if(it->rotated) { + set.tiles.insert(it + 1, t); + break; + } + } + + set.type = Set::Kan; +} -- cgit v1.2.3