📄 主程序.java
字号:
Font labelFont = new Font("宋体", Font.PLAIN, 20);
Font buttonFont = new Font("宋体", Font.PLAIN, 13);
JTextArea Text = new JTextArea();
JLabel img = new JLabel();
private ImageIcon image;
public help() {
image = new ImageIcon("images/loge3.jpg");
// 创建图片标签
label = new JLabel("帮 助 ", image, SwingConstants.CENTER);
this.setSize(new Dimension(1100, 350));
this.setTitle("帮助!");
label.setFont(labelFont);
close.setBackground(Color.white);
close.setFont(buttonFont);
close.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
setVisible(false);
}
});
img.setIcon(new ImageIcon("loge3.jpg"));
Text.setEditable(false);
Text
.setText(" JAVA汉诺塔\n"
+ " 制作人:杨成龙\n"
+ " 关于:汉诺塔\n\n"
+ " 在印度,有这么一个古老的传说:"
+ " 在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。\n"
+ " 印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔。\n"
+ " 不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片:一次只移动一片,不管在哪根针上,小片必须在大片上面。\n"
+ " 僧侣们预言,当所有的金片都从梵天穿好的那根针上移到另外一根针上时,世界就将在一声霹雳中消灭,而梵塔、庙宇和众生也都将同归于尽。\n\n"
+ " 后来,这个传说就演变为汉诺塔游戏:\n"
+ " 1.有三根杆子A,B,C。A杆上有若干盘子\n"
+ " 2.每次移动一块盘子,小的只能叠在大的上面 \n"
+ " 3.把所有碟子从A杆全部移到C杆上\n\n");
panel.add(img);
panel.add(label);
panel.add(Text);
panel.add(close);
panel.setBorder(new EmptyBorder(10, 5, 10, 5));
panel.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 10));
this.add(panel, BorderLayout.CENTER);
this.setLocationRelativeTo(null);
this.show();
}
public void actionPerformed(ActionEvent arg0) {
// TODO 自动生成方法存根
}
}
/** ********************************************************************************* */
// 字符串转换成整形
private static int stringToInt(String s) {
return Integer.parseInt(s.trim());
}
// 用于获取哪个杆被选中状态
public void getactionZhu() {
this.b1 = drawPanel.v1;
this.b2 = drawPanel.v2;
this.b3 = drawPanel.v3;
}
// *************事件处理程序××××××××××××××××××××××××××××8
// 菜单项“关闭”动作
class Button2_actionAdapter implements ActionListener {
public void actionPerformed(ActionEvent e) {
setVisible(false);
System.exit(0);
}
}
class Button3_actionAdapter implements ActionListener {
public void actionPerformed(ActionEvent e) {
new set_disk();
}
}
// 开始按钮事件
class Buotton1_actionAdapter implements ActionListener {
public void actionPerformed(ActionEvent e) {
plate_num = 3;
// System.out.print(plate_num);
drawPanel.setPlateNum(plate_num); // 向drawPanel传递参数
// 初始化SuperPlate对象并赋值
superPlate = new 盘子类[plate_num];
for (int x = 0; x < plate_num; x++) {
superPlate[x] = new 盘子类(100, 290 - x * d, 50 - x * d / 2);
// 将盘子加入到vector的数组s1中,相当于加到柱1上
s1.addElement(superPlate[x]);
}
getactionZhu(); // 调用getactionZhu()方法,
// 调用DrawPanel对象drawPanel的数据更新方法
drawPanel.updata();
drawPanel.start = true;
drawPanel.setVisible(true);
}
}
// 键盘事件处理
public void keyPressed(KeyEvent e) // 键盘事件
{
switch (e.getKeyCode()) {
case KeyEvent.VK_LEFT: // 光标左键键盘事件的处理
{
if (drawPanel.v1 == true) // 设定当前控制对象:对柱1控制
{
drawPanel.v1 = !drawPanel.v1;
drawPanel.v3 = !drawPanel.v3;
} else if (drawPanel.v2 == true) // 设定当前控制对象:对柱2控制
{
drawPanel.v2 = !drawPanel.v2;
drawPanel.v1 = !drawPanel.v1;
} else if (drawPanel.v3 == true) // 设定当前控制对象:对柱3控制
{
drawPanel.v3 = !drawPanel.v3;
drawPanel.v2 = !drawPanel.v2;
}
}
drawPanel.repaint(); // 重画
break;
case KeyEvent.VK_RIGHT: // 光标右键动作键盘事件的处理
{
System.out.print("光标右键动作");
if (drawPanel.v1 == true) {
drawPanel.v1 = !drawPanel.v1;
drawPanel.v2 = !drawPanel.v2;
} else if (drawPanel.v2 == true) {
drawPanel.v2 = !drawPanel.v2;
drawPanel.v3 = !drawPanel.v3;
} else if (drawPanel.v3 == true) {
drawPanel.v3 = !drawPanel.v3;
drawPanel.v1 = !drawPanel.v1;
}
drawPanel.repaint();
}
break;
case KeyEvent.VK_SPACE: // 回车键动作
getactionZhu();
// 确定控制对象:选定柱1(最左侧的杆)
if (b1 == true) {
if (s1.isEmpty() == false) // 若柱1有盘子判断
{
// 获取柱1最上方的盘子对象
sp1 = (盘子类) s1.lastElement();
// 若柱2有盘子判断,sp2对象接s2
if (s2.isEmpty() == false)
sp2 = (盘子类) s2.lastElement();
// 若柱3有盘子判断,sp3对象接s3
if (s3.isEmpty() == false)
sp3 = (盘子类) s3.lastElement();
// 柱2为空情况
if (s2.isEmpty()) {
s1.removeElement(sp1); // vector数组中删除元素
sp1.setLocation(200, 290); // 重新设定盘子位置
s2.addElement(sp1);
press_num++;
}
// 柱1最上方盘尺寸比柱2最上方盘尺寸小情况
else if (sp1.plate_width < sp2.plate_width) {
s1.removeElement(sp1);
num = s2.size();
sp1.setLocation(200, 290 - num * d);
s2.addElement(sp1);
press_num++;
}
// 柱3为空情况
else if (s3.isEmpty()) {
s1.removeElement(sp1);
sp1.setLocation(300, 290);
s3.addElement(sp1);
press_num++;
}
// 柱1最上方盘尺寸比柱3最上方盘尺寸小情况
else if (sp1.plate_width < sp3.plate_width) {
s1.removeElement(sp1);
num = s3.size();
sp1.setLocation(300, 290 - num * d);
s3.addElement(sp1);
press_num++;
}
}
}
// 确定控制对象:选定柱2
else if (b2 == true) {
if (s2.isEmpty() == false) {
sp2 = (盘子类) s2.lastElement();
if (s1.isEmpty() == false)
sp1 = (盘子类) s1.lastElement();
if (s3.isEmpty() == false)
sp3 = (盘子类) s3.lastElement();
if (s3.isEmpty()) {
s2.removeElement(sp2);
sp2.setLocation(300, 290);
s3.addElement(sp2);
press_num++;
} else if (sp2.plate_width < sp3.plate_width) {
s2.removeElement(sp2);
num = s3.size();
sp2.setLocation(300, 290 - num * d);
s3.addElement(sp2);
press_num++;
} else if (s1.isEmpty()) {
s2.removeElement(sp2);
sp2.setLocation(100, 290);
s1.addElement(sp2);
press_num++;
} else if (sp2.plate_width < sp1.plate_width) {
s2.removeElement(sp2);
num = s1.size();
sp2.setLocation(100, 290 - num * d);
s1.addElement(sp2);
press_num++;
}
}
}
// 确定控制对象:选定柱3
else if (b3 == true) {
if (!s3.isEmpty()) {
sp3 = (盘子类) s3.lastElement();
if (s2.isEmpty() == false)
sp2 = (盘子类) s2.lastElement();
if (s1.isEmpty() == false)
sp1 = (盘子类) s1.lastElement();
if (s1.isEmpty()) {
s3.removeElement(sp3);
sp3.setLocation(100, 290);
s1.addElement(sp3);
press_num++;
} else if (sp3.plate_width < sp1.plate_width) {
s3.removeElement(sp3);
num = s1.size();
sp3.setLocation(100, 290 - num * d);
s1.addElement(sp3);
press_num++;
} else if (s2.isEmpty()) {
s3.removeElement(sp3);
sp3.setLocation(200, 290);
s2.addElement(sp3);
press_num++;
} else if (sp3.plate_width < sp2.plate_width) {
s3.removeElement(sp3);
num = s2.size();
sp3.setLocation(200, 290 - num * d);
s2.addElement(sp3);
press_num++;
}
}
}
drawPanel.updata(); // 更新drawPanel对象中状态
winNum = s3.size();
drawPanel.getWinNum(winNum);
break;
}
}
public void keyTyped(KeyEvent arg0) {
// TODO 自动生成方法存根
}
public void keyReleased(KeyEvent arg0) {
// TODO 自动生成方法存根
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -