⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 maze3d.java

📁 Java编写的求解迷宫问题的小程序
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
            }
          else
            handled=false;
          return handled;
        }
  }

class MazeCanvas extends Canvas
  {
    private boolean     invalidated;
    public  Maze3D      maze3D;
    public  PaintScreen p;
    public  int         previousHeight;
    public  int         previousWidth;
    public  Rectangle   rectangle;
    public  boolean     resize;

    MazeCanvas(Maze3D maze3D)
      {
        this.maze3D=maze3D;
        invalidated=false;
        previousWidth=0;
        previousHeight=0;
        p=new PaintScreen(this);
        p.start();
      }

    public void paint(Graphics g)
      {
        if (invalidated)
          {
            invalidated=false;
            rectangle=bounds();
            if ((previousWidth == rectangle.width)
            &&  (previousHeight == rectangle.height))
              resize=false;
            else
              {
                if (maze3D.hexagonalRooms)
                  maze3D.message.setText("Use Home, Up Arrow, PgUp, End, "
                   +"Down Arrow, or PgDn to solve.");
                else
                  maze3D.message.setText("Use the arrow keys to solve.");
                maze3D.solutionDisplayed=false;
                resize=true;
                previousWidth=rectangle.width;
                previousHeight=rectangle.height;
              }
            p.startOver(true);
          }
        else
          {
            invalidated=true;
            hide();
            show();
          }
      }
  }

class VertexRec
  {
    double x;
    double y;

    VertexRec()
      {
        x=0.0;
        y=0.0;
      }
  }

class StackRec
  {
    short index1;
    short index2;

    StackRec()
      {
        index1=(short) 0;
        index2=(short) 0;
      }
  }

class POINT
  {
    int x;
    int y;

    POINT()
      {
        x=0;
        y=0;
      }
  }

