📄 主程序.java
字号:
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.net.URL;
import java.util.Vector;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
public class 主程序 extends JFrame implements KeyListener // 主程序
{
int plate_num;
// 图形处理,画图类对象声明
DrawPanel drawPanel;
盘子类 superPlate[];
// 声明三个SuperPlate对象,用于提取vector数组中末端(最上方)盘子对象以便操作
盘子类 sp1, sp2, sp3;
// 设置3个vector数组用来存取盘子SuperPlate的对象,代表3个柱子上盘子
Vector s1, s2, s3;
// 表示当前控制对象是哪个柱子,值为true的表示被选中
boolean b1, b2, b3;
int d = 15; // 表示相邻盘子之间的距离基值
int press_num = 0; // 统计移动盘子次数
int num, winNum; // 游戏胜利时,最右侧杆上盘子数
// 游戏界面中菜单栏、菜单项的声明及创建
private Font defaultFont = new Font("宋体", Font.PLAIN, 15);
JMenuBar 主菜单 = new JMenuBar();
JMenu 控制 = new JMenu();
JMenuItem jMenuItem1 = new JMenuItem();
JMenuItem jMenuItem2 = new JMenuItem();
JMenuItem jMenuItem3 = new JMenuItem();
JMenuItem jMenuItem4 = new JMenuItem();
JMenuItem jMenuItem5 = new JMenuItem();
// -------------------------------------------------------------------
public 主程序() {
// 设置菜单栏
this.setTitle("简单汉诺塔 “杨成龙”");
this.setIconImage(new ImageIcon("images/loge3.jpg").getImage());
// 设置内容面板布局方式
getContentPane().setLayout(new BorderLayout());
// 设置菜单栏
this.setJMenuBar(主菜单);
控制.setText(" 设 定 ");
jMenuItem1.setText("开始(G)");
jMenuItem1.setFont(defaultFont);
jMenuItem1.setMnemonic('G');
jMenuItem1.setIcon(new ImageIcon(getClass().getResource(
"images/start.jpg")));
jMenuItem1.addActionListener(new Buotton1_actionAdapter());
jMenuItem2.setText("结束(O)");
jMenuItem2.setFont(defaultFont);
jMenuItem2.setMnemonic('G');
jMenuItem2.setIcon(new ImageIcon(getClass().getResource(
"images/ganmeover.jpg")));
jMenuItem2.addActionListener(new Button2_actionAdapter());
jMenuItem4.setText("帮助");
jMenuItem4.setFont(defaultFont);
jMenuItem4.setMnemonic('G');
jMenuItem4.setIcon(new ImageIcon(getClass().getResource(
"images/help.jpg")));
jMenuItem4.addActionListener(new help_actionAdapter());
jMenuItem5.setText("自动演示");
jMenuItem5.setFont(defaultFont);
jMenuItem5.setMnemonic('k');
jMenuItem5.setIcon(new ImageIcon(getClass().getResource(
"images/zidys.jpg")));
jMenuItem5.addActionListener(new zdys());
控制.add(jMenuItem1);
控制.addSeparator();
控制.add(jMenuItem2);
控制.addSeparator();
jMenuItem3.setText("等级设置(s)");
jMenuItem3.setFont(defaultFont);
jMenuItem3.setMnemonic('G');
jMenuItem3.setIcon(new ImageIcon(getClass().getResource(
"images/set.jpg")));
jMenuItem3.addActionListener(new Button3_actionAdapter());
控制.add(jMenuItem3);
控制.addSeparator();
控制.add(jMenuItem4);
控制.addSeparator();
控制.add(jMenuItem5);
主菜单.add(控制);
JWindow start = new StartUp(this);
drawPanel = new DrawPanel(this);
// drawPanel.setVisible(true);
drawPanel.setOpaque(true);
// 设置位置
drawPanel.setAlignmentY(Component.CENTER_ALIGNMENT);
drawPanel.setAlignmentX(Component.CENTER_ALIGNMENT);
// 创建Vector对象s1、s2、s3
s1 = new Vector();
s2 = new Vector();
s3 = new Vector();
getContentPane().add(drawPanel, java.awt.BorderLayout.CENTER);
// 添加键盘事件监听器
addKeyListener(this);
}
/** ***************************主函数**************************************** */
public static void main(String srgs[]) {
JFrame.setDefaultLookAndFeelDecorated(true); // 主题的设置默认主题
JDialog.setDefaultLookAndFeelDecorated(true);
主程序 MF = new 主程序();
// MF.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// // MF.setVisible(true);
MF.setSize(400, 400);
MF.setLocation(500, 200);
MF.setResizable(false);
}
class help_actionAdapter implements ActionListener {
public void actionPerformed(ActionEvent e) // 菜单项“帮助信息”动作
{
new help();
}
}
class zdys implements ActionListener {
public void actionPerformed(ActionEvent e) // 自动演示
{
自动演示 自动 = new 自动演示();
自动.show();
自动.setSize(700, 500);
自动.setLocation(400, 200);
自动.setResizable(true);
}
}
// ****************************启动界面***********************************
class StartUp extends JWindow implements Runnable {
Thread splashThread = null;
private 主程序 mf;
public StartUp(主程序 mf) {// 设置参数很好的解决了启动显示的先后顺序
// 我是天才哈哈
this.mf = mf;
setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));// 设置启动界面的光标样式
JPanel splash = new JPanel(new BorderLayout());
URL url = getClass().getResource("images/启动界面.gif");// 获得指定资源文件的绝对路径。
if (url != null) {
splash.add(new JLabel(new ImageIcon(url)), BorderLayout.CENTER);
}
setContentPane(splash);
Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();// 获得屏幕的大小
pack();
setLocation((screen.width - getSize().width) / 2,
(screen.height - getSize().height) / 2);// 使启动窗口居中显示
start();
}
public void start() {
toFront();// window类的toFront()方法可以让启动界面显示的时候暂时在最前面,用window类的setAlwayOnTop(boolean)方法可以让窗口总保持在最前面。
splashThread = new Thread(this);
splashThread.start();
}
public void run() {
try {
setVisible(true);
Thread.sleep(20000);// 设置显示的时间
} catch (Exception e) {
e.printStackTrace();
}
dispose();
mf.setVisible(true);
// 启动完毕后运行汉诺塔游戏
}
}
/** ****************************设置盘子数函数体*************************************** */
public class set_disk extends JDialog implements ActionListener {
JPanel panel = new JPanel();
JTextField text = new JTextField("输入盘子数", 8);
JLabel label = new JLabel("盘 数 : ");
JButton close = new JButton("关闭");
JButton ok = new JButton("确定");
Font labelFont = new Font("宋体", Font.PLAIN, 14);
Font buttonFont = new Font("宋体", Font.PLAIN, 13);
public set_disk() {
this.setSize(new Dimension(300, 150));
this.setTitle("设置盘数");
label.setFont(labelFont);
close.setBackground(Color.white);
close.setFont(buttonFont);
close.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
setVisible(false);
}
});
panel.add(label);
panel.add(text);
panel.add(ok);
ok.addActionListener(new OK_actionAdapter());
setVisible(false);
ok.setBackground(Color.white);
ok.setFont(buttonFont);
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();
}
// 开始按钮事件
class OK_actionAdapter implements ActionListener {
public void actionPerformed(ActionEvent e) {
plate_num = stringToInt(text.getText());
// 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);
// repaint();
}
}
public void actionPerformed(ActionEvent arg0) {
// TODO 自动生成方法存根
}
}
/** ***************************帮助窗口的设定****************************************** */
public class help extends JDialog implements ActionListener {
JPanel panel = new JPanel();
JLabel label;
JButton close = new JButton("关闭");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -