improvements

This commit is contained in:
Michal Vrba
2026-08-28 16:34:40 +02:00
parent 4803bc22a6
commit 02bca7c34a
212 changed files with 622 additions and 112 deletions
+59
View File
@@ -255,4 +255,63 @@ public class GameEngineTests
Assert.True(engine.CanPlayCard(p1, decision.Card));
}
}
[Fact]
public void OlympicMode_LoserLosesOneCard_AndStartsNextRound()
{
var engine = new GameEngine(seed: 42);
var p1 = new Player("Hráč 1", PlayerType.Human);
var p2 = new Player("Hráč 2", PlayerType.Human);
var p3 = new Player("Hráč 3", PlayerType.Human);
var rules = new RuleOptions { OlympicMode = true, InitialCardCount = 4 };
engine.StartGame(new List<Player> { p1, p2, p3 }, rules);
// Hráč 1 vyhrá (prvý skončí)
p1.Hand.Clear();
p1.Hand.Add(new Card(Suit.Hearts, Rank.Eight));
engine.State.DiscardPile.Clear();
engine.State.DiscardPile.Add(new Card(Suit.Hearts, Rank.Seven));
engine.PlayCard(p1, p1.Hand[0]); // p1 finished 1st
// Hráč 2 skončí druhý
p2.Hand.Clear();
p2.Hand.Add(new Card(Suit.Hearts, Rank.Nine));
engine.PlayCard(p2, p2.Hand[0]); // p2 finished 2nd
// Hráč 3 ostal posledný (porazený kola)
Assert.True(engine.State.IsRoundOver);
Assert.Equal(TurnState.RoundOver, engine.State.TurnState);
Assert.Equal(p3, engine.State.RoundLoser);
Assert.Equal(3, p3.OlympicCardsCount); // 4 - 1 = 3 karty
// Spustenie ďalšieho kola
engine.StartNextRound();
Assert.Equal(2, engine.State.RoundNumber);
Assert.Equal(4, p1.Hand.Count);
Assert.Equal(4, p2.Hand.Count);
Assert.Equal(3, p3.Hand.Count); // Hráč 3 má o 1 kartu menej
}
[Fact]
public void OlympicMode_EliminatesPlayer_AndDeclaresWinner()
{
var engine = new GameEngine(seed: 42);
var p1 = new Player("Hráč 1", PlayerType.Human);
var p2 = new Player("Hráč 2", PlayerType.Human);
var rules = new RuleOptions { OlympicMode = true, InitialCardCount = 1 };
engine.StartGame(new List<Player> { p1, p2 }, rules);
// Hráč 1 vyhrá kolo
p1.Hand.Clear();
p1.Hand.Add(new Card(Suit.Hearts, Rank.Eight));
engine.State.DiscardPile.Clear();
engine.State.DiscardPile.Add(new Card(Suit.Hearts, Rank.Seven));
engine.PlayCard(p1, p1.Hand[0]);
// Hráč 2 prehrá kolo -> klesne z 1 na 0 kariet -> eliminovaný!
Assert.True(p2.IsEliminated);
Assert.True(engine.State.IsMatchOver);
Assert.Equal(p1, engine.State.MatchWinner);
Assert.Equal(TurnState.GameOver, engine.State.TurnState);
}
}