package 打地鼠;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.Timer;
//打地鼠
public class MouseTest extends JFrame implements ActionListener{
//成员变量,声明需要用到的组件
//JFrame的附属容器
private Container cp;
//难度选择框
private JComboBox<String> box;
//4个JLabel,time,时间数字,score,分数
private JLabel timeLabel,timeValue,scoreLabel,scoreValue;
//开始按钮
private JButton startButton;
//2个容器
private JPanel northPanel,centerPanel;
//9个(地鼠)按钮
private JButton[] btns;
//时间计时器
private Timer timer;
//负责地鼠出现的计时器
private Timer mouseTimer;
//图片
private ImageIcon icon;
//难度代表的时间
private int level =1000;
//保存每次地鼠出现的位置
private int index;
//如果flag为true,说明本次地鼠还没被加分,为false,说明本次地鼠按钮已被加分
private boolean flag;
//窗口设置
public MouseTest(String title){
super(title);
init();
//设置窗口出现位置、大小
this.setBounds(200, 200, 350, 400);
//设置窗口大小不可更改
this.setResizable(false);
//设置点击×的事件
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//设置窗口可见
this.setVisible(true);
}
//初始化组件
public void init(){
cp = getContentPane();
cp.setLayout(new BorderLayout());
icon = new ImageIcon("src/打地鼠/mouse.jpg");
box = new JComboBox<>();
box.addItem("初级");
box.addItem("中级");
box.addItem("高级");
timeLabel = new JLabel("time: ");
timeValue = new JLabel("10");
scoreLabel = new JLabel(" score: ");
scoreValue = new JLabel("10");
startButton = new JButton("开始");
//保存已声明的组件,JPanel默认是流式布局
northPanel = new JPanel();
northPanel.add(box);
northPanel.add(timeLabel);
northPanel.add(timeValue);
northPanel.add(scoreLabel);
northPanel.add(scoreValue);
northPanel.add(startButton);
cp.add(northPanel, BorderLayout.NORTH);
centerPanel = new JPanel();
centerPanel.setLayout(new GridLayout(3, 3));
//初始化地鼠按钮
btns = new JButton[9];
for(int i=0;i<btns.length;i++){
btns[i] = new JButton();
//设置按钮初始不可用
btns[i].setEnabled(false);
//鼠标按钮:如果当前按钮(事件源)上边有icon,分数+1,如果没有
btns[i].addActionListener(this);
/*btns[i].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JButton btn = (JButton) e.getSource();
if(flag && btn.getIcon()!=null){
//关门
addScore();
flag=false;
btns[index].setIcon(null);
}
}
});*/
centerPanel.add(btns[i]);
}
cp.add(centerPanel);
//绑定事件处理
//下拉框:更改Level的值,重置mouserTimer的频率
box.addActionListener(this);
/*box.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String selectedLevel = (String) box.getSelectedItem();
if(selectedLevel.equals("初级")){
level = 1000;
}else if(selectedLevel.equals("中级")){
level = 500;
}else if(selectedLevel.equals("高级")){
level = 100;
}
mouseTimer.stop();
//重置mouserTimer
mouseTimer = new Timer(level,new ActionListener() {
public void actionPerformed(ActionEvent e) {
btns[index].setIcon(null);
int newIndex = (int) (Math.random()*9);
btns[newIndex].setIcon(icon);
index = newIndex;
}
});
if(timer.isRunning()){
mouseTimer.start();
}
}
});*/
//开始按钮:地鼠按钮可用,自己不可用,重置时间/积分,2个计时器开始工作
startButton.addActionListener(this);
/*startButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
//设置地鼠按钮可用
setBtnsEnabled(true);
startButton.setEnabled(false);
timeValue.setText("10");
scoreValue.setText("0");
timer.start();
mouseTimer.start();
}
});*/
//时间计时器:每次把timeValue值-1,
//直到0(两个计时器停止,清空最后一次出现的地鼠按钮,
//设置地鼠按钮不可用,设置开始按钮可用)
timer = new Timer(1000,this);
/*timer = new Timer(1000, new ActionListener() {
public void actionPerformed(ActionEvent e) {
int time = setTimeValue();
if(time==0){
mouseTimer.stop();
timer.stop();
//index保存每次地鼠出现的位置
btns[index].setIcon(null);
setBtnsEnabled(false);
startButton.setEnabled(true);
}
}
});*/
//地鼠计时器:让上一个地鼠按钮的图片消失,随机数确定本次出现地鼠的位置,
//并记录位置(下一次地鼠计时器需要取消该位置的图片,(时间为0后timer))
mouseTimer = new Timer(level,this);
/*mouseTimer = new Timer(level, new ActionListener() {
public void actionPerformed(ActionEvent e) {
btns[index].setIcon(null);
int newIndex = (int) (Math.random()*9);
btns[newIndex].setIcon(icon);
index = newIndex;
//确保一个鼠标按钮只能被加分一次,开门
flag=true;
}
});*/
}
@Override
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
if(source==box){
String selectedLevel = (String) box.getSelectedItem();
if(selectedLevel.equals("初级")){
level = 1000;
}else if(selectedLevel.equals("中级")){
level = 500;
}else if(selectedLevel.equals("高级")){
level = 100;
}
mouseTimer.stop();
//重置mouserTimer
mouseTimer = new Timer(level,this);
if(timer.isRunning()){
mouseTimer.start();
}
}else if(source==startButton){
//设置地鼠按钮可用
setBtnsEnabled(true);
startButton.setEnabled(false);
timeValue.setText("10");
scoreValue.setText("0");
timer.start();
mouseTimer.start();
}else if(source == timer){
int time = setTimeValue();
if(time==0){
mouseTimer.stop();
timer.stop();
//index保存每次地鼠出现的位置
btns[index].setIcon(null);
setBtnsEnabled(false);
startButton.setEnabled(true);
}
}else if(source == mouseTimer){
btns[index].setIcon(null);
int newIndex = (int) (Math.random()*9);
btns[newIndex].setIcon(icon);
index = newIndex;
//确保一个鼠标按钮只能被加分一次,开门
flag=true;
}else{
JButton btn = (JButton) e.getSource();
if(flag && btn.getIcon()!=null){
//关门
addScore();
flag=false;
btns[index].setIcon(null);
}
}
}
//设置地鼠按钮是否可用
public void setBtnsEnabled(boolean flag){
for(int i=0;i<btns.length;i++){
btns[i].setEnabled(flag);
}
}
//设置时间面板变化
public int setTimeValue(){
int time = Integer.parseInt(timeValue.getText());
time--;
timeValue.setText(time+"");
return time;
}
//设置积分面板变化
public void addScore(){
int score = Integer.parseInt(scoreValue.getText());
score++;
scoreValue.setText(score+"");
}
public static void main(String[] args) {
new MouseTest("打地鼠");
}
}
java经典小游戏之打地鼠
需积分: 35 44 浏览量
2017-09-13
15:25:11
上传
评论 5
收藏 14KB RAR 举报
shuai1314niu
- 粉丝: 2
- 资源: 2