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

📄 maze3d.java

📁 Java编写的求解迷宫问题的小程序
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
/*

        Copyright (c) 1996 James L. Dean

        This program may be distributed or used without payment to its author
   so long as the copyright notices are not altered or removed.

        The author -- James L. Dean -- can be contacted via Email as
   csvcjld@nomvs.lsumc.edu.

*/

import java.awt.*;
import java.applet.*;
import java.util.Date;

public class Maze3D extends Applet
  {
    public  boolean      clearUserAttempts;
    public  boolean      hexagonalRooms;
    private MazeControls mazeControls;
    public  MazeCanvas   mazeCanvas;
    public  TextField    message;
    public  boolean      solutionDisplayed;
    public  double       tilt;
    private Scrollbar    tiltScrollbar;

    public void init()
      {
        solutionDisplayed=false;
        setLayout(new BorderLayout());
        Panel CenterPanel=new Panel();
        hexagonalRooms=false;
        mazeCanvas=new MazeCanvas(this);
        add("Center",mazeCanvas);
        mazeControls=new MazeControls(this);
        add("South",mazeControls);
        tilt=45.0;
        tiltScrollbar=new Scrollbar(Scrollbar.VERTICAL,(int) tilt,5,30,60);
        add("East",tiltScrollbar);
        message=new TextField(117);
        message.setEditable(false);
        add("North",message);
        resize(600,350);
        if (hexagonalRooms)
          message.setText("Use Home, Up Arrow, PgUp, End, Down "
           +"Arrow, or PgDn to solve.");
        else
          message.setText("Use the arrow keys to solve.");
      }

    public void start()
      {
        mazeControls.enable();
        mazeControls.requestFocus();
      }

    public void stop()
      {
        mazeControls.disable();
      }

    public void destroy()
      {
        mazeCanvas.p.stop();
      }

    public boolean handleEvent(
      Event ev)
        {
          boolean handled;
          if (ev.target == tiltScrollbar)
            {
              if (! mazeCanvas.p.alreadyPainting)
                {
                  if ((solutionDisplayed)
                  ||  (mazeCanvas.p.userHasSolved))
                    message.setText("");
                  else
                    if (hexagonalRooms)
                      message.setText("Use Home, Up Arrow, PgUp, End, Down "
                       +"Arrow, or PgDn to solve.");
                    else
                      message.setText("Use the arrow keys to solve.");
                }
              tilt=(double) (90-tiltScrollbar.getValue());
              mazeCanvas.paint(mazeCanvas.getGraphics());
              handled=true;
            }
          else
            handled=false;
          return handled;
        }

    public static void main(String args[])
      {
/*
        If you have AppletFrame.class (available in the Beta 2 release of
        the Javas Developers kit), you can uncomment the next line to have
        this applet run as an application (as well as an applet).
*/
//      AppletFrame.startApplet("Maze3D","3D Mazes",args);
      }
  }

