using MiniGames.Shared.Enums; using MiniGames.Shared.Models; using System; using System.Collections.Generic; using System.Linq; namespace MiniGames.Client.ViewModel { public class Uno : IUno { public StapelModel KartenAblageStapel { get; set; } = new(); public StapelModel ZiehKartenStapel { get; set; } = new(); public List Spieler { get; set; } = new(); public int NaechsterSpielerId { get; set; } public bool IstAblageStapelFarbeGleichZuLegendeKarte(string neueKarteFarbe) { bool ergebnis; _ = KartenAblageStapel.KartenModels.LastOrDefault().Farbe.Equals(neueKarteFarbe) ? ergebnis = true : ergebnis = false; return ergebnis; } public bool IstAblageStapelZahlGleichZuLegendeKarte(string handStapelKarteBezeichnung) { bool ergebnis; _ = KartenAblageStapel.KartenModels.LastOrDefault().Name.Equals(handStapelKarteBezeichnung) ? ergebnis = true : ergebnis = false; return ergebnis; } public void ZiehEineKarte(int id) { int _id = id; int index = Spieler.FindIndex(x => x.SpielerModel.Id == _id); Spieler[index].KartenModels.Add(ZiehKartenStapel.KartenModels.FirstOrDefault()); ZiehKartenStapel.KartenModels.RemoveAt(0); } public void KarteAufStapelLegen(int id, KartenModel zuLegendeKarte) { int _id = id; StapelModel _stapelModel = new(); _stapelModel.KartenModels = new(); const string _plusZweiKarte = "PlusZweiKarte"; const string _retoureKarte = "RetoureKarte"; const string _aussetzenKarte = "AussetzenKarte"; if (KartenAblageStapel.KartenModels is null) { KartenAblageStapel.KartenModels = new(); } switch (zuLegendeKarte.Name) { case _plusZweiKarte: for (int i = 0; i < 2; i++) { ZiehEineKarte(_id); } break; case _retoureKarte: break; case _aussetzenKarte: break; default: break; } } public void SpielerErstellen(string spielerName) { string _spielerName = spielerName; Spieler.Add( new HandKartenModel { SpielerModel = new() { Id = Spieler.Count() + 1, SpielerName = _spielerName, }, KartenModels = new() }); } public void SpielerWahl(int aktuellerSpielerId, bool uhrZeigerSinn) { var aktuellerSpielerIndex = Spieler.FindIndex(x => x.SpielerModel.Id == aktuellerSpielerId); if (uhrZeigerSinn) { if (aktuellerSpielerIndex == Spieler.Count() - 1) { NaechsterSpielerId = 1; } else { NaechsterSpielerId = Spieler[aktuellerSpielerIndex + 1].SpielerModel.Id; } } else { if (aktuellerSpielerIndex != 0) { NaechsterSpielerId = Spieler[aktuellerSpielerIndex - 1].SpielerModel.Id; } else { NaechsterSpielerId = Spieler.LastOrDefault().SpielerModel.Id; } } } #region Stapel Erstellen public static StapelModel ErstelleStandardKarten() { StapelModel stapelModel = new(); stapelModel.KartenModels = new(); for (int f = 1; f <= 4; f++) { for (int k = 1; k <= 19; k++) { var kartenbezeichnung = (Kartenbezeichnung)k; var kartenfarbe = (Farbe)f; stapelModel.KartenModels.Add( new KartenModel { Name = kartenbezeichnung.ToString(), Farbe = kartenfarbe.ToString(), Spezial = false } ); } } return stapelModel; } public static StapelModel ErstelleFarbigeSpezialKarten() { StapelModel stapelModel = new(); stapelModel.KartenModels = new(); for (int k = 10; k <= 12; k++) { for (int f = 1; f <= 4; f++) { for (int i = 0; i < 2; i++) { var _kartenbezeichnung = (Kartenbezeichnung)k; var kartenfarbe = (Farbe)f; stapelModel.KartenModels.Add( new KartenModel { Name = _kartenbezeichnung.ToString(), Farbe = kartenfarbe.ToString(), Spezial = true } ); } } } return stapelModel; } public static StapelModel ErstelleJokerKarten() { StapelModel stapelModel = new(); stapelModel.KartenModels = new(); for (int k = 13; k <= 14; k++) { for (int a = 0; a < 4; a++) { var kartenbezeichnung = (Kartenbezeichnung)k; stapelModel.KartenModels.Add( new KartenModel { Name = kartenbezeichnung.ToString(), Farbe = Farbe.Keine.ToString(), Spezial = true } ); } } return stapelModel; } public void ZiehKartenStapelZusammenstellen() { var standardKarten = Uno.ErstelleStandardKarten(); var spezialKarten = Uno.ErstelleFarbigeSpezialKarten(); var jokerKarten = Uno.ErstelleJokerKarten(); ZiehKartenStapel.KartenModels = new(); ZiehKartenStapel.KartenModels.AddRange(standardKarten.KartenModels); ZiehKartenStapel.KartenModels.AddRange(spezialKarten.KartenModels); ZiehKartenStapel.KartenModels.AddRange(jokerKarten.KartenModels); } #endregion } }