Continous Integration in der Praxis Gruppenarbeit
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

224 lines
5.4 KiB

  1. using MiniGames.Shared.Enums;
  2. using MiniGames.Shared.Models;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. namespace MiniGames.Client.ViewModel
  6. {
  7. public class Uno : IUno
  8. {
  9. public StapelModel KartenAblageStapel { get; set; } = new();
  10. public StapelModel ZiehKartenStapel { get; set; } = new();
  11. public List<HandKartenModel> Spieler { get; set; } = new();
  12. public int NaechsterSpielerId { get; set; }
  13. public bool Uhrzeigersinn { get; set; } = true;
  14. public bool IstAblageStapelFarbeGleichZuLegendeKarte(string neueKarteFarbe)
  15. {
  16. bool ergebnis;
  17. _ = KartenAblageStapel.KartenModels.LastOrDefault().Farbe.Equals(neueKarteFarbe) ? ergebnis = true : ergebnis = false;
  18. return ergebnis;
  19. }
  20. public bool IstAblageStapelZahlGleichZuLegendeKarte(string handStapelKarteBezeichnung)
  21. {
  22. bool ergebnis;
  23. _ = KartenAblageStapel.KartenModels.LastOrDefault().Name.Equals(handStapelKarteBezeichnung) ? ergebnis = true : ergebnis = false;
  24. return ergebnis;
  25. }
  26. public void ZiehEineKarte(int id)
  27. {
  28. int _id = id;
  29. int index = Spieler.FindIndex(x => x.SpielerModel.Id == _id);
  30. Spieler[index].KartenModels.Add(ZiehKartenStapel.KartenModels.FirstOrDefault());
  31. ZiehKartenStapel.KartenModels.RemoveAt(0);
  32. }
  33. public void KarteAufStapelLegen(int id, KartenModel zuLegendeKarte)
  34. {
  35. NaechsterSpielerWahl(id, Uhrzeigersinn);
  36. int _naechstenId = NaechsterSpielerId;
  37. StapelModel _stapelModel = new();
  38. _stapelModel.KartenModels = new();
  39. const string _plusZweiKarte = "PlusZweiKarte";
  40. const string _retoureKarte = "RetoureKarte";
  41. const string _aussetzenKarte = "AussetzenKarte";
  42. if (KartenAblageStapel.KartenModels is null)
  43. {
  44. KartenAblageStapel.KartenModels = new();
  45. }
  46. switch (zuLegendeKarte.Name)
  47. {
  48. case _plusZweiKarte:
  49. for (int i = 0; i < 2; i++)
  50. {
  51. ZiehEineKarte(_naechstenId);
  52. }
  53. break;
  54. case _retoureKarte:
  55. break;
  56. case _aussetzenKarte:
  57. break;
  58. default:
  59. break;
  60. }
  61. }
  62. public void SpielerErstellen(string spielerName)
  63. {
  64. string _spielerName = spielerName;
  65. Spieler.Add(
  66. new HandKartenModel
  67. {
  68. SpielerModel = new()
  69. {
  70. Id = Spieler.Count() + 1,
  71. SpielerName = _spielerName,
  72. },
  73. KartenModels = new()
  74. });
  75. }
  76. public void NaechsterSpielerWahl(int aktuellerSpielerId, bool uhrZeigerSinn)
  77. {
  78. var aktuellerSpielerIndex = Spieler.FindIndex(x => x.SpielerModel.Id == aktuellerSpielerId);
  79. if (uhrZeigerSinn)
  80. {
  81. if (aktuellerSpielerIndex == Spieler.Count() - 1)
  82. {
  83. NaechsterSpielerId = 1;
  84. }
  85. else
  86. {
  87. NaechsterSpielerId = Spieler[aktuellerSpielerIndex + 1].SpielerModel.Id;
  88. }
  89. }
  90. else
  91. {
  92. if (aktuellerSpielerIndex != 0)
  93. {
  94. NaechsterSpielerId = Spieler[aktuellerSpielerIndex - 1].SpielerModel.Id;
  95. }
  96. else
  97. {
  98. NaechsterSpielerId = Spieler.LastOrDefault().SpielerModel.Id;
  99. }
  100. }
  101. }
  102. #region Stapel Erstellen
  103. public static StapelModel ErstelleStandardKarten()
  104. {
  105. StapelModel stapelModel = new();
  106. stapelModel.KartenModels = new();
  107. for (int f = 1; f <= 4; f++)
  108. {
  109. for (int k = 1; k <= 19; k++)
  110. {
  111. var kartenbezeichnung = (Kartenbezeichnung)k;
  112. var kartenfarbe = (Farbe)f;
  113. stapelModel.KartenModels.Add(
  114. new KartenModel
  115. {
  116. Name = kartenbezeichnung.ToString(),
  117. Farbe = kartenfarbe.ToString(),
  118. Spezial = false
  119. }
  120. );
  121. }
  122. }
  123. return stapelModel;
  124. }
  125. public static StapelModel ErstelleFarbigeSpezialKarten()
  126. {
  127. StapelModel stapelModel = new();
  128. stapelModel.KartenModels = new();
  129. for (int k = 10; k <= 12; k++)
  130. {
  131. for (int f = 1; f <= 4; f++)
  132. {
  133. for (int i = 0; i < 2; i++)
  134. {
  135. var _kartenbezeichnung = (Kartenbezeichnung)k;
  136. var kartenfarbe = (Farbe)f;
  137. stapelModel.KartenModels.Add(
  138. new KartenModel
  139. {
  140. Name = _kartenbezeichnung.ToString(),
  141. Farbe = kartenfarbe.ToString(),
  142. Spezial = true
  143. }
  144. );
  145. }
  146. }
  147. }
  148. return stapelModel;
  149. }
  150. public void InitialeKartenVerteilung()
  151. {
  152. for (int i = 0; i < 7; i++)
  153. {
  154. foreach (var spieler in Spieler)
  155. {
  156. spieler.KartenModels.Add(ZiehKartenStapel.KartenModels.FirstOrDefault());
  157. ZiehKartenStapel.KartenModels.RemoveAt(0);
  158. }
  159. }
  160. }
  161. public static StapelModel ErstelleJokerKarten()
  162. {
  163. StapelModel stapelModel = new();
  164. stapelModel.KartenModels = new();
  165. for (int k = 13; k <= 14; k++)
  166. {
  167. for (int a = 0; a < 4; a++)
  168. {
  169. var kartenbezeichnung = (Kartenbezeichnung)k;
  170. stapelModel.KartenModels.Add(
  171. new KartenModel
  172. {
  173. Name = kartenbezeichnung.ToString(),
  174. Farbe = Farbe.Keine.ToString(),
  175. Spezial = true
  176. }
  177. );
  178. }
  179. }
  180. return stapelModel;
  181. }
  182. public void ZiehKartenStapelZusammenstellen()
  183. {
  184. var standardKarten = Uno.ErstelleStandardKarten();
  185. var spezialKarten = Uno.ErstelleFarbigeSpezialKarten();
  186. var jokerKarten = Uno.ErstelleJokerKarten();
  187. ZiehKartenStapel.KartenModels = new();
  188. ZiehKartenStapel.KartenModels.AddRange(standardKarten.KartenModels);
  189. ZiehKartenStapel.KartenModels.AddRange(spezialKarten.KartenModels);
  190. ZiehKartenStapel.KartenModels.AddRange(jokerKarten.KartenModels);
  191. }
  192. #endregion
  193. }
  194. }