📄 maze3d.java
字号:
/*
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 + -