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

📄 applet1.java

📁 学习数据结构的最好辅助工具,快速帮助你熟悉数据结构的相关技术
💻 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 + -