class MazeControls extends Panel
  {
    Checkbox   hexagonalRoomsCheckbox;
    Maze3D     maze3D;
    Checkbox   squareRoomsCheckbox;

    public MazeControls(Maze3D maze3D)
      {
        this.maze3D=maze3D;
        add(new Button("New"));
        add(new Button("Solve"));
        add(new Button("Clear"));
        hexagonalRoomsCheckbox
         =new Checkbox("Hexagonal rooms");
        hexagonalRoomsCheckbox.setState(maze3D.hexagonalRooms);
        add("South",hexagonalRoomsCheckbox);
        squareRoomsCheckbox=new Checkbox("Square rooms");
        squareRoomsCheckbox.setState(! maze3D.hexagonalRooms);
        add("South",squareRoomsCheckbox);
        add(new Button("About"));
      }

    public boolean keyDown(
      Event ev,
      int   key)
        {
          boolean handled;
          if (maze3D.mazeCanvas.p.alreadyPainting)
            handled=false;
          else
            if ((maze3D.solutionDisplayed)
            ||  (maze3D.mazeCanvas.p.userHasSolved))
              {
                maze3D.message.setText("");
                handled=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.");
                if (maze3D.hexagonalRooms)
                  switch (key)
                    {
                      case ev.LEFT:
                        handled=true;
                        break;
                      case (int) '4':
                        handled=true;
                        break;
                      case ev.RIGHT:
                        handled=true;
                        break;
                      case (int) '6':
                        handled=true;
                        break;
                      case ev.UP:
                        maze3D.mazeCanvas.p.hexKey(2);
                        handled=true;
                        break;
                      case (int) '8':
                        maze3D.mazeCanvas.p.hexKey(2);
                        handled=true;
                        break;
                      case ev.DOWN:
                        maze3D.mazeCanvas.p.hexKey(3);
                        handled=true;
                        break;
                      case (int) '2':
                        maze3D.mazeCanvas.p.hexKey(3);
                        handled=true;
                        break;
                      case ev.HOME:
                        maze3D.mazeCanvas.p.hexKey(0);
                        handled=true;
                        break;
                      case (int) '7':
                        maze3D.mazeCanvas.p.hexKey(0);
                        handled=true;
                        break;
                      case ev.END:
                        maze3D.mazeCanvas.p.hexKey(1);
                        handled=true;
                        break;
                      case (int) '1':
                        maze3D.mazeCanvas.p.hexKey(1);
                        handled=true;
                        break;
                      case ev.PGUP:
                        maze3D.mazeCanvas.p.hexKey(4);
                        handled=true;
                        break;
                      case (int) '9':
                        maze3D.mazeCanvas.p.hexKey(4);
                        handled=true;
                        break;
                      case ev.PGDN:
                        maze3D.mazeCanvas.p.hexKey(5);
                        handled=true;
                        break;
                      case (int) '3':
                        maze3D.mazeCanvas.p.hexKey(5);
                        handled=true;
                        break;
                      default:
                        handled=false;
                        break;
                    }
                else
                  switch (key)
                    {
                      case ev.LEFT:
                        maze3D.mazeCanvas.p.sqrKey(0);
                        handled=true;
                        break;
                      case (int) '4':
                        maze3D.mazeCanvas.p.sqrKey(0);
                        handled=true;
                        break;
                      case ev.RIGHT:
                        maze3D.mazeCanvas.p.sqrKey(2);
                        handled=true;
                        break;
                      case (int) '6':
                        maze3D.mazeCanvas.p.sqrKey(2);
                        handled=true;
                        break;
                      case ev.UP:
                        maze3D.mazeCanvas.p.sqrKey(3);
                        handled=true;
                        break;
                      case (int) '8':
                        maze3D.mazeCanvas.p.sqrKey(3);
                        handled=true;
                        break;
                      case ev.DOWN:
                        maze3D.mazeCanvas.p.sqrKey(1);
                        handled=true;
                        break;
                      case (int) '2':
                        maze3D.mazeCanvas.p.sqrKey(1);
                        handled=true;
                        break;
                      case ev.HOME:
                        handled=true;
                        break;
                      case (int) '7':
                        handled=true;
                        break;
                      case ev.END:
                        handled=true;
                        break;
                      case (int) '1':
                        handled=true;
                        break;
                      case ev.PGUP:
                        handled=true;
                        break;
                      case (int) '9':
                        handled=true;
                        break;
                      case ev.PGDN:
                        handled=true;
                        break;
                      case (int) '3':
                        handled=true;
                        break;
                      default:
                        handled=false;
                        break;
                    }
                if (maze3D.mazeCanvas.p.userHasSolved)
                  maze3D.message.setText("Congratulations!");
              }
          return handled;
        }

    public boolean action(
      Event ev,
      Object arg)
        {
          boolean handled;
          if (ev.target instanceof Button)
            {
              String label=(String) arg;
              if (label.equals("New"))
                {
                  maze3D.solutionDisplayed=false;
                  maze3D.mazeCanvas.previousHeight=0;
                  maze3D.mazeCanvas.previousWidth=0;
                  maze3D.mazeCanvas.paint(maze3D.mazeCanvas.getGraphics());
                }
              else if (label.equals("Solve"))
                {
                  maze3D.message.setText("");
                  maze3D.solutionDisplayed=true;
                  if (maze3D.mazeCanvas.p.alreadyPainting)
                    maze3D.mazeCanvas.paint(
                     maze3D.mazeCanvas.getGraphics());
                  else
                    if (maze3D.hexagonalRooms)
                      maze3D.mazeCanvas.p.hexDisplaySolution();
                    else
                      maze3D.mazeCanvas.p.sqrDisplaySolution();
                }
              else if (label.equals("Clear"))
                {
                  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;
                  maze3D.clearUserAttempts=true;
                  maze3D.mazeCanvas.paint(
                   maze3D.mazeCanvas.getGraphics());
                }
              else
                {
                  if (label.equals("About"))
                    maze3D.message.setText(
                     "Copyright (c) 1996 James L. Dean.  This program may be "
                     +"distributed or used without payment to its author.");
                }
              handled=true;
            }
          else if (ev.target == hexagonalRoomsCheckbox)
            {
              squareRoomsCheckbox.setState(false);
              hexagonalRoomsCheckbox.setState(true);
              if (! maze3D.hexagonalRooms)
                {
                  maze3D.hexagonalRooms=true;
                  maze3D.solutionDisplayed=false;
                  maze3D.mazeCanvas.previousHeight=0;
                  maze3D.mazeCanvas.previousWidth=0;
                  maze3D.mazeCanvas.paint(
                   maze3D.mazeCanvas.getGraphics());
                }
              handled=true;
            }
          else if (ev.target == squareRoomsCheckbox)
            {
              squareRoomsCheckbox.setState(true);
              hexagonalRoomsCheckbox.setState(false);
              if (maze3D.hexagonalRooms)
                {
                  maze3D.hexagonalRooms=false;
                  maze3D.solutionDisplayed=false;
                  maze3D.mazeCanvas.previousHeight=0;
                  maze3D.mazeCanvas.previousWidth=0;
                  maze3D.mazeCanvas.paint(
                   maze3D.mazeCanvas.getGraphics());
                }
              handled=true;

⌨️ 快捷键说明

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