/// <summary>
    /// trägt eine noch zu prüfende Stellung in die Rückwärtssuche ein
    /// </summary>
    /// <param name="stellung">Stellung, welche eingetragen werden soll</param>
    void RückwärtsAdd(SokowahnStellung stellung)
    {
      int tiefePos = 60000 - stellung.zugTiefe;

      while (tiefePos >= rückwärtsSucher.Length)
      {
        Array.Resize(ref rückwärtsSucher, rückwärtsSucher.Length + 1);
        rückwärtsSucher[rückwärtsSucher.Length - 1] = new SokowahnLinearList2(raumBasis.KistenAnzahl + 1, TempOrdner, 16);
      }

      rückwärtsSucher[tiefePos].Add(stellung.raumSpielerPos, stellung.kistenZuRaum);
    }
Пример #2
0
    /// <summary>
    /// lädt eine bestimmte Stellung
    /// </summary>
    /// <param name="stellung">Stellung, welche geladen werden soll</param>
    public void LadeStellung(SokowahnStellung 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(SokowahnStellung 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;
    }
Пример #4
0
 /// <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(SokowahnStellung stellung)
 {
   ushort[] tmpData = new ushort[kistenAnzahl + 1];
   stellung.SpeichereStellung(tmpData, 0);
   return Debug(tmpData, 0, stellung.zugTiefe);
 }