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);
     }
 }
Exemple #2
0
    //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);
        }
    }