diff --git a/Faraon.Client/Components/GameOverModal.razor b/Faraon.Client/Components/GameOverModal.razor index 3ae1e3a..8a527a4 100644 --- a/Faraon.Client/Components/GameOverModal.razor +++ b/Faraon.Client/Components/GameOverModal.razor @@ -2,14 +2,36 @@
-
Výsledky Hry 👑
+
+ @if (IsOlympicMode) + { + 🏆 OLYMPIJSKÝ ŠAMPIÓN 👑 + } + else + { + Výsledky Hry 👑 + } +
+ + @if (IsOlympicMode && MatchWinner != null) + { +
+
🥇👑
+
+ @MatchWinner.Avatar @MatchWinner.Name +
+
+ Prežil všetky kolá ako jediný hráč a zvíťazil v Olympijskom turnaji! +
+
+ }
- @foreach (var player in Players.OrderBy(p => p.FinishedPosition ?? 99)) + @foreach (var player in Players.OrderBy(p => p.IsEliminated ? 1 : 0).ThenBy(p => p.FinishedPosition ?? 99)) { -
+
- @if (player.FinishedPosition == 1) { 🥇 } + @if ((MatchWinner != null && player == MatchWinner) || (!IsOlympicMode && player.FinishedPosition == 1)) { 🥇 } else if (player.FinishedPosition == 2) { 🥈 } else if (player.FinishedPosition == 3) { 🥉 } else { #@(player.FinishedPosition ?? 4) } @@ -22,8 +44,26 @@ (AI) }
-
- @(player.FinishedPosition == 1 ? "Víťaz! 🎉" : $"{player.FinishedPosition}. miesto") +
+ @if (IsOlympicMode) + { + if (player == MatchWinner) + { + Šampión! 🏆 + } + else if (player.IsEliminated) + { + Vyradený ☠️ + } + else + { + @player.OlympicCardsCount kariet + } + } + else + { + @(player.FinishedPosition == 1 ? "Víťaz! 🎉" : $"{player.FinishedPosition}. miesto") + }
} @@ -42,6 +82,8 @@ @code { [Parameter] public List Players { get; set; } = new(); + [Parameter] public bool IsOlympicMode { get; set; } = false; + [Parameter] public Player? MatchWinner { get; set; } [Parameter] public EventCallback OnPlayAgain { get; set; } [Parameter] public EventCallback OnBackToLobby { get; set; } } diff --git a/Faraon.Client/Components/Lobby.razor b/Faraon.Client/Components/Lobby.razor index be08d30..4c46c62 100644 --- a/Faraon.Client/Components/Lobby.razor +++ b/Faraon.Client/Components/Lobby.razor @@ -77,15 +77,17 @@ Spálenie (4 rovnaké karty) -
@@ -103,11 +105,23 @@ Rub
-
Tradičný Mariáš (Original)
+
Tradičný Mariáš 🎴
Autentický dvojhlavý Tell vzor (Piatnik)
+
+
+ Zbojníci + Rub +
+
+
Zbojníci & Legendy 🪓
+
Jánošík, Uhorčík, výšivky a tatranský folklór
+
+
+
@@ -116,7 +130,67 @@
SpongeBob Cartoon 🧽
-
Bikini Bottom edícia (Krabby Patty & postavičky)
+
Bikini Bottom edícia (postavičky a veľké symboly)
+
+
+ +
+
+ Cyberpunk 2077 + Rub +
+
+
Cyberpunk 2077 ⚡
+
Neónový holografický štýl a kybernetickí hrdinovia
+
+
+ +
+
+ Fantasy RPG + Rub +
+
+
Fantasy RPG 🐉
+
Dračí lordi, mágovia, runy a rytieri
+
+
+ +
+
+ Staroveký Egypt + Rub +
+
+
Staroveký Egypt ⚔️
+
Zlatý papyrus, Tutanchamón, Anubis a pyramídy
+
+
+ +
+
+ Kráľovské zvieratká + Rub +
+
+
Kráľovské Zvieratká 🐱
+
Mačičky a psíkovia v kráľovských korunkách
+
+
+ +
+
+ Retro Pixel + Rub +
+
+
Retro 8-Bit Pixel 🕹️
+
Nostalgický arkádový štýl klasických hier
diff --git a/Faraon.Client/Components/PlayerHandView.razor b/Faraon.Client/Components/PlayerHandView.razor index 41a1c30..f38c077 100644 --- a/Faraon.Client/Components/PlayerHandView.razor +++ b/Faraon.Client/Components/PlayerHandView.razor @@ -88,9 +88,9 @@ int total = Player.Hand.Count; double mid = (total - 1) / 2.0; double offset = i - mid; - double angle = total > 1 ? offset * (Math.Min(35.0 / total, 5.5)) : 0; - double yOffset = Math.Abs(offset) * 4.0; - double xOffset = offset * (total > 8 ? 26 : 38); + double angle = total > 1 ? offset * (Math.Min(35.0 / total, 5.2)) : 0; + double yOffset = Math.Abs(offset) * 3.5; + double stepFactor = total > 8 ? 0.75 : (total > 5 ? 0.88 : 1.0); // Ak patrí do aktívnej skupiny rovnakej hodnoty, vysunieme ju string slotClasses = "hand-card-slot"; @@ -99,7 +99,7 @@ slotClasses += " rank-group-lifted"; } - string fanSlotStyle = $"transform: translateX({xOffset}px) translateY({yOffset}px) rotate({angle}deg); z-index: {(isSelected ? 140 + i : (isSameRankAsSelected ? 110 + i : i + 1))};"; + string fanSlotStyle = $"transform: translateX(calc({offset.ToString(System.Globalization.CultureInfo.InvariantCulture)} * var(--fan-card-step) * {stepFactor.ToString(System.Globalization.CultureInfo.InvariantCulture)})) translateY({yOffset.ToString(System.Globalization.CultureInfo.InvariantCulture)}px) rotate({angle.ToString(System.Globalization.CultureInfo.InvariantCulture)}deg); z-index: {(isSelected ? 140 + i : (isSameRankAsSelected ? 110 + i : i + 1))};"; string selectedClass = isSelected ? "card-selected-combo" : (isSameRankAsSelected ? "card-group-active" : "");
diff --git a/Faraon.Client/Components/PlayerSlot.razor b/Faraon.Client/Components/PlayerSlot.razor index 96602dd..b723886 100644 --- a/Faraon.Client/Components/PlayerSlot.razor +++ b/Faraon.Client/Components/PlayerSlot.razor @@ -18,7 +18,11 @@ }
- @if (Player.HasFinished) + @if (Player.IsEliminated) + { + ☠️ Vyradený + } + else if (Player.HasFinished) { Skončil 🏆 } @@ -26,11 +30,17 @@ { @Player.Hand.Count @(Player.Hand.Count == 1 ? "karta" : (Player.Hand.Count < 5 ? "karty" : "kariet")) } + @if (IsOlympicMode) + { +
+ 🏅 @Player.OlympicCardsCount @(Player.OlympicCardsCount == 1 ? "karta" : (Player.OlympicCardsCount < 5 ? "karty" : "kariet")) +
+ }
- @if (!Player.HasFinished) + @if (!Player.HasFinished && !Player.IsEliminated) {
@for (int i = 0; i < Math.Min(Player.Hand.Count, 8); i++) @@ -44,5 +54,6 @@ @code { [Parameter, EditorRequired] public Player Player { get; set; } = default!; [Parameter] public bool IsCurrentTurn { get; set; } = false; + [Parameter] public bool IsOlympicMode { get; set; } = false; [Parameter] public string PositionClass { get; set; } = "slot-top"; } diff --git a/Faraon.Client/Components/RoundOverModal.razor b/Faraon.Client/Components/RoundOverModal.razor new file mode 100644 index 0000000..145aa10 --- /dev/null +++ b/Faraon.Client/Components/RoundOverModal.razor @@ -0,0 +1,93 @@ +@namespace Faraon.Client.Components + +
+
+
+ 🏅 Kolo #@RoundNumber Skončené! +
+ + @if (RoundLoser != null) + { +
+
+ Porazený kola: @RoundLoser.Avatar @RoundLoser.Name +
+
+ @if (RoundLoser.IsEliminated) + { + ☠️ Stratil všetky karty a VYPADÁVA z Olympijského turnaja! + } + else + { + V ďalšom kole začína s @RoundLoser.OlympicCardsCount @(RoundLoser.OlympicCardsCount == 1 ? "kartou" : (RoundLoser.OlympicCardsCount < 5 ? "kartami" : "kartami")) (-1 karta) + } +
+
+ } + +
+ Stav Olympijského turnaja: +
+ +
+ @foreach (var player in Players.OrderBy(p => p.IsEliminated ? 1 : 0).ThenBy(p => p.FinishedPosition ?? 99)) + { +
+
+ @if (player.IsEliminated) + { + ☠️ + } + else if (player.FinishedPosition == 1) + { + 🥇 + } + else if (player.FinishedPosition == 2) + { + 🥈 + } + else + { + #@(player.FinishedPosition ?? 3) + } +
+
+ @player.Avatar + @player.Name + @if (player.Type == PlayerType.AI) + { + (AI) + } +
+
+ @if (player.IsEliminated) + { + Vyradený + } + else + { + 🎴 @player.OlympicCardsCount @(player.OlympicCardsCount == 1 ? "karta" : (player.OlympicCardsCount < 5 ? "karty" : "kariet")) + } +
+
+ } +
+ +
+ + +
+
+
+ +@code { + [Parameter] public int RoundNumber { get; set; } = 1; + [Parameter] public Player? RoundLoser { get; set; } + [Parameter] public List Players { get; set; } = new(); + [Parameter] public EventCallback OnNextRound { get; set; } + [Parameter] public EventCallback OnBackToLobby { get; set; } +} diff --git a/Faraon.Client/Pages/Home.razor b/Faraon.Client/Pages/Home.razor index 6a6ef12..2dc533e 100644 --- a/Faraon.Client/Pages/Home.razor +++ b/Faraon.Client/Pages/Home.razor @@ -15,7 +15,15 @@ else
-

FARAÓN

+
+

FARAÓN

+ @if (Engine.State.Rules.OlympicMode) + { + + 🏅 KOLO #@Engine.State.RoundNumber + + } +
Ťah #@Engine.State.TurnCount • Na rade: @@ -24,8 +32,8 @@ else
-
- + @if (!ViewingPlayer.IsEliminated) + { + + } + else + { +
+ ☠️ Bol si vyradený z Olympijského turnaja. Sleduj zápas až do konca! +
+ } - @if (IsViewingPlayerTurn && Engine.State.TurnState == TurnState.Playing) + @if (IsViewingPlayerTurn && Engine.State.TurnState == TurnState.Playing && !ViewingPlayer.IsEliminated) {
@if (CheckFourOfAKindRank(ViewingPlayer) is Rank burnRank) @@ -158,9 +182,20 @@ else } + @if (Engine.State.TurnState == TurnState.RoundOver) + { + + } + @if (Engine.State.IsGameOver) { } @@ -285,13 +320,29 @@ else return "top"; } + private static readonly string[] AvailableDecks = new[] { "original", "janosik", "spongebob", "cyberpunk", "fantasy", "egypt", "pets", "pixel" }; + private void ToggleDeck() { if (Engine == null) return; - Engine.State.Rules.SelectedDeck = Engine.State.Rules.SelectedDeck == "spongebob" ? "original" : "spongebob"; + int currentIdx = Array.IndexOf(AvailableDecks, Engine.State.Rules.SelectedDeck); + int nextIdx = (currentIdx + 1) % AvailableDecks.Length; + Engine.State.Rules.SelectedDeck = AvailableDecks[nextIdx]; StateHasChanged(); } + private string GetDeckIcon(string deck) => deck switch + { + "janosik" => "🪓", + "spongebob" => "🧽", + "cyberpunk" => "⚡", + "fantasy" => "🐉", + "egypt" => "⚔️", + "pets" => "🐱", + "pixel" => "🕹️", + _ => "🎴" + }; + private async Task HandlePlayCards(List cards) { if (Engine == null || cards.Count == 0) return; @@ -349,6 +400,14 @@ else CheckTriggerAI(); } + private void HandleStartNextRound() + { + if (Engine == null) return; + Engine.StartNextRound(); + StateHasChanged(); + CheckTriggerAI(); + } + private async Task HandleBurn(Rank rank) { if (Engine == null) return; diff --git a/Faraon.Client/wwwroot/assets/cards/cyberpunk/Acorns_Ace.webp b/Faraon.Client/wwwroot/assets/cards/cyberpunk/Acorns_Ace.webp new file mode 100644 index 0000000..9f0c29e Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/cyberpunk/Acorns_Ace.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/cyberpunk/Acorns_Eight.webp b/Faraon.Client/wwwroot/assets/cards/cyberpunk/Acorns_Eight.webp new file mode 100644 index 0000000..c8e3f80 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/cyberpunk/Acorns_Eight.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/cyberpunk/Acorns_King.webp b/Faraon.Client/wwwroot/assets/cards/cyberpunk/Acorns_King.webp new file mode 100644 index 0000000..b8916b4 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/cyberpunk/Acorns_King.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/cyberpunk/Acorns_Nine.webp b/Faraon.Client/wwwroot/assets/cards/cyberpunk/Acorns_Nine.webp new file mode 100644 index 0000000..61df629 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/cyberpunk/Acorns_Nine.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/cyberpunk/Acorns_OverKnave.webp b/Faraon.Client/wwwroot/assets/cards/cyberpunk/Acorns_OverKnave.webp new file mode 100644 index 0000000..0fd79bb Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/cyberpunk/Acorns_OverKnave.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/cyberpunk/Acorns_Seven.webp b/Faraon.Client/wwwroot/assets/cards/cyberpunk/Acorns_Seven.webp new file mode 100644 index 0000000..3a26f10 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/cyberpunk/Acorns_Seven.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/cyberpunk/Acorns_Ten.webp b/Faraon.Client/wwwroot/assets/cards/cyberpunk/Acorns_Ten.webp new file mode 100644 index 0000000..01a2158 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/cyberpunk/Acorns_Ten.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/cyberpunk/Acorns_UnderKnave.webp b/Faraon.Client/wwwroot/assets/cards/cyberpunk/Acorns_UnderKnave.webp new file mode 100644 index 0000000..9165015 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/cyberpunk/Acorns_UnderKnave.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/cyberpunk/Bells_Ace.webp b/Faraon.Client/wwwroot/assets/cards/cyberpunk/Bells_Ace.webp new file mode 100644 index 0000000..8a5e565 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/cyberpunk/Bells_Ace.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/cyberpunk/Bells_Eight.webp b/Faraon.Client/wwwroot/assets/cards/cyberpunk/Bells_Eight.webp new file mode 100644 index 0000000..ac5e75f Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/cyberpunk/Bells_Eight.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/cyberpunk/Bells_King.webp b/Faraon.Client/wwwroot/assets/cards/cyberpunk/Bells_King.webp new file mode 100644 index 0000000..0e4f432 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/cyberpunk/Bells_King.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/cyberpunk/Bells_Nine.webp b/Faraon.Client/wwwroot/assets/cards/cyberpunk/Bells_Nine.webp new file mode 100644 index 0000000..e592e39 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/cyberpunk/Bells_Nine.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/cyberpunk/Bells_OverKnave.webp b/Faraon.Client/wwwroot/assets/cards/cyberpunk/Bells_OverKnave.webp new file mode 100644 index 0000000..ab52eff Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/cyberpunk/Bells_OverKnave.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/cyberpunk/Bells_Seven.webp b/Faraon.Client/wwwroot/assets/cards/cyberpunk/Bells_Seven.webp new file mode 100644 index 0000000..d8cda2a Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/cyberpunk/Bells_Seven.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/cyberpunk/Bells_Ten.webp b/Faraon.Client/wwwroot/assets/cards/cyberpunk/Bells_Ten.webp new file mode 100644 index 0000000..8ec611c Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/cyberpunk/Bells_Ten.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/cyberpunk/Bells_UnderKnave.webp b/Faraon.Client/wwwroot/assets/cards/cyberpunk/Bells_UnderKnave.webp new file mode 100644 index 0000000..a0019b9 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/cyberpunk/Bells_UnderKnave.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/cyberpunk/Card_Back.webp b/Faraon.Client/wwwroot/assets/cards/cyberpunk/Card_Back.webp new file mode 100644 index 0000000..c103c91 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/cyberpunk/Card_Back.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/cyberpunk/Hearts_Ace.webp b/Faraon.Client/wwwroot/assets/cards/cyberpunk/Hearts_Ace.webp new file mode 100644 index 0000000..c4dc725 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/cyberpunk/Hearts_Ace.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/cyberpunk/Hearts_Eight.webp b/Faraon.Client/wwwroot/assets/cards/cyberpunk/Hearts_Eight.webp new file mode 100644 index 0000000..d783ee3 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/cyberpunk/Hearts_Eight.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/cyberpunk/Hearts_King.webp b/Faraon.Client/wwwroot/assets/cards/cyberpunk/Hearts_King.webp new file mode 100644 index 0000000..99f94fc Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/cyberpunk/Hearts_King.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/cyberpunk/Hearts_Nine.webp b/Faraon.Client/wwwroot/assets/cards/cyberpunk/Hearts_Nine.webp new file mode 100644 index 0000000..9feb4b8 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/cyberpunk/Hearts_Nine.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/cyberpunk/Hearts_OverKnave.webp b/Faraon.Client/wwwroot/assets/cards/cyberpunk/Hearts_OverKnave.webp new file mode 100644 index 0000000..954e576 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/cyberpunk/Hearts_OverKnave.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/cyberpunk/Hearts_Seven.webp b/Faraon.Client/wwwroot/assets/cards/cyberpunk/Hearts_Seven.webp new file mode 100644 index 0000000..965c857 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/cyberpunk/Hearts_Seven.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/cyberpunk/Hearts_Ten.webp b/Faraon.Client/wwwroot/assets/cards/cyberpunk/Hearts_Ten.webp new file mode 100644 index 0000000..99303a3 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/cyberpunk/Hearts_Ten.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/cyberpunk/Hearts_UnderKnave.webp b/Faraon.Client/wwwroot/assets/cards/cyberpunk/Hearts_UnderKnave.webp new file mode 100644 index 0000000..26d261c Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/cyberpunk/Hearts_UnderKnave.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/cyberpunk/Leaves_Ace.webp b/Faraon.Client/wwwroot/assets/cards/cyberpunk/Leaves_Ace.webp new file mode 100644 index 0000000..405b206 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/cyberpunk/Leaves_Ace.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/cyberpunk/Leaves_Eight.webp b/Faraon.Client/wwwroot/assets/cards/cyberpunk/Leaves_Eight.webp new file mode 100644 index 0000000..e4c0f56 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/cyberpunk/Leaves_Eight.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/cyberpunk/Leaves_King.webp b/Faraon.Client/wwwroot/assets/cards/cyberpunk/Leaves_King.webp new file mode 100644 index 0000000..18dc04d Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/cyberpunk/Leaves_King.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/cyberpunk/Leaves_Nine.webp b/Faraon.Client/wwwroot/assets/cards/cyberpunk/Leaves_Nine.webp new file mode 100644 index 0000000..cbfb3fb Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/cyberpunk/Leaves_Nine.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/cyberpunk/Leaves_OverKnave.webp b/Faraon.Client/wwwroot/assets/cards/cyberpunk/Leaves_OverKnave.webp new file mode 100644 index 0000000..518b14b Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/cyberpunk/Leaves_OverKnave.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/cyberpunk/Leaves_Seven.webp b/Faraon.Client/wwwroot/assets/cards/cyberpunk/Leaves_Seven.webp new file mode 100644 index 0000000..714ae80 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/cyberpunk/Leaves_Seven.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/cyberpunk/Leaves_Ten.webp b/Faraon.Client/wwwroot/assets/cards/cyberpunk/Leaves_Ten.webp new file mode 100644 index 0000000..efc8385 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/cyberpunk/Leaves_Ten.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/cyberpunk/Leaves_UnderKnave.webp b/Faraon.Client/wwwroot/assets/cards/cyberpunk/Leaves_UnderKnave.webp new file mode 100644 index 0000000..acaaf4c Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/cyberpunk/Leaves_UnderKnave.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/egypt/Acorns_Ace.webp b/Faraon.Client/wwwroot/assets/cards/egypt/Acorns_Ace.webp new file mode 100644 index 0000000..afd8370 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/egypt/Acorns_Ace.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/egypt/Acorns_Eight.webp b/Faraon.Client/wwwroot/assets/cards/egypt/Acorns_Eight.webp new file mode 100644 index 0000000..45118e2 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/egypt/Acorns_Eight.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/egypt/Acorns_King.webp b/Faraon.Client/wwwroot/assets/cards/egypt/Acorns_King.webp new file mode 100644 index 0000000..d6ea207 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/egypt/Acorns_King.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/egypt/Acorns_Nine.webp b/Faraon.Client/wwwroot/assets/cards/egypt/Acorns_Nine.webp new file mode 100644 index 0000000..a0e9c3b Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/egypt/Acorns_Nine.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/egypt/Acorns_OverKnave.webp b/Faraon.Client/wwwroot/assets/cards/egypt/Acorns_OverKnave.webp new file mode 100644 index 0000000..37a3b8b Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/egypt/Acorns_OverKnave.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/egypt/Acorns_Seven.webp b/Faraon.Client/wwwroot/assets/cards/egypt/Acorns_Seven.webp new file mode 100644 index 0000000..68f9fbe Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/egypt/Acorns_Seven.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/egypt/Acorns_Ten.webp b/Faraon.Client/wwwroot/assets/cards/egypt/Acorns_Ten.webp new file mode 100644 index 0000000..feed297 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/egypt/Acorns_Ten.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/egypt/Acorns_UnderKnave.webp b/Faraon.Client/wwwroot/assets/cards/egypt/Acorns_UnderKnave.webp new file mode 100644 index 0000000..45e3247 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/egypt/Acorns_UnderKnave.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/egypt/Bells_Ace.webp b/Faraon.Client/wwwroot/assets/cards/egypt/Bells_Ace.webp new file mode 100644 index 0000000..a2b5f42 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/egypt/Bells_Ace.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/egypt/Bells_Eight.webp b/Faraon.Client/wwwroot/assets/cards/egypt/Bells_Eight.webp new file mode 100644 index 0000000..b64a709 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/egypt/Bells_Eight.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/egypt/Bells_King.webp b/Faraon.Client/wwwroot/assets/cards/egypt/Bells_King.webp new file mode 100644 index 0000000..b5ee6bf Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/egypt/Bells_King.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/egypt/Bells_Nine.webp b/Faraon.Client/wwwroot/assets/cards/egypt/Bells_Nine.webp new file mode 100644 index 0000000..b3f7ae2 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/egypt/Bells_Nine.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/egypt/Bells_OverKnave.webp b/Faraon.Client/wwwroot/assets/cards/egypt/Bells_OverKnave.webp new file mode 100644 index 0000000..cfe9247 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/egypt/Bells_OverKnave.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/egypt/Bells_Seven.webp b/Faraon.Client/wwwroot/assets/cards/egypt/Bells_Seven.webp new file mode 100644 index 0000000..ec09ba9 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/egypt/Bells_Seven.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/egypt/Bells_Ten.webp b/Faraon.Client/wwwroot/assets/cards/egypt/Bells_Ten.webp new file mode 100644 index 0000000..7f670d3 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/egypt/Bells_Ten.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/egypt/Bells_UnderKnave.webp b/Faraon.Client/wwwroot/assets/cards/egypt/Bells_UnderKnave.webp new file mode 100644 index 0000000..35a87ce Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/egypt/Bells_UnderKnave.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/egypt/Card_Back.webp b/Faraon.Client/wwwroot/assets/cards/egypt/Card_Back.webp new file mode 100644 index 0000000..84455b7 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/egypt/Card_Back.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/egypt/Hearts_Ace.webp b/Faraon.Client/wwwroot/assets/cards/egypt/Hearts_Ace.webp new file mode 100644 index 0000000..12f107e Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/egypt/Hearts_Ace.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/egypt/Hearts_Eight.webp b/Faraon.Client/wwwroot/assets/cards/egypt/Hearts_Eight.webp new file mode 100644 index 0000000..d552d54 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/egypt/Hearts_Eight.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/egypt/Hearts_King.webp b/Faraon.Client/wwwroot/assets/cards/egypt/Hearts_King.webp new file mode 100644 index 0000000..1d2c431 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/egypt/Hearts_King.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/egypt/Hearts_Nine.webp b/Faraon.Client/wwwroot/assets/cards/egypt/Hearts_Nine.webp new file mode 100644 index 0000000..ba8fe8d Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/egypt/Hearts_Nine.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/egypt/Hearts_OverKnave.webp b/Faraon.Client/wwwroot/assets/cards/egypt/Hearts_OverKnave.webp new file mode 100644 index 0000000..904e2dc Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/egypt/Hearts_OverKnave.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/egypt/Hearts_Seven.webp b/Faraon.Client/wwwroot/assets/cards/egypt/Hearts_Seven.webp new file mode 100644 index 0000000..2440f4e Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/egypt/Hearts_Seven.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/egypt/Hearts_Ten.webp b/Faraon.Client/wwwroot/assets/cards/egypt/Hearts_Ten.webp new file mode 100644 index 0000000..db4dfe5 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/egypt/Hearts_Ten.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/egypt/Hearts_UnderKnave.webp b/Faraon.Client/wwwroot/assets/cards/egypt/Hearts_UnderKnave.webp new file mode 100644 index 0000000..336bc77 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/egypt/Hearts_UnderKnave.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/egypt/Leaves_Ace.webp b/Faraon.Client/wwwroot/assets/cards/egypt/Leaves_Ace.webp new file mode 100644 index 0000000..27d494b Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/egypt/Leaves_Ace.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/egypt/Leaves_Eight.webp b/Faraon.Client/wwwroot/assets/cards/egypt/Leaves_Eight.webp new file mode 100644 index 0000000..6f8275b Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/egypt/Leaves_Eight.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/egypt/Leaves_King.webp b/Faraon.Client/wwwroot/assets/cards/egypt/Leaves_King.webp new file mode 100644 index 0000000..f900991 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/egypt/Leaves_King.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/egypt/Leaves_Nine.webp b/Faraon.Client/wwwroot/assets/cards/egypt/Leaves_Nine.webp new file mode 100644 index 0000000..528851e Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/egypt/Leaves_Nine.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/egypt/Leaves_OverKnave.webp b/Faraon.Client/wwwroot/assets/cards/egypt/Leaves_OverKnave.webp new file mode 100644 index 0000000..8163625 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/egypt/Leaves_OverKnave.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/egypt/Leaves_Seven.webp b/Faraon.Client/wwwroot/assets/cards/egypt/Leaves_Seven.webp new file mode 100644 index 0000000..2db8ba1 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/egypt/Leaves_Seven.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/egypt/Leaves_Ten.webp b/Faraon.Client/wwwroot/assets/cards/egypt/Leaves_Ten.webp new file mode 100644 index 0000000..1cc9e6e Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/egypt/Leaves_Ten.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/egypt/Leaves_UnderKnave.webp b/Faraon.Client/wwwroot/assets/cards/egypt/Leaves_UnderKnave.webp new file mode 100644 index 0000000..4313dde Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/egypt/Leaves_UnderKnave.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/fantasy/Acorns_Ace.webp b/Faraon.Client/wwwroot/assets/cards/fantasy/Acorns_Ace.webp new file mode 100644 index 0000000..4f7aa56 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/fantasy/Acorns_Ace.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/fantasy/Acorns_Eight.webp b/Faraon.Client/wwwroot/assets/cards/fantasy/Acorns_Eight.webp new file mode 100644 index 0000000..cb6d843 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/fantasy/Acorns_Eight.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/fantasy/Acorns_King.webp b/Faraon.Client/wwwroot/assets/cards/fantasy/Acorns_King.webp new file mode 100644 index 0000000..ba654ed Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/fantasy/Acorns_King.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/fantasy/Acorns_Nine.webp b/Faraon.Client/wwwroot/assets/cards/fantasy/Acorns_Nine.webp new file mode 100644 index 0000000..17ef9cc Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/fantasy/Acorns_Nine.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/fantasy/Acorns_OverKnave.webp b/Faraon.Client/wwwroot/assets/cards/fantasy/Acorns_OverKnave.webp new file mode 100644 index 0000000..1501cfe Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/fantasy/Acorns_OverKnave.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/fantasy/Acorns_Seven.webp b/Faraon.Client/wwwroot/assets/cards/fantasy/Acorns_Seven.webp new file mode 100644 index 0000000..e30bbdd Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/fantasy/Acorns_Seven.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/fantasy/Acorns_Ten.webp b/Faraon.Client/wwwroot/assets/cards/fantasy/Acorns_Ten.webp new file mode 100644 index 0000000..ebdf838 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/fantasy/Acorns_Ten.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/fantasy/Acorns_UnderKnave.webp b/Faraon.Client/wwwroot/assets/cards/fantasy/Acorns_UnderKnave.webp new file mode 100644 index 0000000..cd047cc Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/fantasy/Acorns_UnderKnave.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/fantasy/Bells_Ace.webp b/Faraon.Client/wwwroot/assets/cards/fantasy/Bells_Ace.webp new file mode 100644 index 0000000..ce03279 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/fantasy/Bells_Ace.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/fantasy/Bells_Eight.webp b/Faraon.Client/wwwroot/assets/cards/fantasy/Bells_Eight.webp new file mode 100644 index 0000000..f2a9b82 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/fantasy/Bells_Eight.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/fantasy/Bells_King.webp b/Faraon.Client/wwwroot/assets/cards/fantasy/Bells_King.webp new file mode 100644 index 0000000..5624b57 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/fantasy/Bells_King.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/fantasy/Bells_Nine.webp b/Faraon.Client/wwwroot/assets/cards/fantasy/Bells_Nine.webp new file mode 100644 index 0000000..fc32dba Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/fantasy/Bells_Nine.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/fantasy/Bells_OverKnave.webp b/Faraon.Client/wwwroot/assets/cards/fantasy/Bells_OverKnave.webp new file mode 100644 index 0000000..5e783c1 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/fantasy/Bells_OverKnave.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/fantasy/Bells_Seven.webp b/Faraon.Client/wwwroot/assets/cards/fantasy/Bells_Seven.webp new file mode 100644 index 0000000..50870e9 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/fantasy/Bells_Seven.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/fantasy/Bells_Ten.webp b/Faraon.Client/wwwroot/assets/cards/fantasy/Bells_Ten.webp new file mode 100644 index 0000000..ddccfa4 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/fantasy/Bells_Ten.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/fantasy/Bells_UnderKnave.webp b/Faraon.Client/wwwroot/assets/cards/fantasy/Bells_UnderKnave.webp new file mode 100644 index 0000000..49b2299 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/fantasy/Bells_UnderKnave.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/fantasy/Card_Back.webp b/Faraon.Client/wwwroot/assets/cards/fantasy/Card_Back.webp new file mode 100644 index 0000000..c8e4fe4 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/fantasy/Card_Back.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/fantasy/Hearts_Ace.webp b/Faraon.Client/wwwroot/assets/cards/fantasy/Hearts_Ace.webp new file mode 100644 index 0000000..1065f69 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/fantasy/Hearts_Ace.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/fantasy/Hearts_Eight.webp b/Faraon.Client/wwwroot/assets/cards/fantasy/Hearts_Eight.webp new file mode 100644 index 0000000..70a3259 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/fantasy/Hearts_Eight.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/fantasy/Hearts_King.webp b/Faraon.Client/wwwroot/assets/cards/fantasy/Hearts_King.webp new file mode 100644 index 0000000..cbd050c Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/fantasy/Hearts_King.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/fantasy/Hearts_Nine.webp b/Faraon.Client/wwwroot/assets/cards/fantasy/Hearts_Nine.webp new file mode 100644 index 0000000..2d9be81 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/fantasy/Hearts_Nine.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/fantasy/Hearts_OverKnave.webp b/Faraon.Client/wwwroot/assets/cards/fantasy/Hearts_OverKnave.webp new file mode 100644 index 0000000..2f6ed3b Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/fantasy/Hearts_OverKnave.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/fantasy/Hearts_Seven.webp b/Faraon.Client/wwwroot/assets/cards/fantasy/Hearts_Seven.webp new file mode 100644 index 0000000..af2889e Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/fantasy/Hearts_Seven.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/fantasy/Hearts_Ten.webp b/Faraon.Client/wwwroot/assets/cards/fantasy/Hearts_Ten.webp new file mode 100644 index 0000000..23072c6 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/fantasy/Hearts_Ten.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/fantasy/Hearts_UnderKnave.webp b/Faraon.Client/wwwroot/assets/cards/fantasy/Hearts_UnderKnave.webp new file mode 100644 index 0000000..547e259 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/fantasy/Hearts_UnderKnave.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/fantasy/Leaves_Ace.webp b/Faraon.Client/wwwroot/assets/cards/fantasy/Leaves_Ace.webp new file mode 100644 index 0000000..cc5903e Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/fantasy/Leaves_Ace.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/fantasy/Leaves_Eight.webp b/Faraon.Client/wwwroot/assets/cards/fantasy/Leaves_Eight.webp new file mode 100644 index 0000000..912345c Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/fantasy/Leaves_Eight.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/fantasy/Leaves_King.webp b/Faraon.Client/wwwroot/assets/cards/fantasy/Leaves_King.webp new file mode 100644 index 0000000..cd2ce66 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/fantasy/Leaves_King.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/fantasy/Leaves_Nine.webp b/Faraon.Client/wwwroot/assets/cards/fantasy/Leaves_Nine.webp new file mode 100644 index 0000000..fdf8335 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/fantasy/Leaves_Nine.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/fantasy/Leaves_OverKnave.webp b/Faraon.Client/wwwroot/assets/cards/fantasy/Leaves_OverKnave.webp new file mode 100644 index 0000000..fa2a194 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/fantasy/Leaves_OverKnave.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/fantasy/Leaves_Seven.webp b/Faraon.Client/wwwroot/assets/cards/fantasy/Leaves_Seven.webp new file mode 100644 index 0000000..1461aa4 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/fantasy/Leaves_Seven.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/fantasy/Leaves_Ten.webp b/Faraon.Client/wwwroot/assets/cards/fantasy/Leaves_Ten.webp new file mode 100644 index 0000000..fd86fa6 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/fantasy/Leaves_Ten.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/fantasy/Leaves_UnderKnave.webp b/Faraon.Client/wwwroot/assets/cards/fantasy/Leaves_UnderKnave.webp new file mode 100644 index 0000000..9ad2860 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/fantasy/Leaves_UnderKnave.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/janosik/Acorns_Ace.webp b/Faraon.Client/wwwroot/assets/cards/janosik/Acorns_Ace.webp new file mode 100644 index 0000000..225febf Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/janosik/Acorns_Ace.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/janosik/Acorns_Eight.webp b/Faraon.Client/wwwroot/assets/cards/janosik/Acorns_Eight.webp new file mode 100644 index 0000000..fa9d80b Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/janosik/Acorns_Eight.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/janosik/Acorns_King.webp b/Faraon.Client/wwwroot/assets/cards/janosik/Acorns_King.webp new file mode 100644 index 0000000..25c9227 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/janosik/Acorns_King.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/janosik/Acorns_Nine.webp b/Faraon.Client/wwwroot/assets/cards/janosik/Acorns_Nine.webp new file mode 100644 index 0000000..ec1141b Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/janosik/Acorns_Nine.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/janosik/Acorns_OverKnave.webp b/Faraon.Client/wwwroot/assets/cards/janosik/Acorns_OverKnave.webp new file mode 100644 index 0000000..fd3346a Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/janosik/Acorns_OverKnave.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/janosik/Acorns_Seven.webp b/Faraon.Client/wwwroot/assets/cards/janosik/Acorns_Seven.webp new file mode 100644 index 0000000..9768b4b Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/janosik/Acorns_Seven.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/janosik/Acorns_Ten.webp b/Faraon.Client/wwwroot/assets/cards/janosik/Acorns_Ten.webp new file mode 100644 index 0000000..475343c Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/janosik/Acorns_Ten.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/janosik/Acorns_UnderKnave.webp b/Faraon.Client/wwwroot/assets/cards/janosik/Acorns_UnderKnave.webp new file mode 100644 index 0000000..8ab78c1 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/janosik/Acorns_UnderKnave.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/janosik/Bells_Ace.webp b/Faraon.Client/wwwroot/assets/cards/janosik/Bells_Ace.webp new file mode 100644 index 0000000..b26940c Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/janosik/Bells_Ace.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/janosik/Bells_Eight.webp b/Faraon.Client/wwwroot/assets/cards/janosik/Bells_Eight.webp new file mode 100644 index 0000000..b386a20 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/janosik/Bells_Eight.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/janosik/Bells_King.webp b/Faraon.Client/wwwroot/assets/cards/janosik/Bells_King.webp new file mode 100644 index 0000000..9f4195c Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/janosik/Bells_King.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/janosik/Bells_Nine.webp b/Faraon.Client/wwwroot/assets/cards/janosik/Bells_Nine.webp new file mode 100644 index 0000000..db3fbe5 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/janosik/Bells_Nine.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/janosik/Bells_OverKnave.webp b/Faraon.Client/wwwroot/assets/cards/janosik/Bells_OverKnave.webp new file mode 100644 index 0000000..d12afd0 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/janosik/Bells_OverKnave.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/janosik/Bells_Seven.webp b/Faraon.Client/wwwroot/assets/cards/janosik/Bells_Seven.webp new file mode 100644 index 0000000..8dbe855 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/janosik/Bells_Seven.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/janosik/Bells_Ten.webp b/Faraon.Client/wwwroot/assets/cards/janosik/Bells_Ten.webp new file mode 100644 index 0000000..352ea29 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/janosik/Bells_Ten.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/janosik/Bells_UnderKnave.webp b/Faraon.Client/wwwroot/assets/cards/janosik/Bells_UnderKnave.webp new file mode 100644 index 0000000..7219129 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/janosik/Bells_UnderKnave.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/janosik/Card_Back.webp b/Faraon.Client/wwwroot/assets/cards/janosik/Card_Back.webp new file mode 100644 index 0000000..9b83810 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/janosik/Card_Back.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/janosik/Hearts_Ace.webp b/Faraon.Client/wwwroot/assets/cards/janosik/Hearts_Ace.webp new file mode 100644 index 0000000..885d9ab Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/janosik/Hearts_Ace.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/janosik/Hearts_Eight.webp b/Faraon.Client/wwwroot/assets/cards/janosik/Hearts_Eight.webp new file mode 100644 index 0000000..86dfa4d Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/janosik/Hearts_Eight.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/janosik/Hearts_King.webp b/Faraon.Client/wwwroot/assets/cards/janosik/Hearts_King.webp new file mode 100644 index 0000000..b02f338 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/janosik/Hearts_King.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/janosik/Hearts_Nine.webp b/Faraon.Client/wwwroot/assets/cards/janosik/Hearts_Nine.webp new file mode 100644 index 0000000..edcc63a Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/janosik/Hearts_Nine.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/janosik/Hearts_OverKnave.webp b/Faraon.Client/wwwroot/assets/cards/janosik/Hearts_OverKnave.webp new file mode 100644 index 0000000..60f5831 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/janosik/Hearts_OverKnave.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/janosik/Hearts_Seven.webp b/Faraon.Client/wwwroot/assets/cards/janosik/Hearts_Seven.webp new file mode 100644 index 0000000..01253c8 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/janosik/Hearts_Seven.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/janosik/Hearts_Ten.webp b/Faraon.Client/wwwroot/assets/cards/janosik/Hearts_Ten.webp new file mode 100644 index 0000000..fc8733d Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/janosik/Hearts_Ten.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/janosik/Hearts_UnderKnave.webp b/Faraon.Client/wwwroot/assets/cards/janosik/Hearts_UnderKnave.webp new file mode 100644 index 0000000..e097724 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/janosik/Hearts_UnderKnave.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/janosik/Leaves_Ace.webp b/Faraon.Client/wwwroot/assets/cards/janosik/Leaves_Ace.webp new file mode 100644 index 0000000..42e2031 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/janosik/Leaves_Ace.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/janosik/Leaves_Eight.webp b/Faraon.Client/wwwroot/assets/cards/janosik/Leaves_Eight.webp new file mode 100644 index 0000000..73cf351 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/janosik/Leaves_Eight.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/janosik/Leaves_King.webp b/Faraon.Client/wwwroot/assets/cards/janosik/Leaves_King.webp new file mode 100644 index 0000000..83bc839 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/janosik/Leaves_King.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/janosik/Leaves_Nine.webp b/Faraon.Client/wwwroot/assets/cards/janosik/Leaves_Nine.webp new file mode 100644 index 0000000..128fe6f Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/janosik/Leaves_Nine.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/janosik/Leaves_OverKnave.webp b/Faraon.Client/wwwroot/assets/cards/janosik/Leaves_OverKnave.webp new file mode 100644 index 0000000..e64ebc6 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/janosik/Leaves_OverKnave.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/janosik/Leaves_Seven.webp b/Faraon.Client/wwwroot/assets/cards/janosik/Leaves_Seven.webp new file mode 100644 index 0000000..9e96c46 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/janosik/Leaves_Seven.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/janosik/Leaves_Ten.webp b/Faraon.Client/wwwroot/assets/cards/janosik/Leaves_Ten.webp new file mode 100644 index 0000000..8b73c93 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/janosik/Leaves_Ten.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/janosik/Leaves_UnderKnave.webp b/Faraon.Client/wwwroot/assets/cards/janosik/Leaves_UnderKnave.webp new file mode 100644 index 0000000..53c2783 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/janosik/Leaves_UnderKnave.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/pets/Acorns_Ace.webp b/Faraon.Client/wwwroot/assets/cards/pets/Acorns_Ace.webp new file mode 100644 index 0000000..81b54ff Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/pets/Acorns_Ace.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/pets/Acorns_Eight.webp b/Faraon.Client/wwwroot/assets/cards/pets/Acorns_Eight.webp new file mode 100644 index 0000000..587eeda Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/pets/Acorns_Eight.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/pets/Acorns_King.webp b/Faraon.Client/wwwroot/assets/cards/pets/Acorns_King.webp new file mode 100644 index 0000000..948d8c3 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/pets/Acorns_King.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/pets/Acorns_Nine.webp b/Faraon.Client/wwwroot/assets/cards/pets/Acorns_Nine.webp new file mode 100644 index 0000000..675515e Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/pets/Acorns_Nine.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/pets/Acorns_OverKnave.webp b/Faraon.Client/wwwroot/assets/cards/pets/Acorns_OverKnave.webp new file mode 100644 index 0000000..b168329 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/pets/Acorns_OverKnave.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/pets/Acorns_Seven.webp b/Faraon.Client/wwwroot/assets/cards/pets/Acorns_Seven.webp new file mode 100644 index 0000000..2b44816 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/pets/Acorns_Seven.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/pets/Acorns_Ten.webp b/Faraon.Client/wwwroot/assets/cards/pets/Acorns_Ten.webp new file mode 100644 index 0000000..1614788 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/pets/Acorns_Ten.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/pets/Acorns_UnderKnave.webp b/Faraon.Client/wwwroot/assets/cards/pets/Acorns_UnderKnave.webp new file mode 100644 index 0000000..2e05044 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/pets/Acorns_UnderKnave.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/pets/Bells_Ace.webp b/Faraon.Client/wwwroot/assets/cards/pets/Bells_Ace.webp new file mode 100644 index 0000000..2f10606 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/pets/Bells_Ace.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/pets/Bells_Eight.webp b/Faraon.Client/wwwroot/assets/cards/pets/Bells_Eight.webp new file mode 100644 index 0000000..d09a70a Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/pets/Bells_Eight.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/pets/Bells_King.webp b/Faraon.Client/wwwroot/assets/cards/pets/Bells_King.webp new file mode 100644 index 0000000..d1ae5c3 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/pets/Bells_King.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/pets/Bells_Nine.webp b/Faraon.Client/wwwroot/assets/cards/pets/Bells_Nine.webp new file mode 100644 index 0000000..2d86564 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/pets/Bells_Nine.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/pets/Bells_OverKnave.webp b/Faraon.Client/wwwroot/assets/cards/pets/Bells_OverKnave.webp new file mode 100644 index 0000000..c92cba3 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/pets/Bells_OverKnave.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/pets/Bells_Seven.webp b/Faraon.Client/wwwroot/assets/cards/pets/Bells_Seven.webp new file mode 100644 index 0000000..10666b2 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/pets/Bells_Seven.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/pets/Bells_Ten.webp b/Faraon.Client/wwwroot/assets/cards/pets/Bells_Ten.webp new file mode 100644 index 0000000..2900785 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/pets/Bells_Ten.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/pets/Bells_UnderKnave.webp b/Faraon.Client/wwwroot/assets/cards/pets/Bells_UnderKnave.webp new file mode 100644 index 0000000..d09c98b Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/pets/Bells_UnderKnave.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/pets/Card_Back.webp b/Faraon.Client/wwwroot/assets/cards/pets/Card_Back.webp new file mode 100644 index 0000000..70816dc Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/pets/Card_Back.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/pets/Hearts_Ace.webp b/Faraon.Client/wwwroot/assets/cards/pets/Hearts_Ace.webp new file mode 100644 index 0000000..e81d7c2 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/pets/Hearts_Ace.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/pets/Hearts_Eight.webp b/Faraon.Client/wwwroot/assets/cards/pets/Hearts_Eight.webp new file mode 100644 index 0000000..7a0e96e Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/pets/Hearts_Eight.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/pets/Hearts_King.webp b/Faraon.Client/wwwroot/assets/cards/pets/Hearts_King.webp new file mode 100644 index 0000000..beca224 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/pets/Hearts_King.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/pets/Hearts_Nine.webp b/Faraon.Client/wwwroot/assets/cards/pets/Hearts_Nine.webp new file mode 100644 index 0000000..b452b5d Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/pets/Hearts_Nine.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/pets/Hearts_OverKnave.webp b/Faraon.Client/wwwroot/assets/cards/pets/Hearts_OverKnave.webp new file mode 100644 index 0000000..65d9c55 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/pets/Hearts_OverKnave.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/pets/Hearts_Seven.webp b/Faraon.Client/wwwroot/assets/cards/pets/Hearts_Seven.webp new file mode 100644 index 0000000..0ac421c Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/pets/Hearts_Seven.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/pets/Hearts_Ten.webp b/Faraon.Client/wwwroot/assets/cards/pets/Hearts_Ten.webp new file mode 100644 index 0000000..92936e2 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/pets/Hearts_Ten.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/pets/Hearts_UnderKnave.webp b/Faraon.Client/wwwroot/assets/cards/pets/Hearts_UnderKnave.webp new file mode 100644 index 0000000..6713c15 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/pets/Hearts_UnderKnave.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/pets/Leaves_Ace.webp b/Faraon.Client/wwwroot/assets/cards/pets/Leaves_Ace.webp new file mode 100644 index 0000000..f76e9e3 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/pets/Leaves_Ace.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/pets/Leaves_Eight.webp b/Faraon.Client/wwwroot/assets/cards/pets/Leaves_Eight.webp new file mode 100644 index 0000000..430f920 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/pets/Leaves_Eight.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/pets/Leaves_King.webp b/Faraon.Client/wwwroot/assets/cards/pets/Leaves_King.webp new file mode 100644 index 0000000..582792c Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/pets/Leaves_King.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/pets/Leaves_Nine.webp b/Faraon.Client/wwwroot/assets/cards/pets/Leaves_Nine.webp new file mode 100644 index 0000000..2065a5f Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/pets/Leaves_Nine.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/pets/Leaves_OverKnave.webp b/Faraon.Client/wwwroot/assets/cards/pets/Leaves_OverKnave.webp new file mode 100644 index 0000000..370a00b Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/pets/Leaves_OverKnave.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/pets/Leaves_Seven.webp b/Faraon.Client/wwwroot/assets/cards/pets/Leaves_Seven.webp new file mode 100644 index 0000000..fa9ecb1 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/pets/Leaves_Seven.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/pets/Leaves_Ten.webp b/Faraon.Client/wwwroot/assets/cards/pets/Leaves_Ten.webp new file mode 100644 index 0000000..cc13c75 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/pets/Leaves_Ten.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/pets/Leaves_UnderKnave.webp b/Faraon.Client/wwwroot/assets/cards/pets/Leaves_UnderKnave.webp new file mode 100644 index 0000000..8df1451 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/pets/Leaves_UnderKnave.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/pixel/Acorns_Ace.webp b/Faraon.Client/wwwroot/assets/cards/pixel/Acorns_Ace.webp new file mode 100644 index 0000000..3a6b4ed Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/pixel/Acorns_Ace.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/pixel/Acorns_Eight.webp b/Faraon.Client/wwwroot/assets/cards/pixel/Acorns_Eight.webp new file mode 100644 index 0000000..269b3c2 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/pixel/Acorns_Eight.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/pixel/Acorns_King.webp b/Faraon.Client/wwwroot/assets/cards/pixel/Acorns_King.webp new file mode 100644 index 0000000..3ec10a9 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/pixel/Acorns_King.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/pixel/Acorns_Nine.webp b/Faraon.Client/wwwroot/assets/cards/pixel/Acorns_Nine.webp new file mode 100644 index 0000000..11abae8 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/pixel/Acorns_Nine.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/pixel/Acorns_OverKnave.webp b/Faraon.Client/wwwroot/assets/cards/pixel/Acorns_OverKnave.webp new file mode 100644 index 0000000..b9d3e3f Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/pixel/Acorns_OverKnave.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/pixel/Acorns_Seven.webp b/Faraon.Client/wwwroot/assets/cards/pixel/Acorns_Seven.webp new file mode 100644 index 0000000..35a86a5 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/pixel/Acorns_Seven.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/pixel/Acorns_Ten.webp b/Faraon.Client/wwwroot/assets/cards/pixel/Acorns_Ten.webp new file mode 100644 index 0000000..d3595ce Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/pixel/Acorns_Ten.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/pixel/Acorns_UnderKnave.webp b/Faraon.Client/wwwroot/assets/cards/pixel/Acorns_UnderKnave.webp new file mode 100644 index 0000000..2d48bd9 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/pixel/Acorns_UnderKnave.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/pixel/Bells_Ace.webp b/Faraon.Client/wwwroot/assets/cards/pixel/Bells_Ace.webp new file mode 100644 index 0000000..a0bf523 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/pixel/Bells_Ace.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/pixel/Bells_Eight.webp b/Faraon.Client/wwwroot/assets/cards/pixel/Bells_Eight.webp new file mode 100644 index 0000000..b0ebd68 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/pixel/Bells_Eight.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/pixel/Bells_King.webp b/Faraon.Client/wwwroot/assets/cards/pixel/Bells_King.webp new file mode 100644 index 0000000..1fe1502 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/pixel/Bells_King.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/pixel/Bells_Nine.webp b/Faraon.Client/wwwroot/assets/cards/pixel/Bells_Nine.webp new file mode 100644 index 0000000..b880634 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/pixel/Bells_Nine.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/pixel/Bells_OverKnave.webp b/Faraon.Client/wwwroot/assets/cards/pixel/Bells_OverKnave.webp new file mode 100644 index 0000000..349b0a8 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/pixel/Bells_OverKnave.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/pixel/Bells_Seven.webp b/Faraon.Client/wwwroot/assets/cards/pixel/Bells_Seven.webp new file mode 100644 index 0000000..8808778 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/pixel/Bells_Seven.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/pixel/Bells_Ten.webp b/Faraon.Client/wwwroot/assets/cards/pixel/Bells_Ten.webp new file mode 100644 index 0000000..84c6221 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/pixel/Bells_Ten.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/pixel/Bells_UnderKnave.webp b/Faraon.Client/wwwroot/assets/cards/pixel/Bells_UnderKnave.webp new file mode 100644 index 0000000..61908a4 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/pixel/Bells_UnderKnave.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/pixel/Card_Back.webp b/Faraon.Client/wwwroot/assets/cards/pixel/Card_Back.webp new file mode 100644 index 0000000..5d58dea Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/pixel/Card_Back.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/pixel/Hearts_Ace.webp b/Faraon.Client/wwwroot/assets/cards/pixel/Hearts_Ace.webp new file mode 100644 index 0000000..9fc786a Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/pixel/Hearts_Ace.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/pixel/Hearts_Eight.webp b/Faraon.Client/wwwroot/assets/cards/pixel/Hearts_Eight.webp new file mode 100644 index 0000000..0f8569a Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/pixel/Hearts_Eight.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/pixel/Hearts_King.webp b/Faraon.Client/wwwroot/assets/cards/pixel/Hearts_King.webp new file mode 100644 index 0000000..709bd09 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/pixel/Hearts_King.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/pixel/Hearts_Nine.webp b/Faraon.Client/wwwroot/assets/cards/pixel/Hearts_Nine.webp new file mode 100644 index 0000000..d6824cd Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/pixel/Hearts_Nine.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/pixel/Hearts_OverKnave.webp b/Faraon.Client/wwwroot/assets/cards/pixel/Hearts_OverKnave.webp new file mode 100644 index 0000000..687e0a6 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/pixel/Hearts_OverKnave.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/pixel/Hearts_Seven.webp b/Faraon.Client/wwwroot/assets/cards/pixel/Hearts_Seven.webp new file mode 100644 index 0000000..98bfc18 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/pixel/Hearts_Seven.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/pixel/Hearts_Ten.webp b/Faraon.Client/wwwroot/assets/cards/pixel/Hearts_Ten.webp new file mode 100644 index 0000000..eb84f13 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/pixel/Hearts_Ten.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/pixel/Hearts_UnderKnave.webp b/Faraon.Client/wwwroot/assets/cards/pixel/Hearts_UnderKnave.webp new file mode 100644 index 0000000..78abcd9 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/pixel/Hearts_UnderKnave.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/pixel/Leaves_Ace.webp b/Faraon.Client/wwwroot/assets/cards/pixel/Leaves_Ace.webp new file mode 100644 index 0000000..0799b9f Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/pixel/Leaves_Ace.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/pixel/Leaves_Eight.webp b/Faraon.Client/wwwroot/assets/cards/pixel/Leaves_Eight.webp new file mode 100644 index 0000000..7e6b8b5 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/pixel/Leaves_Eight.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/pixel/Leaves_King.webp b/Faraon.Client/wwwroot/assets/cards/pixel/Leaves_King.webp new file mode 100644 index 0000000..f5be8c3 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/pixel/Leaves_King.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/pixel/Leaves_Nine.webp b/Faraon.Client/wwwroot/assets/cards/pixel/Leaves_Nine.webp new file mode 100644 index 0000000..8295400 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/pixel/Leaves_Nine.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/pixel/Leaves_OverKnave.webp b/Faraon.Client/wwwroot/assets/cards/pixel/Leaves_OverKnave.webp new file mode 100644 index 0000000..4b3f3cd Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/pixel/Leaves_OverKnave.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/pixel/Leaves_Seven.webp b/Faraon.Client/wwwroot/assets/cards/pixel/Leaves_Seven.webp new file mode 100644 index 0000000..caa1395 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/pixel/Leaves_Seven.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/pixel/Leaves_Ten.webp b/Faraon.Client/wwwroot/assets/cards/pixel/Leaves_Ten.webp new file mode 100644 index 0000000..d32619e Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/pixel/Leaves_Ten.webp differ diff --git a/Faraon.Client/wwwroot/assets/cards/pixel/Leaves_UnderKnave.webp b/Faraon.Client/wwwroot/assets/cards/pixel/Leaves_UnderKnave.webp new file mode 100644 index 0000000..c91aa91 Binary files /dev/null and b/Faraon.Client/wwwroot/assets/cards/pixel/Leaves_UnderKnave.webp differ diff --git a/Faraon.Client/wwwroot/css/app.css b/Faraon.Client/wwwroot/css/app.css index 3ac0fc3..f4ec8e8 100644 --- a/Faraon.Client/wwwroot/css/app.css +++ b/Faraon.Client/wwwroot/css/app.css @@ -6,24 +6,37 @@ --gold-glow: #ffd700; --flame-red: #ff4500; --ice-blue: #00e5ff; - --card-width: 90px; - --card-height: 135px; - --card-radius: 8px; + + /* Dynamické škálovanie kariet podľa veľkosti a výšky obrazovky */ + --card-width: clamp(82px, 8.5vw, 115px); + --card-height: calc(var(--card-width) * 1.5); + --card-radius: clamp(8px, 0.8vw, 14px); + --fan-card-step: clamp(26px, 2.8vw, 44px); } -@media (min-width: 768px) { +@media (min-width: 768px) and (min-height: 600px) { :root { - --card-width: 110px; - --card-height: 165px; - --card-radius: 10px; + --card-width: clamp(105px, 9vw, 135px); + --card-height: calc(var(--card-width) * 1.5); + --fan-card-step: clamp(34px, 3.2vw, 50px); } } -@media (min-width: 1200px) { +/* Fullscreen a štandardné monitory 1080p */ +@media (min-width: 1200px) and (min-height: 700px) { :root { - --card-width: 125px; - --card-height: 188px; - --card-radius: 12px; + --card-width: clamp(130px, 9.5vw, 165px); + --card-height: calc(var(--card-width) * 1.5); + --fan-card-step: clamp(44px, 3.8vw, 64px); + } +} + +/* Veľké Fullscreen displeje (1440p / 2K / 4K / Ultrawide) */ +@media (min-width: 1600px) and (min-height: 850px) { + :root { + --card-width: clamp(160px, 10.5vw, 215px); + --card-height: calc(var(--card-width) * 1.5); + --fan-card-step: clamp(54px, 4.2vw, 80px); } } @@ -148,21 +161,21 @@ body, html { flex: 1; position: relative; display: grid; - grid-template-rows: 140px 1fr 180px; - grid-template-columns: 140px 1fr 140px; - margin: 10px 16px 16px; - border-radius: 40px; - border: 10px solid #5a3818; + grid-template-rows: clamp(90px, 14vh, 160px) 1fr calc(var(--card-height) + 55px); + grid-template-columns: clamp(100px, 13vw, 220px) 1fr clamp(100px, 13vw, 220px); + margin: 8px 14px 14px; + border-radius: clamp(24px, 3vw, 44px); + border: clamp(6px, 0.8vw, 12px) solid #5a3818; box-shadow: inset 0 0 60px rgba(0, 0, 0, 0.8), 0 0 30px rgba(0, 0, 0, 0.9); background: radial-gradient(ellipse at center, #1b5e3f 0%, #0d3824 70%, #061c12 100%); } @media (max-width: 768px) { .poker-table-surface { - grid-template-rows: 100px 1fr 160px; - grid-template-columns: 90px 1fr 90px; - margin: 6px; - border-width: 6px; + grid-template-rows: 90px 1fr calc(var(--card-height) + 45px); + grid-template-columns: 85px 1fr 85px; + margin: 4px; + border-width: 5px; } } @@ -593,7 +606,7 @@ body, html { position: relative; height: var(--card-height); width: 100%; - max-width: 600px; + max-width: clamp(650px, 75vw, 1350px); } .hand-card-slot { @@ -1152,12 +1165,12 @@ body, html { } .lobby-container { - background: rgba(10, 25, 18, 0.9); + background: rgba(10, 25, 18, 0.92); border: 2px solid rgba(245, 176, 65, 0.4); - border-radius: 28px; - padding: 30px 36px; - box-shadow: 0 0 50px rgba(0, 0, 0, 0.8), 0 0 30px rgba(245, 176, 65, 0.2); - max-width: 850px; + border-radius: 24px; + padding: 22px 28px; + box-shadow: 0 0 50px rgba(0, 0, 0, 0.85), 0 0 30px rgba(245, 176, 65, 0.2); + max-width: 1160px; width: 100%; } @@ -1277,11 +1290,23 @@ body, html { /* DECK SELECTOR */ .deck-selector-grid { display: grid; - grid-template-columns: 1fr 1fr; - gap: 14px; + grid-template-columns: repeat(4, 1fr); + gap: 12px; } -@media (max-width: 600px) { +@media (max-width: 1100px) { + .deck-selector-grid { + grid-template-columns: repeat(3, 1fr); + } +} + +@media (max-width: 768px) { + .deck-selector-grid { + grid-template-columns: repeat(2, 1fr); + } +} + +@media (max-width: 480px) { .deck-selector-grid { grid-template-columns: 1fr; } @@ -1290,31 +1315,31 @@ body, html { .deck-option-card { display: flex; align-items: center; - gap: 14px; - background: rgba(0, 0, 0, 0.35); + gap: 10px; + background: rgba(0, 0, 0, 0.4); border: 2px solid rgba(255, 255, 255, 0.15); - border-radius: 16px; - padding: 12px; + border-radius: 14px; + padding: 8px 10px; cursor: pointer; - transition: all 0.25s cubic-bezier(0.175, 0.885, 0.32, 1.275); + transition: all 0.22s cubic-bezier(0.175, 0.885, 0.32, 1.275); } .deck-option-card:hover { - background: rgba(245, 176, 65, 0.12); - border-color: rgba(245, 176, 65, 0.5); + background: rgba(245, 176, 65, 0.14); + border-color: rgba(245, 176, 65, 0.6); transform: translateY(-2px); } .deck-option-card.selected-deck { - background: rgba(245, 176, 65, 0.2); + background: rgba(245, 176, 65, 0.22); border-color: var(--gold); - box-shadow: 0 0 20px rgba(245, 176, 65, 0.4), inset 0 0 15px rgba(245, 176, 65, 0.15); + box-shadow: 0 0 16px rgba(245, 176, 65, 0.45), inset 0 0 12px rgba(245, 176, 65, 0.15); } .deck-preview-img-box { position: relative; - width: 64px; - height: 90px; + width: 48px; + height: 68px; flex-shrink: 0; } @@ -1322,11 +1347,11 @@ body, html { position: absolute; top: 0; left: 0; - width: 52px; - height: 78px; - border-radius: 6px; + width: 38px; + height: 58px; + border-radius: 5px; border: 1px solid rgba(255, 255, 255, 0.4); - box-shadow: 0 4px 10px rgba(0, 0, 0, 0.6); + box-shadow: 0 3px 8px rgba(0, 0, 0, 0.6); object-fit: cover; z-index: 2; transition: transform 0.2s ease; @@ -1336,31 +1361,35 @@ body, html { position: absolute; bottom: 0; right: 0; - width: 52px; - height: 78px; - border-radius: 6px; + width: 38px; + height: 58px; + border-radius: 5px; border: 1px solid rgba(255, 255, 255, 0.2); - box-shadow: 0 2px 6px rgba(0, 0, 0, 0.5); + box-shadow: 0 2px 5px rgba(0, 0, 0, 0.5); object-fit: cover; z-index: 1; opacity: 0.85; } .deck-option-card:hover .deck-preview-thumb { - transform: translateY(-4px) rotate(-3deg); + transform: translateY(-3px) rotate(-3deg); } .deck-info { display: flex; flex-direction: column; - gap: 3px; + gap: 2px; text-align: left; + overflow: hidden; } .deck-name { - font-size: 1rem; + font-size: 0.88rem; font-weight: 800; color: #fff; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; } .deck-option-card.selected-deck .deck-name { @@ -1368,9 +1397,13 @@ body, html { } .deck-desc { - font-size: 0.8rem; + font-size: 0.72rem; color: #94a3b8; - line-height: 1.25; + line-height: 1.2; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + overflow: hidden; } /* Canvas Particle Layer */ diff --git a/Faraon.Client/wwwroot/js/gameFx.js b/Faraon.Client/wwwroot/js/gameFx.js index 6eaf614..88c8701 100644 --- a/Faraon.Client/wwwroot/js/gameFx.js +++ b/Faraon.Client/wwwroot/js/gameFx.js @@ -351,8 +351,9 @@ window.FaraonFx = (function () { const flyingCard = document.createElement('div'); flyingCard.className = 'game-card marias-card flying-card-anim'; flyingCard.style.position = 'fixed'; - flyingCard.style.left = `${startPos.x - 55}px`; - flyingCard.style.top = `${startPos.y - 80}px`; + flyingCard.style.left = `${startPos.x}px`; + flyingCard.style.top = `${startPos.y}px`; + flyingCard.style.transform = 'translate(-50%, -50%)'; flyingCard.style.zIndex = '999'; flyingCard.style.pointerEvents = 'none'; flyingCard.style.boxShadow = '0 20px 40px rgba(0,0,0,0.8), 0 0 30px rgba(245, 176, 65, 0.9)'; @@ -372,16 +373,16 @@ window.FaraonFx = (function () { const animation = flyingCard.animate([ { - transform: 'translate3d(0, 0, 0) scale(0.85) rotate(0deg)', + transform: 'translate(-50%, -50%) translate3d(0, 0, 0) scale(0.85) rotate(0deg)', opacity: 0.9 }, { - transform: `translate3d(${dx * 0.45}px, ${dy * 0.45 - 60}px, 0) scale(1.35) rotate(${randomRotation * 0.5}deg)`, + transform: `translate(-50%, -50%) translate3d(${dx * 0.45}px, ${dy * 0.45 - 60}px, 0) scale(1.35) rotate(${randomRotation * 0.5}deg)`, opacity: 1, offset: 0.5 }, { - transform: `translate3d(${dx}px, ${dy}px, 0) scale(1) rotate(${randomRotation}deg)`, + transform: `translate(-50%, -50%) translate3d(${dx}px, ${dy}px, 0) scale(1) rotate(${randomRotation}deg)`, opacity: 1 } ], { @@ -408,8 +409,9 @@ window.FaraonFx = (function () { const flyingBack = document.createElement('div'); flyingBack.className = 'game-card marias-card flying-card-anim'; flyingBack.style.position = 'fixed'; - flyingBack.style.left = `${startPos.x - 55}px`; - flyingBack.style.top = `${startPos.y - 80}px`; + flyingBack.style.left = `${startPos.x}px`; + flyingBack.style.top = `${startPos.y}px`; + flyingBack.style.transform = 'translate(-50%, -50%)'; flyingBack.style.zIndex = '999'; flyingBack.style.pointerEvents = 'none'; flyingBack.style.boxShadow = '0 10px 25px rgba(0,0,0,0.7)'; @@ -423,9 +425,9 @@ window.FaraonFx = (function () { const dy = targetPos.y - startPos.y; const animation = flyingBack.animate([ - { transform: 'translate3d(0, 0, 0) scale(1) rotate(0deg)', opacity: 1 }, - { transform: `translate3d(${dx * 0.5}px, ${dy * 0.5 - 30}px, 0) scale(1.15) rotate(10deg)`, opacity: 1, offset: 0.5 }, - { transform: `translate3d(${dx}px, ${dy}px, 0) scale(0.6) rotate(0deg)`, opacity: 0.2 } + { transform: 'translate(-50%, -50%) translate3d(0, 0, 0) scale(1) rotate(0deg)', opacity: 1 }, + { transform: `translate(-50%, -50%) translate3d(${dx * 0.5}px, ${dy * 0.5 - 30}px, 0) scale(1.15) rotate(10deg)`, opacity: 1, offset: 0.5 }, + { transform: `translate(-50%, -50%) translate3d(${dx}px, ${dy}px, 0) scale(0.6) rotate(0deg)`, opacity: 0.2 } ], { duration: 380, easing: 'cubic-bezier(0.25, 1, 0.5, 1)' diff --git a/Faraon.Core/Engine/GameEngine.cs b/Faraon.Core/Engine/GameEngine.cs index d066a86..0b4ddcf 100644 --- a/Faraon.Core/Engine/GameEngine.cs +++ b/Faraon.Core/Engine/GameEngine.cs @@ -25,6 +25,11 @@ public class GameEngine State.Players = players; State.Rules = rules; State.IsGameOver = false; + State.IsMatchOver = false; + State.IsRoundOver = false; + State.MatchWinner = null; + State.RoundLoser = null; + State.RoundNumber = 1; State.LastFinishedPlayer = null; State.TurnCount = 1; State.PendingDrawCount = 0; @@ -35,6 +40,7 @@ public class GameEngine foreach (var player in State.Players) { + player.OlympicCardsCount = State.Rules.InitialCardCount; player.Reset(); } @@ -42,10 +48,10 @@ public class GameEngine State.DrawDeck = _deckManager.CreateShuffledDeck(); State.DiscardPile.Clear(); - // Rozdanie kariet každému hráčovi - for (int i = 0; i < State.Rules.InitialCardCount; i++) + // Rozdanie kariet každému aktívnemu hráčovi podľa jeho OlympicCardsCount + foreach (var player in State.ActiveTournamentPlayers) { - foreach (var player in State.Players) + for (int i = 0; i < player.OlympicCardsCount; i++) { if (State.DrawDeck.Count > 0) { @@ -57,7 +63,6 @@ public class GameEngine } // Otočenie prvej karty na odhadzovaciu kôpku - // Ak je prvá karta sedma, eso alebo horník, v základnej hre ju berieme ako štartovaciu bez okamžitého trestu var startCard = State.DrawDeck[0]; State.DrawDeck.RemoveAt(0); State.DiscardPile.Add(startCard); @@ -551,27 +556,131 @@ public class GameEngine int remaining = State.ActivePlayersCount; if (remaining <= 1) { - State.IsGameOver = true; - State.TurnState = TurnState.GameOver; - - // Zostávajúcemu hráčovi priradíme posledné miesto - var lastPlayer = State.Players.FirstOrDefault(p => !p.HasFinished); + // Zostávajúci hráč, ktorému ostali karty (porazený tohto kola) + var lastPlayer = State.ActiveTournamentPlayers.FirstOrDefault(p => !p.HasFinished); if (lastPlayer != null) { - lastPlayer.FinishedPosition = State.Players.Count; + lastPlayer.FinishedPosition = State.ActiveTournamentPlayers.Count; + State.RoundLoser = lastPlayer; } - EmitEvent(new GameEvent( - GameEventType.GameOver, - null, - Message: "Koniec hry! Všetky pozície sú určené." - )); + if (State.Rules.OlympicMode) + { + if (lastPlayer != null) + { + lastPlayer.OlympicCardsCount--; + if (lastPlayer.IsEliminated) + { + EmitEvent(new GameEvent( + GameEventType.PlayerEliminated, + lastPlayer, + Message: $"☠️ {lastPlayer.Name} stratil všetky karty a vypadáva z Olympijského turnaja!" + )); + } + } + + var remainingTournamentPlayers = State.ActiveTournamentPlayers; + if (remainingTournamentPlayers.Count <= 1) + { + // Koniec turnaja! Zostal iba 1 víťaz + State.IsGameOver = true; + State.IsMatchOver = true; + State.MatchWinner = remainingTournamentPlayers.FirstOrDefault() ?? lastPlayer; + State.TurnState = TurnState.GameOver; + + EmitEvent(new GameEvent( + GameEventType.MatchWon, + State.MatchWinner, + Message: $"🥇 {State.MatchWinner?.Name} sa stal celkovým OLYMPIJSKÝM ŠAMPIÓNOM!" + )); + } + else + { + // Koniec jedného kola, nasleduje ďalšie + State.IsRoundOver = true; + State.TurnState = TurnState.RoundOver; + + EmitEvent(new GameEvent( + GameEventType.RoundOver, + lastPlayer, + ExtraData: State.RoundNumber, + Message: $"🏅 Kolo #{State.RoundNumber} sa skončilo! {lastPlayer?.Name} bude mať v ďalšom kole {lastPlayer?.OlympicCardsCount} kariet." + )); + } + } + else + { + // Bežná jednoduchá hra + State.IsGameOver = true; + State.TurnState = TurnState.GameOver; + + EmitEvent(new GameEvent( + GameEventType.GameOver, + null, + Message: "Koniec hry! Všetky pozície sú určené." + )); + } } } + public void StartNextRound() + { + if (!State.Rules.OlympicMode || State.IsMatchOver) return; + + State.RoundNumber++; + State.IsRoundOver = false; + State.IsGameOver = false; + State.RoundLoser = null; + State.TurnState = TurnState.Playing; + State.TurnCount = 1; + State.PendingDrawCount = 0; + State.PendingSkip = false; + State.ActiveSuit = null; + State.PendingHornikPlayer = null; + + foreach (var p in State.Players) + { + p.Reset(); + } + + // Vytvorenie a zamiešanie nového balíčka + State.DrawDeck = _deckManager.CreateShuffledDeck(); + State.DiscardPile.Clear(); + + // Rozdanie kariet len aktívnym (nevyradeným) hráčom podľa ich OlympicCardsCount + foreach (var player in State.ActiveTournamentPlayers) + { + for (int i = 0; i < player.OlympicCardsCount; i++) + { + if (State.DrawDeck.Count > 0) + { + var card = State.DrawDeck[0]; + State.DrawDeck.RemoveAt(0); + player.Hand.Add(card); + } + } + } + + // Otočenie prvej karty na odhadzovaciu kôpku + var startCard = State.DrawDeck[0]; + State.DrawDeck.RemoveAt(0); + State.DiscardPile.Add(startCard); + + // Nastavíme prvého hráča na prvého aktívneho + var firstActiveIndex = State.Players.FindIndex(p => !p.IsEliminated); + State.CurrentPlayerIndex = firstActiveIndex >= 0 ? firstActiveIndex : 0; + + EmitEvent(new GameEvent( + GameEventType.GameStarted, + State.CurrentPlayer, + Card: startCard, + Message: $"🏅 Začalo sa Kolo #{State.RoundNumber} Olympijského Faraóna!" + )); + } + private void AdvanceTurn() { - if (State.IsGameOver) return; + if (State.IsGameOver || State.IsRoundOver) return; int attempts = 0; do @@ -579,12 +688,12 @@ public class GameEngine State.CurrentPlayerIndex = (State.CurrentPlayerIndex + 1) % State.Players.Count; attempts++; } - while (State.CurrentPlayer.HasFinished && attempts <= State.Players.Count); + while ((State.CurrentPlayer.HasFinished || State.CurrentPlayer.IsEliminated) && attempts <= State.Players.Count * 2); State.TurnCount++; // Ak hráme Pass & Play a nasledujúci hráč je človek a je zapnutá súkromná clona - if (State.Rules.PassAndPlayPrivacyScreen && State.CurrentPlayer.Type == PlayerType.Human && State.Players.Count(p => p.Type == PlayerType.Human) > 1) + if (State.Rules.PassAndPlayPrivacyScreen && State.CurrentPlayer.Type == PlayerType.Human && State.ActiveTournamentPlayers.Count(p => p.Type == PlayerType.Human) > 1) { State.TurnState = TurnState.PassScreen; } diff --git a/Faraon.Core/Models/GameEvents.cs b/Faraon.Core/Models/GameEvents.cs index 4814098..98223e0 100644 --- a/Faraon.Core/Models/GameEvents.cs +++ b/Faraon.Core/Models/GameEvents.cs @@ -13,7 +13,10 @@ public enum GameEventType PlayerRevived, PlayerFinished, GameOver, - DeckReshuffled + DeckReshuffled, + RoundOver, + PlayerEliminated, + MatchWon } public record GameEvent( diff --git a/Faraon.Core/Models/GameState.cs b/Faraon.Core/Models/GameState.cs index 7d04ddc..0443269 100644 --- a/Faraon.Core/Models/GameState.cs +++ b/Faraon.Core/Models/GameState.cs @@ -5,6 +5,7 @@ public enum TurnState Playing, SelectingSuit, PassScreen, + RoundOver, GameOver } @@ -25,7 +26,15 @@ public class GameState public Player? PendingHornikPlayer { get; set; } public Card? TopCard => DiscardPile.Count > 0 ? DiscardPile[^1] : null; + // Olympijský režim (Turnaj) + public int RoundNumber { get; set; } = 1; + public bool IsRoundOver { get; set; } = false; + public Player? RoundLoser { get; set; } + public Player? MatchWinner { get; set; } + public bool IsMatchOver { get; set; } = false; + public Player CurrentPlayer => Players.Count > 0 ? Players[CurrentPlayerIndex % Players.Count] : new Player(); - public int ActivePlayersCount => Players.Count(p => !p.HasFinished); + public int ActivePlayersCount => Players.Where(p => !p.IsEliminated).Count(p => !p.HasFinished); + public List ActiveTournamentPlayers => Players.Where(p => !p.IsEliminated).ToList(); } diff --git a/Faraon.Core/Models/Player.cs b/Faraon.Core/Models/Player.cs index 7593e8c..002b83c 100644 --- a/Faraon.Core/Models/Player.cs +++ b/Faraon.Core/Models/Player.cs @@ -27,6 +27,16 @@ public class Player public bool IsSkipped { get; set; } + /// + /// Počet kariet do ruky v Olympijskom režime (kto prehrá kolo, klesá o 1). + /// + public int OlympicCardsCount { get; set; } = 5; + + /// + /// Či je hráč vyradený z Olympijského turnaja. + /// + public bool IsEliminated => OlympicCardsCount <= 0; + public Player() { } public Player(string name, PlayerType type, string avatar = "👤", AIDifficulty difficulty = AIDifficulty.Medium) diff --git a/Faraon.Core/Models/RuleOptions.cs b/Faraon.Core/Models/RuleOptions.cs index c45feba..5627020 100644 --- a/Faraon.Core/Models/RuleOptions.cs +++ b/Faraon.Core/Models/RuleOptions.cs @@ -41,4 +41,10 @@ public class RuleOptions /// Zvolený vizuálny štýl balíčka ("original" alebo "spongebob"). /// public string SelectedDeck { get; set; } = "original"; + + /// + /// Olympijský režim: Vyraďovací turnaj. Kto prehrá kolo, má v ďalšom o 1 kartu menej. + /// Hrá sa až kým nezostane iba jeden celkový víťaz. + /// + public bool OlympicMode { get; set; } = false; } diff --git a/Faraon.Tests/GameEngineTests.cs b/Faraon.Tests/GameEngineTests.cs index ba2acf0..b02928a 100644 --- a/Faraon.Tests/GameEngineTests.cs +++ b/Faraon.Tests/GameEngineTests.cs @@ -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 { 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 { 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); + } }