java 打地鼠_用Java实现打地鼠游戏(简版):

import java.awt.Cursor;

import java.awt.Image;

import java.awt.Point;

import java.awt.Toolkit;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.MouseEvent;

import java.awt.event.MouseListener;

import java.util.Random;

import javax.swing.ImageIcon;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JMenu;

import javax.swing.JMenuBar;

import javax.swing.JMenuItem;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

import javax.swing.Timer;

public class HitMouse extends JFrame implements ActionListener,MouseListener{

boolean isOver=false;//设置标记,游戏是否结束

private String dir="./images/";//图片目录,当前工程下

JLabel jlbMouse;//地鼠

Timer timer;//时间定时器

Random random;//随机数对象,即生成地鼠的位置

int delay=1100;//延迟时间

Toolkit tk;

Image image;

Cursor myCursor;

JLabel showNum,currentGrade,hitNum;

int showNumber=0,hitNumber=0,currentGrades=1;

public HitMouse(){

super("打地鼠");

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setSize(449, 395);

this.setLocationRelativeTo(null);//设置窗口在屏幕中心

setbackground();//设置背景

this.getContentPane().setLayout(null);//设置框架布局模式为空,只有这样,才能知道图片的真正位置

//设置鼠标为锤子图片

tk = Toolkit.getDefaultToolkit();

image = tk.createImage(dir+"chui1.png");

myCursor = tk.createCustomCursor(image, new Point(10,10), "xxx");

this.setCursor(myCursor);

setMessage();//设置一些提示信息

//在背景图片的基础上设置地鼠图片

ImageIcon imageMouse = new ImageIcon(dir+"dishu.png");

jlbMouse = new JLabel(imageMouse);

jlbMouse.setSize(80,80);

this.getContentPane().add(jlbMouse);

jlbMouse.setVisible(false);

jlbMouse.addMouseListener(this);//添加鼠标监听

//定时器

timer = new Timer(delay,this);

random = new Random();

timer.start();

addMenu();//添加菜单

this.setResizable(false);//设置窗口大小不能改变

this.setVisible(true);

}

private void addMenu() {

JMenuBar menubar = new JMenuBar();

this.setJMenuBar(menubar);

JMenu game = new JMenu("游戏");

JMenuItem jitemNew = new JMenuItem("新游戏");

jitemNew.setActionCommand("new");

jitemNew.addActionListener(this);

JMenuItem jitemPause = new JMenuItem("暂停");

jitemPause.setActionCommand("pause");

jitemPause.addActionListener(this);

JMenuItem jitemExit = new JMenuItem("退出");

jitemExit.setActionCommand("exit");

jitemExit.addActionListener(this);

game.add(jitemNew);

game.add(jitemPause);

game.addSeparator();//菜单里设置分隔线

game.add(jitemExit);

menubar.add(game);

}

private void setbackground() {

((JPanel)(this.getContentPane())).setOpaque(false);//如果为 true,则该组件绘制其边界内的所有像素。否则该组件可能不绘制部分或所有像素,从而允许其底层像素透视出来。

ImageIcon bgImage = new ImageIcon("images/beijing.jpg");

JLabel bgLabel = new JLabel(bgImage);

bgLabel.setBounds(0, 25, bgImage.getIconWidth(), bgImage.getIconHeight());

this.getLayeredPane().add(bgLabel, new Integer(Integer.MIN_VALUE));//设置背景图片的层次最低

}

private void setMessage() {

ImageIcon showNumb = new ImageIcon(dir+"chuxiancishu.png");

JLabel showLabel = new JLabel(showNumb);

showLabel.setBounds(8, 8, 92, 80);

this.getContentPane().add(showLabel);

showNum = new JLabel("0");

showNum.setBounds(110, 8, 92, 80);

this.getContentPane().add(showNum);

ImageIcon hitNumb = new ImageIcon(dir+"chuxiancishu.png");

JLabel hitLabel = new JLabel(hitNumb);

hitLabel.setBounds(148, 8, 92, 80);

this.getContentPane().add(hitLabel);

hitNum = new JLabel("0");

hitNum.setBounds(251, 8, 92, 80);

this.getContentPane().add(hitNum);

ImageIcon grade = new ImageIcon(dir+"dangqiandengji.png");

JLabel gradeLabel = new JLabel(grade);

gradeLabel.setBounds(288, 8, 92, 80);

this.getContentPane().add(gradeLabel);

currentGrade = new JLabel("1");

currentGrade.setBounds(391, 8, 92, 80);

this.getContentPane().add(currentGrade);

}

public static void main(String[] args) {

new HitMouse();

}

public void actionPerformed(ActionEvent e) {

//对菜单项注册事件监听

if(e.getSource() instanceof JMenuItem){

menuItemFun(e);

}

int ran=random.nextInt(9);//随机生成一个0~9(不包括9)的随机数

ImageIcon imageMouse = new ImageIcon(dir+"dishu.png");//保证每次随机生成的地鼠图片都是为没被打时的图片

jlbMouse.setIcon(imageMouse);

switch(ran){

case 0:jlbMouse.setLocation(55, 63);break;

case 1:jlbMouse.setLocation(321, 204);break;

case 2:jlbMouse.setLocation(184, 204);break;

case 3:jlbMouse.setLocation(47, 203);break;

case 4:jlbMouse.setLocation(297, 133);break;

case 5:jlbMouse.setLocation(161, 133);break;

case 6:jlbMouse.setLocation(21, 133);break;

case 7:jlbMouse.setLocation(310, 63);break;

case 8:jlbMouse.setLocation(185, 63);break;

}

jlbMouse.setVisible(true);

showNumber++;

showNum.setText(""+showNumber);

if( !gamePlan() ){//判断游戏是否结束,并显示游戏进程

timer.stop();

}

}

//监听菜单功能功能

private void menuItemFun(ActionEvent e) {

if (e.getActionCommand().equalsIgnoreCase("new")) {//新游戏

timer.stop();

showNumber=0;

hitNumber=0;

currentGrades=1;

delay=1000;

isOver=false;

showNum.setText(""+showNumber);

hitNum.setText(""+hitNumber);

currentGrade.setText(""+currentGrades);

timer = new Timer(delay,this);

timer.start();

}

if (e.getActionCommand().equalsIgnoreCase("exit")) {//退出

System.exit(EXIT_ON_CLOSE);

}

if (e.getActionCommand().equalsIgnoreCase("pause")) {//暂停

timer.stop();

JOptionPane.showMessageDialog(this, "继续请按“确定”");

timer.start();

}

}

private boolean gamePlan() {

if(showNumber-hitNumber > 8){

JOptionPane.showMessageDialog(this, "Game Over !");

isOver=true;

return false;

}

if(hitNumber > 5){

hitNumber=0;

showNumber=0;

currentGrades++;

if(delay>100){

delay-=50;

}else if(delay>=500){

delay=500;

}

timer.setDelay(delay);

hitNum.setText(""+hitNumber);

showNum.setText(""+showNumber);

currentGrade.setText(""+currentGrades);

}

return true;

}

public void mouseClicked(MouseEvent e) {

}

public void mousePressed(MouseEvent e) {

if(isOver){

return ;

}

image = tk.createImage(dir+"chui2.png");

myCursor = tk.createCustomCursor(image, new Point(10,10), "xxx");

this.setCursor(myCursor);//鼠标按下时,鼠标显示打下去的图片,模拟打的动作

//如果打中地鼠,则地鼠换成被打中的图片,模拟地鼠被打

if(e.getSource()==jlbMouse){

ImageIcon imageIconHit = new ImageIcon(dir+"datou.png");

jlbMouse.setIcon(imageIconHit);

jlbMouse.setVisible(true);

}

hitNumber++;

hitNum.setText(""+hitNumber);

}

public void mouseReleased(MouseEvent e) {

if(isOver){

return ;

}

//当鼠标放松以后,鼠标变回原来没按下时的图片

image = tk.createImage(dir+"chui1.png");

myCursor = tk.createCustomCursor(image, new Point(10,10), "xxx");

this.setCursor(myCursor);

}

public void mouseEntered(MouseEvent e) {

}

public void mouseExited(MouseEvent e) {

}

}

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值