Example #1
0
 private static void GaVeldAf(IVeld vanaf, int score)
 {
     foreach (var veld in vanaf.Buren.Where(veld => veld.Score == 0 || veld.Score > score))
     {
         veld.Score = score;
         GaVeldAf(veld, score + 1);
     }
 }
Example #2
0
        protected override int ZoekVeld(Pion pion, IVeld veld)
        {
            if (veld is Finishveld) return int.MinValue;
            var score = veld.Score - pion.IVeld.Score;

            if (veld.Score - pion.IVeld.Score < 0) score += 2;

            if (veld.Pionnen.Count == 1) score += 20;

            return score;
        }
Example #3
0
        public StatischeLaag(Grid grid, IVeld[,] kaart)
        {
            _grid = grid;

            var height = kaart.GetLength(0);
            var width = kaart.GetLength(1);

            const int nodeSize = 50;
            var pathSize = (Math.Max(width, height) > 15 ? 5 : 30);

            var gameWidth = (nodeSize + pathSize) * width - pathSize;
            var gameHeight = (nodeSize + pathSize) * (height - 1) + (200 - pathSize);

            grid.Width = gameWidth;
            grid.Height = gameHeight;

            PlaatsVakjes(kaart, height, width, nodeSize, pathSize);
        }
Example #4
0
        public void Beweeg(Pion pion, IVeld bestemming)
        {
            var icon = _poinnen[pion];

            List<IVeld> list;
            if (pion.Paden != null && pion.Paden.ContainsKey(bestemming))
            {
                list = new List<IVeld>(pion.Paden[bestemming]);
            }
            else
            {
                list = new List<IVeld> {bestemming};
            }
            var stack = list.Select(veld => _velden[veld].BerekenPunt(pion).TranslatePoint(new Point(0.0, 0.0), _houder));
            //IEnumerable<Point> stack = Enumerable.Select<IElement, Point>(list, icon.BerekenPunt(pion).TranslatePoint(new Point(0.0, 0.0), _houder))));
            icon.Beweeg(stack);
            //            Beweeg(pion, stack, icon, milliseconds);
        }
Example #5
0
        public Bos(IVeld vakje)
        {
            Veld = vakje;
            InitializeComponent();

            for (int j = 0; j < 6; j++)
            {
                var rectangle = new Rectangle
                {
                    Margin = new Thickness(40 * i++, -50, 0, 0),
                    Width = 10,
                    Height = 10,
                    VerticalAlignment = VerticalAlignment.Center,
                    HorizontalAlignment = HorizontalAlignment.Left
                };
                Targets.Children.Add(rectangle);
                rectangles.Add(rectangle);
            }
        }
Example #6
0
        private void GenereerLijntjes(int j, int width, IVeld[,] level, int i, int height, int nodeSize, int pathSize)
        {
            for (var k = j + 1; k < width; k++)
            {
                if (level[i, k] == null)
                {
                    continue;
                }
                if (level[i, j].Buren.Contains(level[i, k]))
                {
                    for (var l = 1; l < (k - j - 1)*2 + 2; l++)
                    {
                        var line = new Rectangle
                            {
                                Fill = new SolidColorBrush(Color.FromRgb(0, 0, 0)),
                                Height = 5,
                                Width = pathSize * (k - j) + nodeSize * (k - j - 1),
                                HorizontalAlignment = HorizontalAlignment.Left,
                                VerticalAlignment = VerticalAlignment.Top
                            };
                        line.Margin = new Thickness(
                            nodeSize * (j + 1) + pathSize * (j - 1),
                            nodeSize * i + pathSize * (i) + nodeSize / 2 - line.Height / 2,
                            0, 0);

                        Panel.SetZIndex(line, -1);
                        _grid.Children.Add(line);
                    }
                }

                    break;
            }
            for (var k = i + 1; k < height; k++)
            {
                if (level[k, j] == null)
                {
                    continue;
                }
                if (level[i, j].Buren.Contains(level[k, j]))
                {
                    for (var l = 1; l < (k - i) * 2; l++)
                    {
                        var line = new Rectangle
                        {
                            Fill = new SolidColorBrush(Color.FromRgb(0, 0, 0)),
                            Width = 5,
                            Height = pathSize * (k - i) + nodeSize * (k - i - 1),
                            //Margin = new Thickness(0, 10, 0, 10),
                            HorizontalAlignment = HorizontalAlignment.Left,
                            VerticalAlignment = VerticalAlignment.Top
                        };
                        line.Margin = new Thickness(
                            nodeSize * (j) + pathSize * (j - 1) - line.Width / 2 + nodeSize / 2,
                            nodeSize * (i + 1) + pathSize * (i),
                            0, 0);
                        Panel.SetZIndex(line, -1);
                        _grid.Children.Add(line);
                    }
                }
                break;
            }
        }
