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.

272 lines
6.5 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 AblageKartenStapel { 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. _ = AblageKartenStapel.KartenModels.LastOrDefault().Farbe.Equals(neueKarteFarbe) ? ergebnis = true : ergebnis = false;
  18. return ergebnis;
  19. }
  20. public bool IstAblageStapelZahlGleichZuLegendeKarte(string handStapelKarteBezeichnung)
  21. {
  22. bool ergebnis;
  23. _ = AblageKartenStapel.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 (AblageKartenStapel.KartenModels is null)
  43. {
  44. AblageKartenStapel.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. _naechstenId = RetoureKarte(id);
  56. break;
  57. case _aussetzenKarte:
  58. AussetzenKarteSpielerWahl(id, Uhrzeigersinn);
  59. break;
  60. default:
  61. break;
  62. }
  63. }
  64. private int RetoureKarte(int id)
  65. {
  66. Uhrzeigersinn = !Uhrzeigersinn;
  67. NaechsterSpielerWahl(id, Uhrzeigersinn);
  68. return NaechsterSpielerId;
  69. }
  70. public void SpielerErstellen(string spielerName)
  71. {
  72. string _spielerName = spielerName;
  73. Spieler.Add(
  74. new HandKartenModel
  75. {
  76. SpielerModel = new()
  77. {
  78. Id = Spieler.Count() + 1,
  79. SpielerName = _spielerName,
  80. },
  81. KartenModels = new()
  82. });
  83. }
  84. public void NaechsterSpielerWahl(int aktuellerSpielerId, bool uhrZeigerSinn)
  85. {
  86. var aktuellerSpielerIndex = Spieler.FindIndex(x => x.SpielerModel.Id == aktuellerSpielerId);
  87. if (uhrZeigerSinn)
  88. {
  89. if (aktuellerSpielerIndex == Spieler.Count() - 1)
  90. {
  91. NaechsterSpielerId = 1;
  92. }
  93. else
  94. {
  95. NaechsterSpielerId = Spieler[aktuellerSpielerIndex + 1].SpielerModel.Id;
  96. }
  97. }
  98. else
  99. {
  100. if (aktuellerSpielerIndex != 0)
  101. {
  102. NaechsterSpielerId = Spieler[aktuellerSpielerIndex - 1].SpielerModel.Id;
  103. }
  104. else
  105. {
  106. NaechsterSpielerId = Spieler.LastOrDefault().SpielerModel.Id;
  107. }
  108. }
  109. }
  110. private void AussetzenKarteSpielerWahl(int aktuellerSpielerId, bool uhrZeigerSinn)
  111. {
  112. if (uhrZeigerSinn)
  113. {
  114. if (aktuellerSpielerId == Spieler.LastOrDefault().SpielerModel.Id)
  115. {
  116. NaechsterSpielerId = 2;
  117. }
  118. else if (aktuellerSpielerId == Spieler.LastOrDefault().SpielerModel.Id - 1)
  119. {
  120. NaechsterSpielerId = 1;
  121. }
  122. else
  123. {
  124. NaechsterSpielerId = aktuellerSpielerId + 2;
  125. }
  126. }
  127. else
  128. {
  129. if (aktuellerSpielerId > 2)
  130. {
  131. NaechsterSpielerId = aktuellerSpielerId - 2;
  132. }
  133. else if (aktuellerSpielerId == 2)
  134. {
  135. NaechsterSpielerId = Spieler.LastOrDefault().SpielerModel.Id;
  136. }
  137. else
  138. {
  139. NaechsterSpielerId = Spieler.LastOrDefault().SpielerModel.Id - 1;
  140. }
  141. }
  142. }
  143. #region Stapel Erstellen
  144. public static StapelModel ErstelleStandardKarten()
  145. {
  146. StapelModel stapelModel = new();
  147. stapelModel.KartenModels = new();
  148. for (int f = 1; f <= 4; f++)
  149. {
  150. EinzelneKarteErstellen(stapelModel, f, 0, false);
  151. for (int k = 1; k <= 9; k++)
  152. {
  153. for (int a = 0; a < 2; a++)
  154. {
  155. EinzelneKarteErstellen(stapelModel, f, k, false);
  156. }
  157. }
  158. }
  159. return stapelModel;
  160. }
  161. private static void EinzelneKarteErstellen(StapelModel stapelModel, int farbenIndex, int kartenbezeichungIndex, bool spezial)
  162. {
  163. var kartenbezeichnung = (Kartenbezeichnung)kartenbezeichungIndex;
  164. var kartenfarbe = (Farbe)farbenIndex;
  165. stapelModel.KartenModels.Add(
  166. new KartenModel
  167. {
  168. Name = kartenbezeichnung.ToString(),
  169. Farbe = kartenfarbe.ToString(),
  170. Spezial = spezial
  171. }
  172. );
  173. }
  174. public static StapelModel ErstelleFarbigeSpezialKarten()
  175. {
  176. StapelModel stapelModel = new();
  177. stapelModel.KartenModels = new();
  178. for (int k = 10; k <= 12; k++)
  179. {
  180. for (int f = 1; f <= 4; f++)
  181. {
  182. for (int i = 0; i < 2; i++)
  183. {
  184. EinzelneKarteErstellen(stapelModel, f, k, true);
  185. }
  186. }
  187. }
  188. return stapelModel;
  189. }
  190. public void InitialeKartenVerteilung()
  191. {
  192. for (int i = 0; i < 7; i++)
  193. {
  194. foreach (var spieler in Spieler)
  195. {
  196. spieler.KartenModels.Add(ZiehKartenStapel.KartenModels.FirstOrDefault());
  197. ZiehKartenStapel.KartenModels.RemoveAt(0);
  198. }
  199. }
  200. }
  201. public static StapelModel ErstelleJokerKarten()
  202. {
  203. StapelModel stapelModel = new();
  204. stapelModel.KartenModels = new();
  205. for (int k = 13; k <= 14; k++)
  206. {
  207. for (int a = 0; a < 4; a++)
  208. {
  209. var kartenbezeichnung = (Kartenbezeichnung)k;
  210. stapelModel.KartenModels.Add(
  211. new KartenModel
  212. {
  213. Name = kartenbezeichnung.ToString(),
  214. Farbe = Farbe.Keine.ToString(),
  215. Spezial = true
  216. }
  217. );
  218. }
  219. }
  220. return stapelModel;
  221. }
  222. public void ZiehKartenStapelZusammenstellen()
  223. {
  224. var standardKarten = Uno.ErstelleStandardKarten();
  225. var spezialKarten = Uno.ErstelleFarbigeSpezialKarten();
  226. var jokerKarten = Uno.ErstelleJokerKarten();
  227. ZiehKartenStapel.KartenModels = new();
  228. ZiehKartenStapel.KartenModels.AddRange(standardKarten.KartenModels);
  229. ZiehKartenStapel.KartenModels.AddRange(spezialKarten.KartenModels);
  230. ZiehKartenStapel.KartenModels.AddRange(jokerKarten.KartenModels);
  231. }
  232. #endregion
  233. }
  234. }