|
|
@ -6,205 +6,218 @@ 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<HandKartenModel> 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
|
|
|
|
} |
|
|
|
public class Uno : IUno |
|
|
|
{ |
|
|
|
public StapelModel KartenAblageStapel { get; set; } = new(); |
|
|
|
public StapelModel ZiehKartenStapel { get; set; } = new(); |
|
|
|
public List<HandKartenModel> 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 void InitialeKartenVerteilung() |
|
|
|
{ |
|
|
|
for (int i = 0; i < 7; i++) |
|
|
|
{ |
|
|
|
foreach (var spieler in Spieler) |
|
|
|
{ |
|
|
|
spieler.KartenModels.Add(ZiehKartenStapel.KartenModels.FirstOrDefault()); |
|
|
|
ZiehKartenStapel.KartenModels.RemoveAt(0); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
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
|
|
|
|
} |
|
|
|
} |