Android Open Source - slider Frame Scrambler






From Project

Back to project page slider.

License

The source code is released under:

Apache License

If you think the Android project slider listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package de.devisnik.sliding;
//www  . j a v a  2 s.  c  o m
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Random;
 
public class FrameScrambler {

  private final static IMove[] MOVES = new IMove[] { MoveFactory.LEFT,
      MoveFactory.RIGHT, MoveFactory.DOWN, MoveFactory.UP };

  private final IFrame itsFrame;

  private final IRandom itsRandom;

  public FrameScrambler(IFrame frame, IRandom random) {
    this.itsFrame = frame;
    this.itsRandom = random;
  }

  public IMove[] scramble(int numberOfMoves) {
    return scrambleGame(numberOfMoves);
  }

  public IMove[] scramble() {
    Point size = itsFrame.getSize();
    int pieces = size.x * size.y;
    return scramble(pieces * 10);
  }

  private IMove[] scrambleGame(int numberOfMoves) {
    final IMove[] moves = new IMove[numberOfMoves];
    IMove lastInverse = null;
    for (int index = 0; index < moves.length; index++) {
      IMove randomMove = moveRandomAvoiding(lastInverse);
      lastInverse = MoveFactory.getInverse(randomMove);
      moves[index] = randomMove;
    }
    return moves;
  }

  private IMove moveRandomAvoiding(IMove avoid) {
    List<IMove> validMoves = determinePossibleMoves();
    validMoves.remove(avoid);
    return executeRandomMoveFrom(validMoves);
  }

  private IMove executeRandomMoveFrom(List<IMove> moves) {
    IMove move = moves.get(itsRandom.nextInt(moves.size()));
    if (!itsFrame.execute(move))
      throw new IllegalStateException("move not executable!");
    return move;
  }

  public List<IMove> determinePossibleMoves() {
    ArrayList<IMove> moves = new ArrayList<IMove>();
    moves.addAll(Arrays.asList(MOVES));
    Point holePosition = itsFrame.getHole().getPosition();
    if (holePosition.x == 0)
      moves.remove(MoveFactory.LEFT);
    Point frameDimension = itsFrame.getSize();
    if (holePosition.x == frameDimension.x - 1)
      moves.remove(MoveFactory.RIGHT);
    if (holePosition.y == 0)
      moves.remove(MoveFactory.UP);
    if (holePosition.y == frameDimension.y - 1)
      moves.remove(MoveFactory.DOWN);
    return moves;
  }

  public static void main(String[] args) {
    new FrameScrambler(FrameFactory.create(4, 4), new IRandom() {
      Random random = new Random();

      public int nextInt(int border) {
        return random.nextInt(border);
      }
    }).scramble();
  }
}




Java Source Code List

de.devisnik.android.sliding.ARandom.java
de.devisnik.android.sliding.FPSCounter.java
de.devisnik.android.sliding.FrameDrawer.java
de.devisnik.android.sliding.ISpeed.java
de.devisnik.android.sliding.ImageCache.java
de.devisnik.android.sliding.ImageFactory.java
de.devisnik.android.sliding.Logger.java
de.devisnik.android.sliding.OpenActivity.java
de.devisnik.android.sliding.OpenPreviewActivity.java
de.devisnik.android.sliding.PropertiesBuilder.java
de.devisnik.android.sliding.RenderHandler.java
de.devisnik.android.sliding.Replayer.java
de.devisnik.android.sliding.Settings.java
de.devisnik.android.sliding.SlidingPreferences.java
de.devisnik.android.sliding.SlidingWallpaper.java
de.devisnik.android.sliding.SpeedFactory.java
de.devisnik.android.sliding.SummaryUpdater.java
de.devisnik.android.sliding.tile.BitmapCachingPieceDrawer.java
de.devisnik.android.sliding.tile.CachingPieceDrawer.java
de.devisnik.android.sliding.tile.IPieceDrawer.java
de.devisnik.android.sliding.tile.ImagePieceDrawer.java
de.devisnik.android.sliding.tile.NumberPieceDrawer.java
de.devisnik.android.sliding.tile.PieceDrawerFactory.java
de.devisnik.android.sliding.tile.TileShifter.java
de.devisnik.android.sliding.tile.TileStore.java
de.devisnik.android.sliding.tile.Tile.java
de.devisnik.sliding.FrameFactory.java
de.devisnik.sliding.FrameScrambler.java
de.devisnik.sliding.FromHomeShiftingEvent.java
de.devisnik.sliding.IFrameListener.java
de.devisnik.sliding.IFrame.java
de.devisnik.sliding.IHole.java
de.devisnik.sliding.IMove.java
de.devisnik.sliding.IPiece.java
de.devisnik.sliding.IRandom.java
de.devisnik.sliding.IRobotFrame.java
de.devisnik.sliding.IShifterListener.java
de.devisnik.sliding.MoveFactory.java
de.devisnik.sliding.Point.java
de.devisnik.sliding.ShiftingEvent.java
de.devisnik.sliding.ToHomeShiftingEvent.java
de.devisnik.sliding.animation.AccelerateDecelerateInterpolator.java
de.devisnik.sliding.animation.AnimationRunner.java
de.devisnik.sliding.animation.Animation.java
de.devisnik.sliding.animation.IInterpolator.java
de.devisnik.sliding.animation.IMovement.java
de.devisnik.sliding.animation.IShiftable.java
de.devisnik.sliding.animation.LinearInterpolator.java
de.devisnik.sliding.animation.MetaShiftable.java
de.devisnik.sliding.animation.ShiftAnimation.java
de.devisnik.sliding.animation.Translation.java
de.devisnik.sliding.impl.Frame.java
de.devisnik.sliding.impl.Hole.java
de.devisnik.sliding.impl.Move.java
de.devisnik.sliding.impl.PieceIterator.java
de.devisnik.sliding.impl.Piece.java
de.devisnik.sliding.impl.RobotFrame.java
de.devisnik.sliding.impl.Scrambler.java