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

📄 主程序.java

📁 一个简单的汉诺塔游戏
💻 JAVA
📖 第 1 页 / 共 2 页
字号:

		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 + -