1、 topPanel.setBounds(10, 0,160, 30); leftLeg.setBackground(Color.red); leftLeg.setBounds(35,30,30,50); rightLeg.setBackground(Color.red); rightLeg.setBounds(115,30,30, 50); name.setBounds(70, 100,60, 30); for (int i=0;imaxsize;i+) /记录型数组,记录该桌子上放的是哪些盘子,数组元素值为盘子下标。 recordi=-1; public void Setrecord(int
2、 y) /修改记录数组 recordnum-1=y; /记录最上面的盘子的序号 public void DeleoneRecord() /当移走某个盘子时,置相应的数组值为-1 recordnum-1=-1; public void Setinitialxy(int x ) /修改下一个盘子的盘放位置 initialx=x; public void Settopxy() topx=initialx+num*5; topy=initialy-num*10; public void Settopx(int x) topx=initialx+x*5; public void clear() num=
3、0; public void addone() this.num+; public void subone() this.num-;class MainPanel extends JPanel / Desk a,b,c; int speed; /移动速度 int defaultnum=3; / 初始盘子数 boolean changnum; Label plate=new Labelmaxsize; int bigestsize=140; int plateHeight=10; int initialx=80; int initialy=340; int moveSpeed=0; /默认为快速
4、完成 int steps=0; /完成步数 public TextField showAnswer=new TextField(结果显示区); MainPanel() for(int k=0;kk+) platek=new Label(); a=new Desk(A 座 b=new Desk(B 座 c=new Desk(C 座 this.setLayout(null); this.setSize(700, 600); this.setBackground(Color.orange); this.add(a); this.add(b); this.add(c); this.add(showAn
5、swer); a.setLocation(60, 350); b.setLocation(320,350); c.setLocation(580,350); showAnswer.setBounds(300, 50, 200, 25); showAnswer.setEditable(false); this.proplate(defaultnum); /初始化时产生的默认数量的盘子 this.setSize(850,650); a.Setinitialxy(80); b.Setinitialxy(340); c.Setinitialxy(600); a.Settopxy(); b.Settop
6、xy(); c.Settopxy(); changnum=false; validate(); public void ChangeDefault(int x) this.defaultnum=x; changnum=true; public void RemoveAllPlate() for(int i=0;i+) this.remove(platei); public void proplate(int sum) showAnswer.setText( steps=0; if(changnum=true) this.RemoveAllPlate(); a.clear(); b.clear(
7、); c.clear(); a.Settopxy(); b.Settopxy(); c.Settopxy(); for(int su=0;su+two.name.getText(); showAnswer.setText(string); steps+;class MainFrame extends Frame MenuBar menubar; Menu display,help,speed,num; MenuItem start,quit,paush,declare,introdue,speed1,speed2,speed3,num1,num2,num3,num4,num5; MenuAct
8、ionRe replay=new MenuActionRe(); MainPanel mainpanel=new MainPanel(); MainFrame() MainFrame(String s) super(s); setTitle(s); menubar=new MenuBar(); display=new Menu(演示 help=new Menu(帮助 start=new MenuItem(开始 speed=new Menu(选择速度 num=new Menu(盘子数量 quit=new MenuItem(退出 quit.addActionListener( replay); p
9、aush=new MenuItem(暂停 declare=new MenuItem(说明 introdue=new MenuItem(介绍 speed1=new MenuItem(快速完成 speed2=new MenuItem(适中速度 speed3=new MenuItem(较慢实现 num1=new MenuItem(3 num1.addActionListener(replay); num2=new MenuItem(5 num2.addActionListener(replay); num3=new MenuItem(7 num3.addActionListener(replay);
10、 num4=new MenuItem(9 num4.addActionListener(replay); num5=new MenuItem(12 num5.addActionListener(replay); display.add(start); start.addActionListener(replay); display.add(speed); display.add(num); display.add(quit); speed.add(speed1); speed1.addActionListener(replay); speed.add(speed2); speed2.addAc
11、tionListener(replay); speed.add(speed3); speed3.addActionListener(replay); num.add(num1); num.add(num2); num.add(num3); num.add(num4); num.add(num5); help.add(declare); declare.addActionListener(replay); help.add(introdue); introdue.addActionListener(replay); menubar.add(display); menubar.add(help);
12、 menubar.setFont(new Font(,Font.BOLD, 14); setMenuBar(menubar); this.add(mainpanel,BorderLayout.CENTER); setVisible(true); setBounds(200,50,850,650); class MenuActionRe implements ActionListener public void actionPerformed(ActionEvent event) / TODO 自动生成方法存根 if(event.getSource()=quit) System.exit(0);
13、 /退出 else if(event.getSource()=start) if(mainpanel.a.num=0) /说明已经搬完了,是要重新开始啦 mainpanel.proplate(mainpanel.defaultnum); mainpanel.c.clear(); mainpanel.a.Settopxy(); mainpanel.b.Settopxy(); mainpanel.c.Settopxy(); mainpanel.hanoi(mainpanel.defaultnum, mainpanel.a,mainpanel.b, mainpanel.c); mainpanel.s
14、howAnswer.setText(搬运结束,搬运次数为:+mainpanel.steps); else if(event.getSource()=declare) Help1 dialog=new Help1(); dialog.setVisible(true); else if(event.getSource()=introdue) Help2 dialog=new Help2(); else if(event.getSource()=num1) mainpanel.ChangeDefault(3); else if(event.getSource()=num2) mainpanel.Ch
15、angeDefault(5); else if(event.getSource()=num3) mainpanel.ChangeDefault(7); else if(event.getSource()=num4) mainpanel.ChangeDefault(9); else if(event.getSource()=num5) mainpanel.ChangeDefault(12); else if(event.getSource()=speed1) /快速完成 mainpanel.moveSpeed=0; else if(event.getSource()=speed2) /适中速度
16、mainpanel.moveSpeed=2; else if(event.getSource()=speed3) /较慢完成 mainpanel.moveSpeed=6;class Help1 extends JDialog JPanel panel1 = new JPanel(); JLabel jLabel1 = new JLabel(pre 作者: 徐小龙(中国石油大学) 2010年11月20日/html JLabel jLabel2 = new JLabel(); GridLayout gridLayout1 = new GridLayout(); Help1() super(new
17、MainFrame(),程序说明,false); setBounds(400,150,360,260); jLabel2.setText(使用说明: 通过演示菜单来控制程序的运行,可以选择不同的移动速度,也可以定制盘子的数量。 panel1.add(jLabel1,BorderLayout.NORTH); panel1.add(jLabel2,BorderLayout.CENTER); setResizable(false); getContentPane().add(panel1);class Help2 extends JDialog Help2() 汉诺塔问题介绍汉诺塔问题:有若干个大小各不相同的盘子,有三个桌子A、B、C,开始时,盘子全部位于A桌上,现要将盘子从 + A桌上移动到C桌上,过程中要保证大盘子不能放到小盘子上面,且每次只能移动一个盘子。public class HanoiDisply public stat
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1