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.Models; |
|||
using System; |
|||
using System.Collections.Generic; |
|||
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 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