Example #7
0
        private void PlaatsVakjes(IVeld[,] kaart, int height, int width, int nodeSize, int pathSize)
        {
            var level = kaart;
            for (var i = 0; i < height; i++)
            {
                int first = width;
                int last = 0;
                var isDorp = false;
                for (var j = 0; j < width; j++)
                {
                    var veld = level[i, j];
                    if (level[i, j] == null) continue;
                    if (level[i, j].IsDorp) isDorp = true;

                    first = Math.Min(j, first);
                    last = Math.Max(j, last);

                    UserControl vakje = null;
                    var vakjeWidth = nodeSize;
                    var vakjeHeight = nodeSize;

                    if (veld is Logic.Velden.Bos)
                    {
                        vakje = new Statisch.Bos(level[i, j]);
                        vakjeWidth *= 2;
                    }
                    else if (veld is Startveld)
                    {
                        vakje = new StartVeld(veld as Startveld);
                        vakjeWidth = 150;
                        vakjeHeight = 150;
                    }
                    else if (veld is Finishveld)
                    {
                        vakje = new FinishVeld(veld);
                    }
                    else if (veld is Rustveld)
                    {
                        vakje = new LoopVeld(veld) { IsRustVeld = true };
                    }
                    else if (veld is Veld)
                    {
                        vakje = new LoopVeld(veld) { IsBarricadeVeld = (veld as Veld).StandaardBarricade };
                    }

                    if (vakje != null)
                    {
                        vakje.Width = vakjeWidth;
                        vakje.Height = vakjeHeight;
                        vakje.Margin = new Thickness(
                            nodeSize * j + pathSize * (j-1) + (nodeSize - vakjeWidth) / 2,
                            nodeSize * i + pathSize * i,
                            0, 0);
                        vakje.HorizontalAlignment = HorizontalAlignment.Left;
                        vakje.VerticalAlignment = VerticalAlignment.Top;
                        _grid.Children.Add(vakje);
                        vakje.MouseUp += (sender, args) =>
                            {
                                if (VeldKlik != null && sender != null)
                                {
                                    var target = vakje as IElement;
                                    VeldKlik(target.Veld);
                                }

                            };
                        Velden[veld] = vakje as IElement;
                    }
                    GenereerLijntjes(j, width, level, i, height, nodeSize, pathSize);
                }
                if (isDorp)
                {
                    var el = new Border
                        {
                            CornerRadius = new CornerRadius(nodeSize/2,nodeSize/2, nodeSize/2, nodeSize/2),
                            HorizontalAlignment = HorizontalAlignment.Left,
                            VerticalAlignment = VerticalAlignment.Top,
                            Background = new SolidColorBrush(Color.FromArgb(130, 255, 255, 255)),
                            Width = (nodeSize + pathSize)*(last - first + 1) - pathSize,
                            Height = nodeSize,
                            Margin = new Thickness(nodeSize * first + pathSize * (first - 1), (nodeSize + pathSize) * i, 0, 0)
                        };
                    Panel.SetZIndex(el, -2);
                    _grid.Children.Add(el);
                }

            }
        }
Example #8
0
 public FinishVeld(IVeld vakje)
 {
     Veld = vakje;
     InitializeComponent();
 }
Example #9
0
 abstract protected int ZoekVeld(Pion gekozen, IVeld veld);
Example #10
0
 public Saver(Spel spel, IVeld[,] points)
 {
     _spel = spel;
     _points = points;
 }
