public bool Move(out int scoresum, int score, bool isShip = false) { scoresum = score; if (X == 0 && Y == 2) { Car = null; // Score ophogen met 1, lege kar scoresum += 1; return(true); } else if (Next != null) { //Aankomen bij de kade.. if (Next.DisplayChar == 'K') { Quay quay = (Quay)Next; Ship ship = (Ship)quay.ship; ship.Load += 10; Car.Empty(); Next.Car = Car; Car = null; return(true); } // Destination behaald dus niks meer doen.. else if (this is DestinationField && Next.DisplayChar == '0') { return(true); } //botsing.. else if (Next.DisplayChar == 'O' || Next.DisplayChar == '0') { return(false); } else if (Next.DisplayChar != ' ') { Next.Car = Car; Car = null; return(true); } // Karretje kan niet verder, dus zet hem stil.. return(true); } else { Car = null; return(false); } }
//Nexts goedzetten zodat ze goed op elkaar overlopen.. public void SetNexts() { int highest_x = trackList.Aggregate((i1, i2) => i1.X > i2.X ? i1 : i2).X; int highest_y = trackList.Aggregate((i1, i2) => i1.Y > i2.Y ? i1 : i2).Y; for (int x_i = 0; x_i < highest_x; x_i++) { for (int y_i = 0; y_i <= highest_y; y_i++) { TrackField tempFieldStart = null; TrackField tempFieldNext = null; if (y_i == 2) { tempFieldStart = trackList.FirstOrDefault(f => f.X == x_i && f.Y == y_i); tempFieldNext = trackList.FirstOrDefault(f => f.X == x_i - 1 && f.Y == y_i); } else if (y_i == highest_y) { tempFieldStart = trackList.FirstOrDefault(f => f.X == x_i && f.Y == y_i); tempFieldNext = trackList.FirstOrDefault(f => f.X == x_i - 1 && f.Y == y_i); } else { tempFieldStart = trackList.FirstOrDefault(f => f.X == x_i && f.Y == y_i); tempFieldNext = trackList.FirstOrDefault(f => f.X == x_i + 1 && f.Y == y_i); } if (tempFieldNext != null && tempFieldStart != null) { tempFieldStart.Next = tempFieldNext; } } } //de kolom omhoog trackList.First(v => v.X == 11 && v.Y == 2).Next = trackList.First(v => v.X == 10 && v.Y == 2); trackList.First(v => v.X == 11 && v.Y == 3).Next = trackList.First(v => v.X == 11 && v.Y == 2); trackList.First(v => v.X == 11 && v.Y == 4).Next = trackList.First(v => v.X == 11 && v.Y == 3); trackList.First(v => v.X == 11 && v.Y == 5).Next = trackList.First(v => v.X == 11 && v.Y == 4); //de bocht omlaag in de laatste rij/kolom trackList.First(v => v.X == 11 && v.Y == 8).Next = trackList.First(v => v.X == 11 && v.Y == 9); //koppel het schip aan het dek, schip is opgebouwd uit 3 vakken, middelste vak word de lading in geteld TrackField quayField = trackList.FirstOrDefault(v => v.X == 9 && v.Y == 2); if (quayField != null) { Quay quay = (Quay)quayField; //kade gevonden, koppel het schip aan de kade quay.ship = trackList.FirstOrDefault(v => v.X == 9 && v.Y == 1); } //Bij een splitsing wordt er gekeken welke kant de wissel op staat voor de koppeling ChangeableTrack tempW = (RightChangeableTrack)trackList.First(v => v.X == 3 && v.Y == 5); if (tempW.IsUp) { trackList.First(v => v.X == 3 && v.Y == 4).Next = trackList.First(v => v.X == 3 && v.Y == 5); } else { trackList.First(v => v.X == 3 && v.Y == 6).Next = trackList.First(v => v.X == 3 && v.Y == 5); } tempW = (LeftChangeableTrack)trackList.First(v => v.X == 5 && v.Y == 5); if (tempW.IsUp) { trackList.First(v => v.X == 5 && v.Y == 5).Next = trackList.First(v => v.X == 5 && v.Y == 4); trackList.First(v => v.X == 5 && v.Y == 4).Next = trackList.First(v => v.X == 6 && v.Y == 4); } else { trackList.First(v => v.X == 5 && v.Y == 5).Next = trackList.First(v => v.X == 5 && v.Y == 6); trackList.First(v => v.X == 5 && v.Y == 6).Next = trackList.First(v => v.X == 6 && v.Y == 6); } tempW = (RightChangeableTrack)trackList.First(v => v.X == 6 && v.Y == 7); if (tempW.IsUp) { trackList.First(v => v.X == 6 && v.Y == 6).Next = trackList.First(v => v.X == 6 && v.Y == 7); } else { trackList.First(v => v.X == 6 && v.Y == 8).Next = trackList.First(v => v.X == 6 && v.Y == 7); } tempW = (LeftChangeableTrack)trackList.First(v => v.X == 8 && v.Y == 7); if (tempW.IsUp) { trackList.First(v => v.X == 8 && v.Y == 7).Next = trackList.First(v => v.X == 8 && v.Y == 6); trackList.First(v => v.X == 8 && v.Y == 6).Next = trackList.First(v => v.X == 9 && v.Y == 6); } else { trackList.First(v => v.X == 8 && v.Y == 7).Next = trackList.First(v => v.X == 8 && v.Y == 8); trackList.First(v => v.X == 8 && v.Y == 8).Next = trackList.First(v => v.X == 9 && v.Y == 8); } tempW = (RightChangeableTrack)trackList.First(v => v.X == 9 && v.Y == 5); if (tempW.IsUp) { trackList.First(v => v.X == 9 && v.Y == 4).Next = trackList.First(v => v.X == 9 && v.Y == 5); } else { trackList.First(v => v.X == 9 && v.Y == 6).Next = trackList.First(v => v.X == 9 && v.Y == 5); } }