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); } }
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; }
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); }
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); }
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); } }
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; } }
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); } } }
public FinishVeld(IVeld vakje) { Veld = vakje; InitializeComponent(); }
abstract protected int ZoekVeld(Pion gekozen, IVeld veld);
public Saver(Spel spel, IVeld[,] points) { _spel = spel; _points = points; }
/// <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; }
/// <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; }
/// <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; }
/// <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(); }
protected override int ZoekVeld(Pion pion, IVeld veld) { if (veld is Finishveld) return int.MinValue; return _random.Next(0, 100000); }
public LoopVeld(IVeld vakje) { Veld = vakje; InitializeComponent(); }