📄 applet1.java
字号:
import java.awt.*;
import java.applet.*;
import Demo;
import GoThread;
import Maze;
import CVirtualMachine;
public class Applet1 extends Applet
{
private String sourceCode[] = {
"Status MazePath ( MazeType maze, PosType start, PosType end )", // 0
"{", // 1
" InitStack(S); curpos = start;", // 2
" curstep = 1;", // 3
" do {", // 4
" if (Pass (curpos))", // 5
" {", // 6
" FootPrint (curpos);", // 7
" e = ( curstep, curpos, 1 );", // 8
" Push (S,e);", // 9
" if ( curpos == end ) return (TRUE);", // 10
" curpos = NextPos ( curpos, 1 );", // 11
" curstep++;", // 12
" }", // 13
" else if (!StackEmpty(S))", // 14
" {", // 15
" Pop (S,e);", // 16
" while (e.di==4 && !StackEmpty(S))", // 17
" { MarkPrint (e.seat); Pop (S,e); }", // 18
" if (e.di<4)", // 19
" {", // 20
" e.di++; Push ( S, e);", // 21
" curpos = NextPos (curpos, e.di );", // 22
" }", // 23
" }", // 24
" } while ( !StackEmpty(S) );", // 25
" return (FALSE);", // 26
"}" }; // 27
public int m_step = 0;
private int m_numLines = 27;
private GoThread go;
public boolean m_paused = true;
private CVirtualMachine m_VM;
public int proceed()
{
switch(m_step)
{
case 0:
m_Maze.reset();
m_Maze.editable = false;
m_Maze.repaint();
return 2;
case 2:
m_SDemo.reset();
m_VM.m_curposX = 1; m_VM.m_curposY = 1;
tX.setText("1"); tY.setText("1");
return 3;
case 3:
m_VM.m_curstep = 1;
tStep.setText("1");
return 5;
case 5:
char temp = m_Maze.data[m_VM.m_curposY][m_VM.m_curposX];
m_Maze.flash(m_VM.m_curposX, m_VM.m_curposY);
if (temp ==' ' || temp=='*' || temp=='@') return 7;
else return 14;
case 7:
m_Maze.footprint(m_VM.m_curposX, m_VM.m_curposY);
return 8;
case 8:
m_VM.m_e = new StackCell(m_VM.m_curstep, m_VM.m_curposX, m_VM.m_curposY, 1);
tDir.setText("1");
return 9;
case 9:
if(m_SDemo.push(m_VM.m_e)) return 10;
return 27;
case 10:
if(m_VM.m_curposX == 8 && m_VM.m_curposY == 8) return 27;
return 11;
case 11:
m_VM.m_curposX++;
tX.setText(new Integer(m_VM.m_curposX).toString());
return 12;
case 12:
m_VM.m_curstep++;
tStep.setText(new Integer(m_VM.m_curstep).toString());
return 25;
case 14:
if(!m_SDemo.isEmpty()) return 16;
return 25;
case 16:
m_SDemo.pop(m_VM.m_e);
m_VM.m_curposX = m_VM.m_e.m_pos.x;
m_VM.m_curposY = m_VM.m_e.m_pos.y;
tX.setText(new Integer(m_VM.m_curposX).toString());
tY.setText(new Integer(m_VM.m_curposY).toString());
tDir.setText(new Integer(m_VM.m_e.m_dir).toString());
return 17;
case 17:
if(m_VM.m_e.m_dir==4 && !m_SDemo.isEmpty()) return 18;
return 19;
case 18:
m_Maze.markPrint(m_VM.m_e.m_pos.x, m_VM.m_e.m_pos.y);
m_SDemo.pop(m_VM.m_e);
m_VM.m_curposX = m_VM.m_e.m_pos.x;
m_VM.m_curposY = m_VM.m_e.m_pos.y;
tX.setText(new Integer(m_VM.m_curposX).toString());
tY.setText(new Integer(m_VM.m_curposY).toString());
tDir.setText(new Integer(m_VM.m_e.m_dir).toString());
return 17;
case 19:
if(m_VM.m_e.m_dir<4) return 21;
return 25;
case 21:
m_VM.m_e.m_dir++;
tDir.setText(new Integer(m_VM.m_e.m_dir).toString());
if(m_SDemo.push(m_VM.m_e)) return 22;
return 27;
case 22:
switch(m_VM.m_e.m_dir)
{
case 2:
m_VM.m_curposY ++; break;
case 3:
m_VM.m_curposX --; break;
case 4:
m_VM.m_curposY --;
}
tX.setText(new Integer(m_VM.m_curposX).toString());
tY.setText(new Integer(m_VM.m_curposY).toString());
return 25;
case 25:
if(!m_SDemo.isEmpty()) return 5;
return 26;
default:
m_Maze.editable = true;
return 0;
}
}
private GridBagLayout gbLayout;
private GridBagConstraints gbConstraints;
private TextArea Source;
public Button bNext, bReset, bGo;
private Demo m_SDemo;
private Maze m_Maze;
private TextField tStep, tX, tY, tDir;
private Label l1, l2, l3, l4;
private void addComponent(Component c, int column, int row, int width, int height)
{
gbConstraints.gridx = column;
gbConstraints.gridy = row;
gbConstraints.gridwidth = width;
gbConstraints.gridheight = height;
gbLayout.setConstraints(c, gbConstraints);
add(c);
}
/**
* The entry point for the applet.
*/
public void init()
{
gbLayout = new GridBagLayout();
setLayout( gbLayout );
gbConstraints = new GridBagConstraints();
Source = new TextArea( 20, 50);
Source.setEditable(false);
Source.setBackground(Color.white);
for(int i=0;i<m_numLines;i++) Source.append(sourceCode[i] + "\r\n");
bNext = new Button("执行下一句");
bReset = new Button("重置环境");
bGo = new Button("连续执行");
m_SDemo = new Demo();
m_SDemo.setSize(350, 85);
m_Maze = new Maze();
m_Maze.setSize(350, 250);
tStep = new TextField("1", 8);
tX = new TextField("1", 8);
tY = new TextField("1", 8);
tDir = new TextField("1", 8);
tStep.setEditable(false);
tX.setEditable(false);
tY.setEditable(false);
tDir.setEditable(false);
l1 = new Label(" curstep", Label.RIGHT);
l2 = new Label(" curpos.x", Label.RIGHT);
l3 = new Label(" curpos.y", Label.RIGHT);
l4 = new Label(" e.di", Label.RIGHT);
addComponent(Source, 0, 0, 4, 3);
addComponent(m_Maze, 4, 0, 4, 1);
addComponent(m_SDemo, 4, 1, 4, 1);
addComponent(l1, 4, 2, 1, 1);
addComponent(tStep, 5, 2, 1, 1);
addComponent(l4, 6, 2, 1, 1);
addComponent(tDir, 7, 2, 1, 1);
addComponent(bNext, 0, 3, 1, 1);
addComponent(bReset, 1, 3, 1, 1);
addComponent(bGo, 2, 3, 1, 1);
addComponent(l2, 4, 3, 1, 1);
addComponent(tX, 5, 3, 1, 1);
addComponent(l3, 6, 3, 1, 1);
addComponent(tY, 7, 3, 1, 1);
m_VM = new CVirtualMachine();
go = new GoThread(this);
go.start();
}
public boolean action(Event p1, Object p2)
{
if( p1.target == bNext )
{
m_step = proceed();
showSource();
}
else if( p1.target == bReset )
{
m_step = 0;
showSource();
m_SDemo.reset();
m_Maze.reset();
m_Maze.editable = true;
}
else if( p1.target == bGo )
{
if(m_paused)
{
bNext.setEnabled(false);
bReset.setEnabled(false);
go.resume();
bGo.setLabel("暂停执行");
m_paused = false;
}
else
{
go.suspend();
bGo.setLabel("连续执行");
m_paused = true;
bNext.setEnabled(true);
bReset.setEnabled(true);
}
}
return true;
}
public void showSource()
{
int start = 0;
for(int i=0; i<m_step; i++) start += sourceCode[i].length() + 1;
Source.select( start, start + sourceCode[m_step].length() );
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -