public void StukGeslagen(Stuk stuk) { // verwijder stuk van veld stuk.VeldNode.Value.RemoveStuk(stuk); // zet stuk op begin stuk.VeldNode = Velden.First; // voeg stuk toe aan begin stuk.VeldNode.Value.AddStuk(stuk); }
public void RemoveStuk(Stuk stuk) { Stukken.Remove(stuk); }
public void AddStuk(Stuk stuk) { Stukken.Add(stuk); }
public string DoeBeurt(int dobbelWaarde) { int stukIndex = spel.KrijgSpelerInput(playerInt); Stuk stuk = Stukken[stukIndex]; LinkedListNode <Veld> node = stuk.VeldNode; if (node.Value is Eind) { return("fail-end"); } for (int i = 0; i < dobbelWaarde; i++) { node = node.Next; if (node.Value is Eind) { // einde bereikt dus er is een beurt mogelijk goto EndCheck; // hoeft niet meer te checken } } // nu is de eind veldnode duidelijk, kijk nu of daar een stuk geplaatst kan worden if (node.Value is Rozet && node.Value.IsBezet()) { // hier staat al een steen op een rozet. return("fail-rozet-taken"); } if (node.Value.IsBezet()) { string kleur = stuk.Kleur; if (kleur == "zwart" && node.Value.HeeftZwartStuk()) { // kan niet op eigen kleur plaatsen return("fail-taken"); } else if (kleur == "wit" && node.Value.HeeftWitStuk()) { // kan niet op eigen kleur plaatsen return("fail-taken"); } } EndCheck: // nu de stuk verplaatsen // eerste alle stukken slaan als het geen eind veld is bool stukGeslagen = false; if (!(node.Value is Eind) && node.Value.IsBezet()) { List <Stuk> stukken = node.Value.Stukken; // list nu clonen om concurrentmodification exception te voorkomen stukken = stukken.ToList(); foreach (Stuk stukTegenstander in stukken) { spel.Tegenstander.StukGeslagen(stukTegenstander); stukGeslagen = true; } } // uiteindelijk stuk verplaatsen // verwijder stuk van huidig veld stuk.VeldNode.Value.RemoveStuk(stuk); // koppel veld aan stuk stuk.VeldNode = node; // add stuk aan veld node.Value.AddStuk(stuk); if (stukGeslagen) { return("success-geslagen"); } if (node.Value is Rozet) { return("success-rozet"); } if (node.Value is Eind) { return("success-einde"); } return("success-normal"); }