⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 主程序.java

📁 一个简单的汉诺塔游戏
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
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 + -