diff --git a/src/game/morpion.cpp b/src/game/morpion.cpp
index 84c5ddba7571ee6b7935967e273b4e1e2378bd46..eba70a629959faa25f5420714c3bd7fab097a715 100644
--- a/src/game/morpion.cpp
+++ b/src/game/morpion.cpp
@@ -67,7 +67,7 @@ namespace game
 
 	uint8_t morpion::current_player() const
 	{
-		return state.total_moves & 1 ? CIRCLE : CROSS; // CROSS pair, CIRCLE impair
+		return state.total_moves & 1 ? CIRCLE : CROSS; // CROSS even, CIRCLE odd
 	}
 
 	int morpion::value(uint8_t player) const
@@ -91,12 +91,20 @@ namespace game
 
 	void morpion::update_win()
 	{
-		//TODO: Implement
+		if(has_won(state.cross_bitboard))
+			state.first_player_win = true;
+		else if(has_won(state.circle_bitboard))
+			state.second_player_win = true;
 	}
 
-	bool morpion::has_won(uint64_t bitboard)
+	bool morpion::has_won(uint16_t bitboard)
 	{
-		//TODO: Implement
+		if(bitboard == ROW1_MASK || bitboard == ROW2_MASK || bitboard == ROW3_MASK) // Check vertical |
+			return true;
+		if(bitboard == COL1_MASK || bitboard == COL2_MASK || bitboard == COL3_MASK) // Check horizontal _
+			return true;
+		if(bitboard == DIA1_MASK || bitboard == DIA2_MASK) // Chack diagonal \ /
+			return true;
 		return false;
 	}