Example #11
0
 /// <summary>
 /// Zet een veld om naar tekst
 /// </summary>
 /// <param name="iveld">het veld</param>
 /// <param name="inhoud">inhoud van veld</param>
 /// <returns>een textueel veld</returns>
 private string ZetVeldOm(IVeld iveld, string inhoud)
 {
     string veld;
     if (iveld is Rustveld)
     {
         veld = "{" + inhoud + "}";
     }
     else if (iveld is Finishveld)
     {
         veld = "< >";
     }
     else if (iveld is Startveld || iveld is Bos)
     {
         if (iveld is Startveld)
         {
             veld = "<" + _startVelden[(iveld as Startveld)] + ">";
         }
         else
         {
             veld = "<" + (++_uitzonderingCount) + ">";
             _uitzonderingen += "*" + _uitzonderingCount + ":BOS,";
             // voeg spelers toe
             _uitzonderingen = iveld.Pionnen.Aggregate(_uitzonderingen,
                                                            (current, point) =>
                                                            current + (point.Speler.Name + ""));
             _uitzonderingen += "\r\n";
         }
     }
     else if (iveld is Veld)
     {
         var loopveld = iveld as Veld;
         if (loopveld.Barricade != null)
         {
             inhoud = "*";
         }
         veld = loopveld.StandaardBarricade ? "[" + inhoud + "]" : "(" + inhoud + ")";
     }
     else
     {
         throw new Exception("Ik ken dit veld niet.");
     }
     return veld;
 }
Example #12
0
 /// <summary>
 /// Zet de inhoud van een veld om tot tekst
 /// </summary>
 /// <param name="veld">veld</param>
 /// <returns>textuele inhoud</returns>
 private static string ZetInhoudOm(IVeld veld)
 {
     var inhoud = veld.Pionnen.First().Speler.Name + "";
     return inhoud;
 }
Example #13
0
        /// <summary>
        /// Verplaatst pion op bestemming
        /// </summary>
        /// <param name="bestemming">bestemming als in een iveld</param>
        /// <return>ja of nee</returns>
        public virtual bool Verplaats(IVeld bestemming)
        {
            Oppakken();
            if (bestemming.Plaats(this))
            {
                IVeld = bestemming;
                if (PositieWijziging != null)
                    PositieWijziging(this, bestemming);

                Paden = null;
                return true;
            }
            return false;
        }
Example #14
0
        /// <summary>
        /// Recursieve functie die de mogelijke zeten berkend.
        /// </summary>
        /// <param name="vorige">het vorige veld</param>
        /// <param name="begin">het begin veld</param>
        /// <param name="stappen">aantal stappen</param>
        /// <returns>geeft een lijst met velden terug</returns>
        private IEnumerable<List<IVeld>> MogelijkeZetten(IVeld vorige, IVeld begin, int stappen)
        {
            stappen--;
            var lijsten = new List<List<IVeld>>();
            // Ga alle buren af
            foreach (var veld in begin.Buren.Where(veld => veld != vorige))
            {
                // Wanneer de pion meer dan 1 stappen mag zetten moeten de buren bezocht worden.
                if (stappen >= 1)
                {
                    // Kijk of er een barricade opstaat
                    if(!veld.MagPionErlangs) continue;

                    // Zoek verdere zetten op
                    var nieuw = MogelijkeZetten(begin, veld, stappen);
                    foreach (var lijst in nieuw)
                    {
                        lijst.Add(veld);
                        lijsten.Add(lijst);
                    }
                }
                else
                {
                    if (veld.MagPion(this))
                    {
                        lijsten.Add(new List<IVeld> { veld });
                    }
                }
            }
            // Filter de lege lijsten eruit
            return lijsten.Where(lijst => lijst.Any()).ToList();
        }
Example #15
0
 protected override int ZoekVeld(Pion pion, IVeld veld)
 {
     if (veld is Finishveld) return int.MinValue;
     return _random.Next(0, 100000);
 }
Example #16
0
 public LoopVeld(IVeld vakje)
 {
     Veld = vakje;
     InitializeComponent();
 }