/// <summary> /// Bubble erzeugen /// </summary> /// <param name="farbe"></param> /// <returns></returns> private Ellipse ErzeugeBubble(BubbleFarbe farbe) { return(new Ellipse() { StrokeThickness = 1.0, Height = ZellMass - 4, Width = ZellMass - 4, Stroke = _farben[farbe], Fill = _farben[farbe] }); }
/// <summary> /// Zelle mit einem Bubble füllen und Status entsprechend setzen /// </summary> /// <param name="bubble"></param> public void FarbeFestlegen(BubbleFarbe farbe) { Farbe = farbe; if (Farbe == BubbleFarbe.Leer) { Status = ZellStatus.Leer; } else { Status = ZellStatus.Belegt; } }
/// <summary> /// Neues Spiel, jede Zelle wird mit einer Farbe belegt und der Highscore wird zurückgesetzt /// </summary> public void ResetMatrix() { Score = 0; Random rnd = new Random(); for (int i = 0; i < Zeilen; i++) { for (int j = 0; j < Spalten; j++) { BubbleFarbe farbe = (BubbleFarbe)rnd.Next(1, 5); Matrix[i, j].FarbeFestlegen(farbe); } } }
/// <summary> /// Starten des Suchmechanismus und initialisieren des Zugscores /// </summary> /// <param name="x"></param> /// <param name="y"></param> public int FindeGleicheNachbarn(int x, int y) { BubbleFarbe farbe = Matrix[x, y].Farbe; GefundeneGleichfarbigeNachbarn = 0; minX = x; minY = y; maxX = x; maxY = y; GleicheNachbarnFindenRekursiv(x, y, farbe); Score += (GefundeneGleichfarbigeNachbarn * (GefundeneGleichfarbigeNachbarn - 1)); return(GefundeneGleichfarbigeNachbarn); }
/// <summary> /// Rekursiver Suchmechanismus /// </summary> /// <param name="x"></param> /// <param name="y"></param> /// <param name="farbe"></param> protected void GleicheNachbarnFindenRekursiv(int x, int y, BubbleFarbe farbe) { if (Matrix[x, y].FarbVergleich(farbe) && Matrix[x, y].Status != ZellStatus.Ausgewaehlt) { Matrix[x, y].Auswaehlen(); GefundeneGleichfarbigeNachbarn++; minX = Math.Min(minX, x); maxX = Math.Max(maxX, x); minY = Math.Min(minY, y); maxY = Math.Max(maxY, y); if (y + 1 < Spalten) { GleicheNachbarnFindenRekursiv(x, y + 1, farbe); } if (y - 1 >= 0) { GleicheNachbarnFindenRekursiv(x, y - 1, farbe); } if (x + 1 < Zeilen) { GleicheNachbarnFindenRekursiv(x + 1, y, farbe); } if (x - 1 >= 0) { GleicheNachbarnFindenRekursiv(x - 1, y, farbe); } if (GefundeneGleichfarbigeNachbarn == 1) { Matrix[x, y].FarbeFestlegen(farbe); } } }
/// <summary> /// Übertragen des Inhalts einer anderen Zelle (für die Rotation) in die eigene Zelle /// </summary> /// <param name="zelle"></param> public void VonZelleUebertragen(Zelle zelle) { Farbe = zelle.Farbe; Status = zelle.Status; }
/// <summary> /// Vergleichen der Farben /// </summary> /// <param name="farbe"></param> /// <returns>True, wenn Übereinstimming</returns> public bool FarbVergleich(BubbleFarbe farbe) { return(Farbe == farbe); }