11 Commits
04225dc7eb
...
df22fc5b39
3 changed files with 786 additions and 553 deletions
-
466BlazorSolution/MiniGames/Client/ViewModel/Uno.cs
-
1BlazorSolution/MiniGames/Shared/Enums/Enums.cs
-
878BlazorSolution/MiniGamesTests/UnoTest.cs
@ -1,210 +1,272 @@ |
|||||
using MiniGames.Shared.Enums; |
using MiniGames.Shared.Enums; |
||||
using MiniGames.Shared.Models; |
using MiniGames.Shared.Models; |
||||
using System; |
|
||||
using System.Collections.Generic; |
using System.Collections.Generic; |
||||
using System.Linq; |
using System.Linq; |
||||
|
|
||||
namespace MiniGames.Client.ViewModel |
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 AblageKartenStapel { get; set; } = new(); |
||||
|
public StapelModel ZiehKartenStapel { get; set; } = new(); |
||||
|
public List<HandKartenModel> Spieler { get; set; } = new(); |
||||
|
public int NaechsterSpielerId { get; set; } |
||||
|
public bool Uhrzeigersinn { get; set; } = true; |
||||
|
|
||||
|
public bool IstAblageStapelFarbeGleichZuLegendeKarte(string neueKarteFarbe) |
||||
|
{ |
||||
|
bool ergebnis; |
||||
|
|
||||
|
_ = AblageKartenStapel.KartenModels.LastOrDefault().Farbe.Equals(neueKarteFarbe) ? ergebnis = true : ergebnis = false; |
||||
|
|
||||
|
return ergebnis; |
||||
|
} |
||||
|
|
||||
|
public bool IstAblageStapelZahlGleichZuLegendeKarte(string handStapelKarteBezeichnung) |
||||
|
{ |
||||
|
bool ergebnis; |
||||
|
|
||||
|
_ = AblageKartenStapel.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) |
||||
|
{ |
||||
|
NaechsterSpielerWahl(id, Uhrzeigersinn); |
||||
|
int _naechstenId = NaechsterSpielerId; |
||||
|
|
||||
|
StapelModel _stapelModel = new(); |
||||
|
_stapelModel.KartenModels = new(); |
||||
|
const string _plusZweiKarte = "PlusZweiKarte"; |
||||
|
const string _retoureKarte = "RetoureKarte"; |
||||
|
const string _aussetzenKarte = "AussetzenKarte"; |
||||
|
|
||||
|
if (AblageKartenStapel.KartenModels is null) |
||||
|
{ |
||||
|
AblageKartenStapel.KartenModels = new(); |
||||
|
} |
||||
|
|
||||
|
switch (zuLegendeKarte.Name) |
||||
|
{ |
||||
|
case _plusZweiKarte: |
||||
|
for (int i = 0; i < 2; i++) |
||||
|
{ |
||||
|
ZiehEineKarte(_naechstenId); |
||||
|
} |
||||
|
break; |
||||
|
|
||||
|
case _retoureKarte: |
||||
|
_naechstenId = RetoureKarte(id); |
||||
|
break; |
||||
|
|
||||
|
case _aussetzenKarte: |
||||
|
AussetzenKarteSpielerWahl(id, Uhrzeigersinn); |
||||
|
break; |
||||
|
|
||||
|
default: |
||||
|
break; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
private int RetoureKarte(int id) |
||||
|
{ |
||||
|
Uhrzeigersinn = !Uhrzeigersinn; |
||||
|
NaechsterSpielerWahl(id, Uhrzeigersinn); |
||||
|
return NaechsterSpielerId; |
||||
|
} |
||||
|
|
||||
|
public void SpielerErstellen(string spielerName) |
||||
|
{ |
||||
|
string _spielerName = spielerName; |
||||
|
Spieler.Add( |
||||
|
new HandKartenModel |
||||
|
{ |
||||
|
SpielerModel = new() |
||||
|
{ |
||||
|
Id = Spieler.Count() + 1, |
||||
|
SpielerName = _spielerName, |
||||
|
}, |
||||
|
KartenModels = new() |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
public void NaechsterSpielerWahl(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; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
private void AussetzenKarteSpielerWahl(int aktuellerSpielerId, bool uhrZeigerSinn) |
||||
|
{ |
||||
|
if (uhrZeigerSinn) |
||||
|
{ |
||||
|
if (aktuellerSpielerId == Spieler.LastOrDefault().SpielerModel.Id) |
||||
|
{ |
||||
|
NaechsterSpielerId = 2; |
||||
|
} |
||||
|
else if (aktuellerSpielerId == Spieler.LastOrDefault().SpielerModel.Id - 1) |
||||
|
{ |
||||
|
NaechsterSpielerId = 1; |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
NaechsterSpielerId = aktuellerSpielerId + 2; |
||||
|
} |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
if (aktuellerSpielerId > 2) |
||||
|
{ |
||||
|
NaechsterSpielerId = aktuellerSpielerId - 2; |
||||
|
} |
||||
|
else if (aktuellerSpielerId == 2) |
||||
|
{ |
||||
|
NaechsterSpielerId = Spieler.LastOrDefault().SpielerModel.Id; |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
NaechsterSpielerId = Spieler.LastOrDefault().SpielerModel.Id - 1; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
#region Stapel Erstellen
|
||||
|
public static StapelModel ErstelleStandardKarten() |
||||
|
{ |
||||
|
StapelModel stapelModel = new(); |
||||
|
stapelModel.KartenModels = new(); |
||||
|
for (int f = 1; f <= 4; f++) |
||||
|
{ |
||||
|
EinzelneKarteErstellen(stapelModel, f, 0, false); |
||||
|
|
||||
|
for (int k = 1; k <= 9; k++) |
||||
|
{ |
||||
|
for (int a = 0; a < 2; a++) |
||||
|
{ |
||||
|
EinzelneKarteErstellen(stapelModel, f, k, false); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
return stapelModel; |
||||
|
} |
||||
|
|
||||
|
private static void EinzelneKarteErstellen(StapelModel stapelModel, int farbenIndex, int kartenbezeichungIndex, bool spezial) |
||||
|
{ |
||||
|
var kartenbezeichnung = (Kartenbezeichnung)kartenbezeichungIndex; |
||||
|
var kartenfarbe = (Farbe)farbenIndex; |
||||
|
stapelModel.KartenModels.Add( |
||||
|
new KartenModel |
||||
|
{ |
||||
|
Name = kartenbezeichnung.ToString(), |
||||
|
Farbe = kartenfarbe.ToString(), |
||||
|
Spezial = spezial |
||||
|
} |
||||
|
); |
||||
|
} |
||||
|
|
||||
|
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++) |
||||
|
{ |
||||
|
EinzelneKarteErstellen(stapelModel, f, k, 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
|
||||
|
} |
||||
} |
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue