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
272 lines
6.5 KiB
using MiniGames.Shared.Enums;
|
|
using MiniGames.Shared.Models;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
|
|
namespace MiniGames.Client.ViewModel
|
|
{
|
|
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
|
|
}
|
|
}
|