@namespace Faraon.Client.Components @using Faraon.Core.AI
FARAÓN Logo

FARAÓN

Tradičná mariášová kartová hra s moderným nábojom
POČET HRÁČOV:
@for (int count = 2; count <= 4; count++) { var c = count; }
@for (int i = 0; i < SelectedPlayerCount; i++) { var idx = i; var p = PlayerConfigs[idx];
@p.Avatar
@if (p.Type == PlayerType.AI) { }
}
⚙️ PRAVIDLÁ A NASTAVENIA HRY @if (!ShowRules) { @(Rules.InitialCardCount) kariet • Sedmy (+3) • @(Rules.SpeedLevel)x Rýchlosť }
@(ShowRules ? "Zbaliť" : "Rozbaliť") @(ShowRules ? "▲" : "▼")
@if (ShowRules) {
❤️
Červená sedma (Oživenie / Resurrect)
Spôsob vrátenia skončeného hráča späť do hry
🍃
Zelený dolník (Rušenie sediem)
Zelený dolník zruší trest zo sedmy & pravidlá vykladania
Počiatočný počet kariet:
Rýchlosť hry:
}
🎨 VIZUÁLNY ŠTÝL BALÍČKA
@(ShowDeckSelector ? "Zavrieť galériu" : "Zmeniť balíček") @(ShowDeckSelector ? "▲" : "▼")
@CurrentDeck.Name Rub
@CurrentDeck.Name Vybraný
@CurrentDeck.Desc
@(ShowDeckSelector ? "▲ Skryť" : "🎨 Zmeniť štýl ▾")
@if (ShowDeckSelector) {
@foreach (var d in AvailableDecks) {
@d.Name Rub
@d.Name
@d.Desc
}
}
@code { [Parameter] public EventCallback<(List, RuleOptions)> OnStartGame { get; set; } private int SelectedPlayerCount = 4; private RuleOptions Rules = new(); private bool ShowRules = false; private bool ShowDeckSelector = false; private record DeckInfo(string Id, string Name, string Desc, string Thumb, string Back); private readonly DeckInfo[] AvailableDecks = new[] { new DeckInfo("original", "Tradičný Mariáš 🎴", "Autentický dvojhlavý Tell vzor (Piatnik)", "assets/cards/original/Hearts_Seven.webp", "assets/cards/original/Card_Back.webp"), new DeckInfo("janosik", "Zbojníci & Legendy 🪓", "Jánošík, Uhorčík, výšivky a tatranský folklór", "assets/cards/janosik/Hearts_King.webp", "assets/cards/janosik/Card_Back.webp"), new DeckInfo("spongebob", "SpongeBob Cartoon 🧽", "Bikini Bottom edícia (postavičky a veľké symboly)", "assets/cards/spongebob/Hearts_OverKnave.webp", "assets/cards/spongebob/Card_Back.webp"), new DeckInfo("cyberpunk", "Cyberpunk 2077 ⚡", "Neónový holografický štýl a kybernetickí hrdinovia", "assets/cards/cyberpunk/Leaves_King.webp", "assets/cards/cyberpunk/Card_Back.webp"), new DeckInfo("fantasy", "Fantasy RPG 🐉", "Dračí lordi, mágovia, runy a rytieri", "assets/cards/fantasy/Acorns_OverKnave.webp", "assets/cards/fantasy/Card_Back.webp"), new DeckInfo("egypt", "Staroveký Egypt ⚔️", "Zlatý papyrus, Tutanchamón, Anubis a pyramídy", "assets/cards/egypt/Bells_King.webp", "assets/cards/egypt/Card_Back.webp"), new DeckInfo("pets", "Kráľovské Zvieratká 🐱", "Mačičky a psíkovia v kráľovských korunkách", "assets/cards/pets/Hearts_OverKnave.webp", "assets/cards/pets/Card_Back.webp"), new DeckInfo("pixel", "Retro 8-Bit Pixel 🕹️", "Nostalgický arkádový štýl klasických hier", "assets/cards/pixel/Leaves_Seven.webp", "assets/cards/pixel/Card_Back.webp") }; private DeckInfo CurrentDeck => AvailableDecks.FirstOrDefault(d => d.Id == Rules.SelectedDeck) ?? AvailableDecks[0]; private void SelectDeck(string deckId) { Rules.SelectedDeck = deckId; } private readonly string[] Avatars = ["👑", "🧙‍♂️", "🦊", "🦁", "🐯", "🤖", "🐉", "🥷", "👸", "🤠", "🦅", "🐺"]; private List PlayerConfigs = new() { new Player("Ty (Hráč 1)", PlayerType.Human, "👑"), new Player(AIPersonality.Fox.Name, PlayerType.AI, AIPersonality.Fox.BaseAvatar, AIPersonality.Fox.Difficulty, AIPersonality.Fox.Id), new Player(AIPersonality.Queen.Name, PlayerType.AI, AIPersonality.Queen.BaseAvatar, AIPersonality.Queen.Difficulty, AIPersonality.Queen.Id), new Player(AIPersonality.Robot.Name, PlayerType.AI, AIPersonality.Robot.BaseAvatar, AIPersonality.Robot.Difficulty, AIPersonality.Robot.Id) }; private void SetPlayerCount(int count) { SelectedPlayerCount = count; } private void CycleAvatar(int index) { var currentAvatar = PlayerConfigs[index].Avatar; int nextIdx = (Array.IndexOf(Avatars, currentAvatar) + 1) % Avatars.Length; PlayerConfigs[index].Avatar = Avatars[nextIdx]; } private void SelectPersonality(int index, string? personalityId) { if (string.IsNullOrEmpty(personalityId)) return; var pers = AIPersonality.GetById(personalityId); PlayerConfigs[index].PersonalityId = pers.Id; PlayerConfigs[index].Name = pers.Name; PlayerConfigs[index].Avatar = pers.BaseAvatar; PlayerConfigs[index].Difficulty = pers.Difficulty; } private string GetDiffLabel(AIDifficulty diff) => diff switch { AIDifficulty.Easy => "Ľahký", AIDifficulty.Hard => "Veľmajster", _ => "Taktik" }; private async Task StartGame() { var activePlayers = PlayerConfigs.Take(SelectedPlayerCount).Select(p => new Player(p.Name, p.Type, p.Avatar, p.Difficulty, p.PersonalityId) ).ToList(); await OnStartGame.InvokeAsync((activePlayers, Rules)); } }