improvements
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user