📄 hannoitower.java
字号:
package honnoira;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class HannoiTower extends JPanel implements MouseListener,MouseMotionListener
{
TowerPoint point[];
int x,y;
boolean move=false;
Disk plate[];
int startX,startY;
int startI ;
int plateNum=0;
int width,height;
char towerName[]={'A','B','C'};
TextArea meg=null;
public HannoiTower(int number,int w,int h,char[] name,TextArea text)
{
towerName=name;
plateNum=number;
width=w;
height=h;
meg=text;
setLayout(null);
addMouseListener(this);
addMouseMotionListener(this);
plate= new Disk[plateNum];
point=new TowerPoint[3*plateNum];
int space=20;
for(int i=0;i<plateNum;i++)
{
point[i]=new TowerPoint(40+width,100+space,false);
space=space+height;
}
space=20;
for(int i=plateNum;i<2*plateNum;i++)
{
point[i]=new TowerPoint(160+width,100+space,false);
space=space+height;
}
space=20;
for(int i=2*plateNum;i<3*plateNum;i++)
{
point[i]=new TowerPoint(280+width,100+space,false);
space=space+height;
}
int tempWidth=width;
int sub=(int)(tempWidth*0.2);
for(int i=plateNum-1;i>=0;i--)
{
plate[i]=new Disk(i,this);
plate[i].setSize(tempWidth,height);
tempWidth=tempWidth-sub;
}
for(int i=0;i<plateNum;i++)
{
point[i].putPlate(plate[i],this);
if(i>=1)
plate[i].setisAbove(true);
}
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.drawLine(point[0].getX(),point[0].getY(),
point[plateNum-1].getX(),point[plateNum-1].getY());
g.drawLine(point[plateNum].getX(),point[plateNum].getY(),
point[2*plateNum-1].getX(),point[2*plateNum-1].getY());
g.drawLine(point[2*plateNum].getX(),point[2*plateNum].getY(),
point[3*plateNum-1].getX(),point[3*plateNum-1].getY());
g.drawLine(point[plateNum-1].getX()-width,point[plateNum-1].getY(),
point[3*plateNum-1].getX()+width,point[3*plateNum-1].getY());
int leftx=point[plateNum-1].getX()-width;
int lefty=point[plateNum-1].getY();
int w=(point[3*plateNum-1].getX()+width)-(point[plateNum-1].getX()-width);
int h=height/2;
g.setColor(Color.orange);
g.fillRect(leftx,lefty,w,h);
g.setColor(Color.red);
int size=4;
for(int i=0;i<3*plateNum;i++)
{
g.fillOval(point[i].getX()-size/2,point[i].getY()-size/2,size,size);
}
g.drawString(towerName[0]+" 濉
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -