Hannoi塔Word文件下载.docx
- 文档编号:20865957
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:21
- 大小:18.55KB
Hannoi塔Word文件下载.docx
《Hannoi塔Word文件下载.docx》由会员分享,可在线阅读,更多相关《Hannoi塔Word文件下载.docx(21页珍藏版)》请在冰豆网上搜索。
bClose=newJButton("
关闭"
bStart.addActionListener(this);
bStop.addActionListener(this);
bContinue.addActionListener(this);
bClose.addActionListener(this);
JPanelsouth=newJPanel();
south.setLayout(newFlowLayout());
south.add(bStart);
south.add(bStop);
south.add(bContinue);
south.add(bClose);
add(newJScrollPane(showStep),BorderLayout.CENTER);
add(south,BorderLayout.SOUTH);
setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
towerName=newchar[3];
addWindowListener(newWindowAdapter(){
publicvoidwindowClosing(WindowEvente){
time.stop();
setVisible(false);
}
});
publicvoidsetPointA(TowerPoint[]pointA){
this.pointA=pointA;
publicvoidsetPointB(TowerPoint[]pointB){
this.pointB=pointB;
publicvoidsetPointC(TowerPoint[]pointC){
this.pointC=pointC;
publicvoidsetTowerName(charname[]){
if(name[0]==name[1]||name[0]==name[2]||name[1]==name[2]){
towerName[0]='
A'
;
towerName[1]='
B'
towerName[2]='
C'
else
towerName=name;
publicvoidsetAmountOfDisc(intn){
amountOfDisc=n;
publicvoidactionPerformed(ActionEvente){
if(e.getSource()==time){
number++;
charcStart,cEnd;
if(i<
=moveStep.length()-2){
cStart=moveStep.charAt(i);
cEnd=moveStep.charAt(i+1);
showStep.append("
("
+number+"
)从"
+cStart+"
座搬一个盘子到"
+cEnd+"
座\n"
autoMoveDisc(cStart,cEnd);
i=i+2;
if(i>
=moveStep.length()-1){
}
elseif(e.getSource()==bStart){
if(moveStep.length()==0){
if(time.isRunning()==false){
i=0;
setMoveStep(amountOfDisc,towerName[0],towerName[1],towerName[2]);
number=0;
time.start();
elseif(e.getSource()==bStop){
if(time.isRunning()==true)
elseif(e.getSource()==bContinue){
if(time.isRunning()==false)
time.restart();
elseif(e.getSource()==bClose){
privatevoidsetMoveStep(intamountOfDisc,charone,chartwo,charthree){
if(amountOfDisc==1){
moveStep.append(one);
moveStep.append(three);
else{
setMoveStep(amountOfDisc-1,one,three,two);
setMoveStep(amountOfDisc-1,two,one,three);
privatevoidautoMoveDisc(charcStart,charcEnd){
Discdisc=null;
if(cStart==towerName[0]){
for(inti=0;
i<
pointA.length;
i++){
if(pointA[i].isHaveDisc()==true){
disc=pointA[i].getDiscOnPoint();
pointA[i].setHaveDisc(false);
break;
if(cStart==towerName[1]){
pointB.length;
if(pointB[i].isHaveDisc()==true){
disc=pointB[i].getDiscOnPoint();
pointB[i].setHaveDisc(false);
if(cStart==towerName[2]){
pointC.length;
if(pointC[i].isHaveDisc()==true){
disc=pointC[i].getDiscOnPoint();
pointC[i].setHaveDisc(false);
TowerPointendPoint=null;
inti=0;
if(cEnd==towerName[0]){
for(i=0;
if(pointA[i].isHaveDisc()==true){
0){endPoint=pointA[i-1];
elseif(i==0)
if(i==pointA.length)
endPoint=pointA[pointA.length-1];
if(cEnd==towerName[1]){
if(pointB[i].isHaveDisc()==true){if(i>
0){endPoint=pointB[i-1];
if(i==pointB.length)
endPoint=pointB[pointB.length-1];
if(cEnd==towerName[2]){
if(pointC[i].isHaveDisc()==true){if(i>
0){endPoint=pointC[i-1];
if(i==pointC.length)
endPoint=pointC[pointC.length-1];
if(endPoint!
=null&
&
disc!
=null){
endPoint.putDisc(disc,con);
endPoint.setHaveDisc(true);
}
publicclassDiscextendsJButton{
intnumber;
TowerPointpoint;
Disc(){
setBackground(Color.cyan);
publicvoidsetNumber(intn){
number=n;
publicintgetNumber(){
returnnumber;
publicvoidsetPoint(TowerPointp){
point=p;
publicTowerPointgetPoint(){
returnpoint;
publicclassHandleMouseimplementsMouseListener,MouseMotionListener{
TowerPointstartPoint=null,endPoint=null;
intleftX,leftY,x0,y0;
booleanmove=false,countTime=false;
HandleMouse(Containercon){
publicvoidmousePressed(MouseEvente){
move=false;
disc=(Disc)e.getSource();
startPoint=disc.getPoint();
x0=e.getX();
y0=e.getY();
intm=0;
i++){
if(pointA[i].equals(startPoint)){
m=i;
if(m>
0&
(pointA[m-1].isHaveDisc()==false)){
move=true;
elseif(m==0){
if(pointB[i].equals(startPoint)){
(pointB[m-1].isHaveDisc()==false)){
if(pointC[i].equals(startPoint)){
(pointC[m-1].isHaveDisc()==false)){
publicvoidmouseMoved(MouseEvente){}
publicvoidmouseDragged(MouseEvente){
leftX=disc.getBounds().x;
leftY=disc.getBounds().y;
intx=e.getX();
inty=e.getY();
leftX=leftX+x;
leftY=leftY+y;
if(move==true)
disc.setLocation(leftX-x0,leftY-y0);
publicvoidmouseReleased(MouseEvente){
Rectanglerect=disc.getBounds();
booleanlocation=false;
intx=-1,y=-1;
x=pointA[i].getX();
y=pointA[i].getY();
if(rect.contains(x,y)){
endPoint=pointA[i];
if(i==pointA.length-1&
endPoint.isHaveDisc()==false){
location=true;
elseif(i<
pointA.length-1&
pointA[i+1].isHaveDisc()==true
&
endPoint.isHaveDisc()==false
pointA[i+1].getDiscOnPoint().getNumber()
>
disc.getNumber()){
x=pointB[i].getX();
y=pointB[i].getY();
endPoint=pointB[i];
if(i==pointB.length-1&
pointB.length-1&
pointB[i+1].isHaveDisc()==true
pointB[i+1].getDiscOnPoint().getNumber()
x=pointC[i].getX();
y=pointC[i].getY();
endPoint=pointC[i];
if(i==pointC.length-1&
pointC.length-1&
pointC[i+1].isHaveDisc()==true
pointC[i+1].getDiscOnPoint().getNumber()
location==true){
startPoint.setHaveDisc(false);
else
startPoint.putDisc(disc,con);
publicvoidmouseEntered(MouseEvente){}
publicvoidmouseExited(MouseEvente){}
publicvoidmouseClicked(MouseEvente){}
publicclassHannoiWindowextendsJFrameimplementsActionListener{
Towertower=null;
char[]towerName={'
'
};
JMenuBarbar;
JMenumenuGrade;
JMenuItemoneGradeItem,twoGradeItem,threeGradeItem;
JButtonrenew=null;
JButtonautoButton=null;
JPanelcenter=newJPanel();
HannoiWindow(){
tower=newTower(towerName);
tower.setAmountOfDisc(amountOfDisc);
tower.setMaxDiscWidth(120);
tower.setMinDiscWidth(50);
tower.setDiscHeight(16);
tower.putDiscOnTower();
add(tower,BorderLayout.CENTER);
bar=newJMenuBar();
menuGrade=newJMenu("
选择级别"
oneGradeItem=newJMenuItem("
初级"
twoGradeItem=newJMenuItem("
中级"
threeGradeItem=newJMenuItem("
高级"
menuGrade.add(oneGradeItem);
menuGrade.add(twoGradeItem);
menuGrade.add(threeGradeItem);
bar.add(menuGrade);
setJMenuBar(bar);
oneGradeItem.addActionListener(this);
twoGradeItem.addActionListener(this);
threeGradeItem.addActionListener(this);
renew=newJButton("
重新开始"
renew.addActionListener(this);
autoButton=newJButton("
自动演示"
autoButton.addActionListener(this);
JPanelnorth=newJPanel();
north.add(renew);
north.add(autoButton);
Stringmess="
将全部盘子从"
+towerName[0]+"
座搬运到"
+towerName[1]+
"
座或"
+towerName[2]+"
座"
JLabelhintMess=newJLabel(mess,JLabel.CENTER);
north.add(hintMess);
add(north,BorderLayout.NORTH);
setResizable(false);
setVisible(true);
setBounds(60,60,460,410);
validate();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
publicvoidactionPerformed(ActionEvente){
if(e.getSource()==oneGradeItem){
amountOfDisc=3;
elseif(e.getSource()==twoGradeItem){
amountOfDisc=4;
tower.putDiscOnTower()
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Hannoi