Ejemplo n.º 1
0
 public IPuzzleMove selectMove(IPuzzleState gameState)
 {
     if (rnd.NextDouble() < inertiaProbability)
     {
         List <IPuzzleMove> moves = gameState.GetMoves();
         SokobanGameState   state = (SokobanGameState)gameState;
         foreach (IPuzzleMove m in moves)
         {
             SokobanPushMove push = (SokobanPushMove)m;
             if (push.MoveList.Count() == 0)
             {
                 return(m);
             }
         }
     }
     return(gameState.GetRandomMove());
 }
Ejemplo n.º 2
0
        public static GoalMacro GenerateGoalMacro(Position playerPosition, Position goal, Position entrance, List <Position> boxesInGoal, SokobanGameState state)
        {
            SokobanGameState clone = (SokobanGameState)state.Clone();

            clone.ClearBoardForGoalMacro(boxesInGoal, goal, entrance);

            if (clone.Board[playerPosition.X, playerPosition.Y] == SokobanGameState.EMPTY || clone.Board[playerPosition.X, playerPosition.Y] == SokobanGameState.GOAL)
            {
                clone.SetPlayerPosition(playerPosition);
                AbstractSokobanState clearState = new AbstractSokobanState(clone.ToString(), clone.RewardType, false, false, false, false, clone.SimulationStrategy, null);
                SokobanPushMove      pushMove   = SolveMacro(clearState);
                if (pushMove != null)
                {
                    return(new GoalMacro(playerPosition, pushMove));
                }
            }
            return(null);
        }
Ejemplo n.º 3
0
 private void Init(SokobanGameState state, RewardType rewardType, bool useNormalizedPosition, bool useGoalMacro, bool useTunnelMacro, bool useGoalCut, ISPSimulationStrategy simulationStrategy, MersenneTwister rng = null)
 {
     this.useNormalizedPosition = useNormalizedPosition;
     this.state = (SokobanGameState)state;
     if (simulationStrategy == null)
     {
         simulationStrategy = new SokobanRandomStrategy();
     }
     if (rng == null)
     {
         rng = new MersenneTwister();
     }
     this.rng                 = rng;
     this.rewardType          = rewardType;
     this.simulationStrategy  = simulationStrategy;
     normalizedPlayerPosition = new Position(state.PlayerX, state.PlayerY);
     availableMoves           = null;
     this.useGoalMacro        = useGoalMacro;
     this.useTunnelMacro      = useTunnelMacro;
     this.useGoalCut          = useGoalCut;
     if (useGoalMacro)
     {
         goalMacroTree = GoalMacroWrapper.BuildMacroTree(this);
         if (goalMacroTree.Roots.Length > 0)
         {
             currentGoalMacroNode = GetInitialMacroNode(goalMacroTree.Roots[0], state.GetGoalMacroHash(goalMacroTree.GoalsInRoom));
             if (currentGoalMacroNode == null)
             {
                 this.useGoalMacro = false;
             }
         }
         else
         {
             this.useGoalMacro = false;
         }
     }
 }
Ejemplo n.º 4
0
 public AbstractSokobanState(SokobanGameState state, RewardType rewardType, bool useNormalizedPosition, bool useGoalMacro, bool useTunnelMacro, bool useGoalCut, ISPSimulationStrategy simulationStrategy = null, MersenneTwister rng = null)
 {
     Init(state, rewardType, useNormalizedPosition, useGoalMacro, useTunnelMacro, useGoalCut, simulationStrategy, rng);
 }