java打地鼠游戏

来源:互联网 发布:投影机融合软件 下载 编辑:程序博客网 时间:2024/04/27 14:47


学习java中的图片处理


package xjj;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;boolean isHit = false;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.addMouseListener(this);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 + "dazhongcishu.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++;isHit = false;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&& !isHit) {isHit = true;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) {}}







4 0
原创粉丝点击