/// <summary> /// lädt eine bestimmte Stellung /// </summary> /// <param name="stellung">Stellung, welche geladen werden soll</param> public void LadeStellung(SokowahnStellungRun stellung) { raumSpielerPos = stellung.raumSpielerPos; spielerZugTiefe = stellung.zugTiefe; // alte Kisten entfernen for (int i = 0; i < kistenAnzahl; i++) raumZuKisten[kistenZuRaum[i]] = kistenAnzahl; // neue Kisten setzen for (int i = 0; i < kistenAnzahl; i++) raumZuKisten[kistenZuRaum[i] = stellung.kistenZuRaum[i]] = i; }
/// <summary> /// trägt eine noch zu prüfende Stellung in die Vorwärtssuche ein /// </summary> /// <param name="stellung">Stellung, welche eingetragen werden soll</param> void VorwärtsAdd(SokowahnStellungRun stellung, SokowahnPunkte punkte) { int tiefePos = stellung.zugTiefe; while (tiefePos >= vorwärtsSucher.Length) { Array.Resize(ref vorwärtsSucher, vorwärtsSucher.Length + 1); vorwärtsSucher[vorwärtsSucher.Length - 1] = new SokowahnLinearList2(raumBasis.KistenAnzahl + 1 + 2, TempOrdner); Array.Resize(ref vorwärtsSucherPunkte, vorwärtsSucherPunkte.Length + 1); vorwärtsSucherPunkte[vorwärtsSucherPunkte.Length - 1] = new Dictionary<int, int>(); } vorwärtsSucher[tiefePos].Add(stellung.raumSpielerPos, stellung.kistenZuRaum, punkte); vorwärtsSucherPunkte[tiefePos][punkte.tiefeMax] = vorwärtsSucherPunkte[tiefePos].TryGetValue(punkte.tiefeMax, 0) + 1; }
/// <summary> /// gibt eine bestimmte Stellung direkt als sichtbaren String aus (ohne die eigene Stellung zu beeinflussen) /// </summary> /// <param name="stellung">Stellung, welche ausgelesen werden soll</param> /// <returns>lesbare Stellung</returns> public string Debug(SokowahnStellungRun stellung) { ushort[] tmpData = new ushort[kistenAnzahl + 1]; stellung.SpeichereStellung(tmpData, 0); return Debug(tmpData, 0, stellung.zugTiefe); }