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.

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