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 bool IstAblageStapelFarbeGleichZuLegendeKarte(string neueKarteFarbe) { if (KartenAblageStapel.KartenModels.LastOrDefault().Farbe.Equals(neueKarteFarbe)) { return true; } else { return false; } } public bool IstAblageStapelZahlGleichZuLegendeKarte(string handStapelKarteBezeichnung) { if (KartenAblageStapel.KartenModels.LastOrDefault().Name.Equals(handStapelKarteBezeichnung)) { return true; } else { return false; } } public void ZiehEineKarte(int id) { int _id = id; int index = Spieler.FindIndex(x => x.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 { Id = Spieler.Count() + 1, Name = _spielerName, KartenModels = new() }); } #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 } }