From 57ebf4913cecc71290553367770255524a06c539 Mon Sep 17 00:00:00 2001
From: Francesco Bariatti <francesco.bariatti@insa-rennes.fr>
Date: Wed, 16 Mar 2016 17:04:18 +0100
Subject: [PATCH] Bugfix in number of moves that wasn't counted starting from 0

---
 src/game/penguin.cpp | 25 ++++++++++++-------------
 tools/drawState.py   |  5 +++--
 tools/gui.py         |  4 ++--
 3 files changed, 17 insertions(+), 17 deletions(-)

diff --git a/src/game/penguin.cpp b/src/game/penguin.cpp
index ccd9f05..dde9a87 100644
--- a/src/game/penguin.cpp
+++ b/src/game/penguin.cpp
@@ -91,8 +91,7 @@ namespace game
 	/* Number of moves that you can play */
 	uint16_t penguin::number_of_moves() const
 	{
-		//return 9 - state.total_moves;
-		return 0;
+		return state.current_player_red ? state.nb_moves_red : state.nb_moves_blue;
 	}
 
 	/* The penguin that will move if we want to play the #move_number move in the list of possible moves.
@@ -178,48 +177,48 @@ namespace game
 		uint8_t move_number = ((*p) >> 6) & 63; //Move number for the current penguin
 		uint32_t penguin_copy = (*p) >> 12;
 		//Direction A
-		if((penguin_copy & 7) >= move_number)
+		if((penguin_copy & 7) > move_number)
 		{
 			//Move direction A
-			(*p) = (7 * move_number +1) + ((*p) & 63);
+			(*p) = (7 * (move_number +1)) + ((*p) & 63);
 			return;
 		}
 		move_number -= penguin_copy & 7;
 		penguin_copy = penguin_copy >> 3;
-		if((penguin_copy & 7) >= move_number)
+		if((penguin_copy & 7) > move_number)
 		{
 			//Move direction B
-			(*p) = (-1 * move_number +1) + ((*p) & 63);
+			(*p) = (-1 * (move_number +1)) + ((*p) & 63);
 			return;
 		}
 		move_number -= penguin_copy & 7;
 		penguin_copy = penguin_copy >> 3;
-		if((penguin_copy & 7) >= move_number)
+		if((penguin_copy & 7) > move_number)
 		{
 			//Move direction C
-			(*p) = (-8 * move_number +1) + ((*p) & 63);
+			(*p) = (-8 * (move_number +1)) + ((*p) & 63);
 			return;
 		}
 		move_number -= penguin_copy & 7;
 		penguin_copy = penguin_copy >> 3;
-		if((penguin_copy & 7) >= move_number)
+		if((penguin_copy & 7) > move_number)
 		{
 			//Move direction D
-			(*p) = (-7 * move_number +1) + ((*p) & 63);
+			(*p) = (-7 * (move_number +1)) + ((*p) & 63);
 			return;
 		}
 		move_number -= penguin_copy & 7;
 		penguin_copy = penguin_copy >> 3;
-		if((penguin_copy & 7) >= move_number)
+		if((penguin_copy & 7) > move_number)
 		{
 			//Move direction E
-			(*p) = (1 * move_number +1) + ((*p) & 63);
+			(*p) = (1 * (move_number +1)) + ((*p) & 63);
 			return;
 		}
 		move_number -= penguin_copy & 7;
 		penguin_copy = penguin_copy >> 3;
 		//Move direction F
-		(*p) = (8 * move_number +1) + ((*p) & 63);
+		(*p) = (8 * (move_number +1)) + ((*p) & 63);
 	}
 
 	int penguin::update_moves(uint32_t* p, uint64_t obstacles)
diff --git a/tools/drawState.py b/tools/drawState.py
index ee01d4a..8479eb1 100755
--- a/tools/drawState.py
+++ b/tools/drawState.py
@@ -30,9 +30,10 @@ def drawPenguin(penguin):
 		"D" : str((penguin >> 21) & 7), 
 		"E" : str((penguin >> 24) & 7), 
 		"F" : str((penguin >> 27) & 7), 
-		"tot" : str((penguin >> 6) & 63).rjust(2)
+		"tot" : str((penguin >> 6) & 63).rjust(2),
+		"tot-1": str(max(((penguin >> 6) & 63)-1, 0)).rjust(2)
 	}
-	print("Pos: {pos}, A:{A}, B:{B}, C:{C}, D:{D}, E:{E}, F:{F}, Tot: {tot}".format(**args))
+	print("Pos: {pos}, A:{A}, B:{B}, C:{C}, D:{D}, E:{E}, F:{F}, Tot: {tot} [0..{tot-1}]".format(**args))
 
 if __name__ == "__main__":
 	try:
diff --git a/tools/gui.py b/tools/gui.py
index 3d50e59..9066a56 100755
--- a/tools/gui.py
+++ b/tools/gui.py
@@ -32,10 +32,10 @@ if __name__ == "__main__":
 			print("Comments: {}".format(''.join(comments)))
 			state = json.loads(''.join(json_data))
 			drawState.drawBitboard(state["bitboards"]["onefish"],state["bitboards"]["twofish"],state["bitboards"]["threefish"])
-			print("Red penguins (Red score: {}, Total moves: {})".format(state["score"]["red"], state["nb_moves"]["red"]))
+			print("Red penguins (Red score: {}, Total moves: {} [0..{}])".format(state["score"]["red"], state["nb_moves"]["red"], state["nb_moves"]["red"]-1))
 			for i in range(4):
 				drawState.drawPenguin(state["penguins"]["red"][i])
-			print("Blue penguins (Blue score: {}, Total moves: {})".format(state["score"]["blue"], state["nb_moves"]["blue"]))
+			print("Blue penguins (Blue score: {}, Total moves: {} [0..{}])".format(state["score"]["blue"], state["nb_moves"]["blue"], state["nb_moves"]["blue"] -1))
 			for i in range(4):
 				drawState.drawPenguin(state["penguins"]["blue"][i])
 			#PLAY NEXT MOVE
-- 
GitLab