class PaintScreen extends Thread
  {
    static private final int       NUM_COLORS                 = 16;
    static private final int       TOP_COLOR                  = 12;
      /* all but last 3 colors are gray */
    static private final int       RECTANGLE_SE_NW_COLOR      = 10;
    static private final int       TRIANGLE_SSE_NNW_COLOR     =  9;
    static private final int       TRIANGLE_SE_NW_COLOR       =  8;
    static private final int       RECTANGLE_W_E_COLOR        =  7;
    static private final int       FLOOR_COLOR                =  6;
    static private final int       TRIANGLE_SW_NE_COLOR       =  5;
    static private final int       RECTANGLE_SW_NE_COLOR      =  4;
    static private final int       TRIANGLE_SSW_NNE_COLOR     =  3;
    static private final int       BACKOUT_COLOR              = 13;
    static private final int       ADVANCE_COLOR              = 14;
    static private final int       SOLUTION_COLOR             = 15;
    static private final double    RELATIVE_WIDTH_OF_WALL     = 0.25;
      /* relative to side of hexagon or square */
    static private final double    RELATIVE_HEIGHT_OF_WALL    = 2.0;
      /* relative to side of hexagon or square */
    static private final double    MIN_WALL_LENGTH_IN_INCHES  = 0.20;
    static private final double    SECONDS_FOR_MAZE_SELECTION = 0.25;
    static private final int       SUBSTITUTION_HIGH [] =
                  { 4,1,2,8,8,9,9,6,5,7,2,1,2,9,8,8,6,3,5,1,9,5,4,4,9,8,6,
                    0,8,0,6,0,2,4,1,9,2,0,7,4,7,3,0,0,2,6,8,9,4,0,8,3,2,3,
                    2,5,2,4,6,9,7,9,1,3,5,7,1,1,4,5,8,1,6,0,5,7,8,2,3,3,7,
                    3,5,1,7,5,4,0,3,6,3,7,7,1,9,4,0,5,6,6
                  };
    static private final int       SUBSTITUTION_LOW [] =
                  { 1,2,2,1,5,5,4,6,4,6,4,4,5,6,6,3,0,9,6,5,7,2,0,9,3,4,2,
                    3,9,1,9,9,9,3,8,9,3,4,1,5,0,5,2,7,0,8,8,0,4,5,0,3,6,8,
                    1,7,8,8,7,1,3,2,7,7,1,8,0,3,7,5,2,6,4,0,9,9,7,7,4,6,2,
                    0,0,1,7,3,6,6,1,1,2,4,5,9,8,2,8,8,3,5
                  };

    private int        adjacency;
    public  boolean    alreadyPainting;
    private VertexRec  baseRectangle [] [];
    private VertexRec  baseTriangle [] [];
    private boolean    clearUserAttempts;
    private char       computerPage [] [];
    private double     cosTilt;
    private int        counter0;
    private int        counter1;
    private int        counter2;
    private int        counter3;
    private int        counter4;
    private int        counter5;
    private int        counter6;
    private int        counter7;
    private Graphics   graph;
    private boolean    hexagonalRooms;
    private int        hexDeltaX [] [];
    private int        hexDeltaY [] [];
    private int        maxX;
    private int        maxY;
    private MazeCanvas mazeCanvas;
    private boolean    minimized;
    private int        numColumns;
    private int        numRoomsInMaze;
    private int        numRoomsInSolution;
    private int        numRows;
    private boolean    paint;
    private double     pixelsPerX;
    private double     pixelsPerZ;
    public  VertexRec  rectangle [] [];
    private Color      redGreenBlue [];
    private double     relDistOfUserFromScreen;
    private boolean    resize;
    public  boolean    restart;
    private Rectangle  screen;
    private int        seed [];
    private double     sinTilt;
    private boolean    solutionDisplayed;
    private int        sqrDeltaX [] [];
    private int        sqrDeltaY [] [];
    private double     sqrt3;
    private StackRec   stack [];
    public  int        state;
    private double     tilt;
    public  boolean    userHasSolved;
    private char       userPage [] [];
    private int        userX;
    private double     userXRelative;
    private int        userY;
    private double     userYRelative;
    private int        x;
    private double     xMax;
    private double     xOffset;
    private int        y;
    private double     yMax;
    private int        yMod4;
    private double     yOffset;

    PaintScreen(MazeCanvas mazeCanvas)
      {
        int  colorNum;
        int  deltaIndex1a;
        int  deltaIndex1b;
        int  deltaIndex1c;
        int  deltaIndex1d;
        int  deltaIndex1e;
        int  deltaIndex1f;
        int  deltaIndex2;
        int  objectNum;
        int  tint;
        int  vertexNum;

        setDaemon(true);
        this.mazeCanvas=mazeCanvas;
        restart=false;
        hexagonalRooms=this.mazeCanvas.maze3D.hexagonalRooms;
        clearUserAttempts=true;
        state=5;
        baseRectangle=new VertexRec [6] [4];
        for (objectNum=0; objectNum < 6; ++objectNum)
          for (vertexNum=0; vertexNum < 4; ++vertexNum)
            baseRectangle[objectNum][vertexNum]
             =new VertexRec();
        rectangle=new VertexRec [6] [4];
        for (objectNum=0; objectNum < 6; ++objectNum)
          for (vertexNum=0; vertexNum < 4; ++vertexNum)
            rectangle[objectNum][vertexNum]
             =new VertexRec();
        baseTriangle=new VertexRec [4] [3];
        for (objectNum=0; objectNum < 4; ++objectNum)
          for (vertexNum=0; vertexNum < 3; ++vertexNum)
            baseTriangle[objectNum][vertexNum]
             =new VertexRec();
        hexDeltaX=new int [6] [720];
        hexDeltaY=new int [6] [720];
        sqrDeltaX=new int [4] [24];
        sqrDeltaY=new int [4] [24];
        redGreenBlue=new Color [16];
        computerPage=null;
        userPage=null;
        stack=null;
        alreadyPainting=false;
        solutionDisplayed=false;
        userHasSolved=false;
        minimized=false;

        hexDeltaY[0][0]=-1;
        hexDeltaX[0][0]=-2;
        hexDeltaY[1][0]=1;
        hexDeltaX[1][0]=-2;
        hexDeltaY[2][0]=-2;
        hexDeltaX[2][0]=0;
        hexDeltaY[3][0]=2;
        hexDeltaX[3][0]=0;
        hexDeltaY[4][0]=-1;
        hexDeltaX[4][0]=2;
        hexDeltaY[5][0]=1;
        hexDeltaX[5][0]=2;
        deltaIndex2=0;
        for (deltaIndex1a=0; deltaIndex1a < 6;
         ++deltaIndex1a)
          for (deltaIndex1b=0; deltaIndex1b < 6;
           ++deltaIndex1b)
            if (deltaIndex1a != deltaIndex1b)
              for (deltaIndex1c=0; deltaIndex1c < 6; ++deltaIndex1c)
                if ((deltaIndex1a != deltaIndex1c)
                &&  (deltaIndex1b != deltaIndex1c))
                  for (deltaIndex1d=0; deltaIndex1d < 6; ++deltaIndex1d)
                    if ((deltaIndex1a != deltaIndex1d)
                    &&  (deltaIndex1b != deltaIndex1d)
                    &&  (deltaIndex1c != deltaIndex1d))
                      for (deltaIndex1e=0; deltaIndex1e < 6; ++deltaIndex1e)
                        if ((deltaIndex1a != deltaIndex1e)
                        &&  (deltaIndex1b != deltaIndex1e)
                        &&  (deltaIndex1c != deltaIndex1e)
                        &&  (deltaIndex1d != deltaIndex1e))
                          for (deltaIndex1f=0; deltaIndex1f < 6; ++deltaIndex1f)
                            if ((deltaIndex1a != deltaIndex1f)
                            && (deltaIndex1b != deltaIndex1f)
                            && (deltaIndex1c != deltaIndex1f)
                            && (deltaIndex1d != deltaIndex1f)
                            && (deltaIndex1e != deltaIndex1f))
                              {
                                hexDeltaX[deltaIndex1a][deltaIndex2]
                                 =hexDeltaX[0][0];
                                hexDeltaY[deltaIndex1a][deltaIndex2]
                                 =hexDeltaY[0][0];
                                hexDeltaX[deltaIndex1b][deltaIndex2]
                                 =hexDeltaX[1][0];
                                hexDeltaY[deltaIndex1b][deltaIndex2]
                                 =hexDeltaY[1][0];
                                hexDeltaX[deltaIndex1c][deltaIndex2]
                                 =hexDeltaX[2][0];
                                hexDeltaY[deltaIndex1c][deltaIndex2]
                                 =hexDeltaY[2][0];
                                hexDeltaX[deltaIndex1d][deltaIndex2]
                                 =hexDeltaX[3][0];
                                hexDeltaY[deltaIndex1d][deltaIndex2]
                                 =hexDeltaY[3][0];
                                hexDeltaX[deltaIndex1e][deltaIndex2]
                                 =hexDeltaX[4][0];
                                hexDeltaY[deltaIndex1e][deltaIndex2]
                                 =hexDeltaY[4][0];
                                hexDeltaX[deltaIndex1f][deltaIndex2]
                                 =hexDeltaX[5][0];
                                hexDeltaY[deltaIndex1f][deltaIndex2++]
                                 =hexDeltaY[5][0];
                              }
        sqrDeltaY[0][0]=0;
        sqrDeltaX[0][0]=-1;
        sqrDeltaY[1][0]=1;
        sqrDeltaX[1][0]=0;
        sqrDeltaY[2][0]=0;
        sqrDeltaX[2][0]=1;
        sqrDeltaY[3][0]=-1;
        sqrDeltaX[3][0]=0;
        deltaIndex2=0;
        for (deltaIndex1a=0; deltaIndex1a < 4; ++deltaIndex1a)
          for (deltaIndex1b=0; deltaIndex1b < 4; ++deltaIndex1b)
            if (deltaIndex1a != deltaIndex1b)
              for (deltaIndex1c=0; deltaIndex1c < 4; ++deltaIndex1c)
                if ((deltaIndex1a != deltaIndex1c)
                &&  (deltaIndex1b != deltaIndex1c))
                  for (deltaIndex1d=0; deltaIndex1d < 4; ++deltaIndex1d)
                    if ((deltaIndex1a != deltaIndex1d)
                    &&  (deltaIndex1b != deltaIndex1d)
                    &&  (deltaIndex1c != deltaIndex1d))
                      {
                        sqrDeltaX[deltaIndex1a][deltaIndex2]=sqrDeltaX[0][0];
                        sqrDeltaY[deltaIndex1a][deltaIndex2]=sqrDeltaY[0][0];
                        sqrDeltaX[deltaIndex1b][deltaIndex2]=sqrDeltaX[1][0];
                        sqrDeltaY[deltaIndex1b][deltaIndex2]=sqrDeltaY[1][0];
                        sqrDeltaX[deltaIndex1c][deltaIndex2]=sqrDeltaX[2][0];
                        sqrDeltaY[deltaIndex1c][deltaIndex2]=sqrDeltaY[2][0];
                        sqrDeltaX[deltaIndex1d][deltaIndex2]=sqrDeltaX[3][0];
                        sqrDeltaY[deltaIndex1d][deltaIndex2++]=sqrDeltaY[3][0];
                      }
        sqrt3=Math.sqrt(3.0);
        for (colorNum=0; colorNum <= NUM_COLORS-4; ++colorNum)
          {
            /* evenly spaced shades of gray */
            tint=(256*colorNum)/(NUM_COLORS-3);
            redGreenBlue[colorNum]=new Color(tint,tint,tint);
          }
        redGreenBlue[BACKOUT_COLOR]=new Color(255,255,0);
        redGreenBlue[ADVANCE_COLOR]=new Color(0,255,0);
        redGreenBlue[SOLUTION_COLOR]=new Color(255,0,0);
      }

    private void drawQuadrilateral(
      POINT Box [],
      int   colorNum)
        {
          int i;
          int x [];
          int y [];

          x=new int [4];
          y=new int [4];
          for (i=0; i < 4; ++i)
            {
              x[i]=Box[i].x;
              y[i]=Box[i].y;
            }
          graph.setColor(redGreenBlue[colorNum]);
          graph.fillPolygon(x,y,4);
          return;
        }

    private POINT getCorner(
      double    x,

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -