summaryrefslogtreecommitdiff
path: root/server/player.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'server/player.cpp')
-rw-r--r--server/player.cpp42
1 files changed, 42 insertions, 0 deletions
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;
+}