华容道游戏取自著名的三国故事,曹操在赤壁大战中被刘备和孙权的“苦肉计”、“火烧连营”打败,被迫退逃到华容道,又遇上诸葛亮的伏兵,关羽为了报答曹操对他的恩情,明逼实让,终于帮助曹操逃出了华容道。
要求:1.本程序主要练习使用布局管理器设计一个华容道游戏界面,并练习使用事件监听器(鼠标事件、键盘事件和焦点事件)实现按钮的移动。
2.编写一个按钮的子类,使用该子类创建的对象代表华容道中的人物。通过焦点事件控制人物颜色,当人物获得焦点时颜色为红色,当失去焦点时颜色为黄色。
3.通过键盘事件和鼠标事件来实现曹操、关羽等人物的移动。当人物上发生鼠标事件或键盘事件时,如果鼠标指针的位置是在人物的下方(也就是组件的下半部分)或按下键盘的“↓“键,该人物向下移动。向左、向右和向上的移动原理类似。
4.点击“重新开始”可以使各个按钮复位,重新开始游戏。
Hua_Rong_Road类:
package 华容道;
import javazoom.jl.player.Player;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
public class Hua_Rong_Road extends JFrame implements ActionListener, MouseListener, KeyListener {
Person[] person = new Person[10]; // 10个人
JButton left, right, above, below;// 边界
JButton restart = new JButton("重新开始");
JButton about = new JButton("游戏背景");
JButton help = new JButton("游戏帮助");
int i = 0;
JLabel jLabel = new JLabel();//标签
public Hua_Rong_Road() {
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);//隐藏并释放窗体,dispose(),当最后一个窗口被释放后,则程序也随之运行结束
setBounds(450, 0, 425, 700);//设置边框的大小
setVisible(true);//设置视野可见
validate();//使用插件时的初始化方法
}
public void init() {
setResizable(false);//生成的窗体大小是由程序员决定的,用户不可以自由改变该窗体的大小。
setDefaultCloseOperation(3);//直接关闭应用程序,System.exit(0)。
i = 0;//记录步数
setLayout(null);//流式布局绝对布局
add(restart);//重新开始按钮
restart.setBounds(140, 540, 120, 40);
restart.addActionListener(this);
add(about);//游戏背景按钮
about.setBounds(10, 540, 120, 40);
about.addActionListener(this);//事件监听对象,this指本身这个对象,这个类会实现监听器接口
add(help);//游戏帮助按钮
help.setBounds(270, 540, 120, 40);
help.addActionListener(this);//事件监听对象,this指本身这个对象,这个类会实现监听器接口
String[] name = {"曹操", "关羽", "马超", "黄忠", "张飞", "赵云", "兵",