一个基于Myeclipse开发的Java打地鼠小游戏(Appletcation)
2015-07-19 17:37
489 查看
package javaes.zixue.wangshang.daima;
2 3 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{ private static final long serialVersionUID = 1L; boolean isOver=false;//设置标记,游戏是否结束 private String dir="./images/";//图片目录,当前工程下 JLabel jlbMouse;//地鼠 Timer timer;//时间定时器 Random random;//随机数对象,即生成地鼠的位置 int delay=1000;//延迟时间 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(500, 300); this.setLocationRelativeTo(null);//设置窗口在屏幕中心 setbackground();//设置背景 this.getContentPane().setLayout(null);//设置框架布局模式为空,只有这样,才能知道图片的真正位置 //设置鼠标为锤子图片 tk = Toolkit.getDefaultToolkit(); image = tk.createImage(dir+"chui1.png"); myCursor = tk.createCustomCursor(image, new Point(30,30), "xxx"); this.setCursor(myCursor); setMessage();//设置一些提示信息 //在背景图片的基础上设置地鼠图片 ImageIcon imageMouse = new ImageIcon(dir+"datou.png"); jlbMouse = new JLabel(imageMouse); jlbMouse.setSize(100,100); 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); /* JMenuItem jitemEasy= new JMenuItem("简单"); jitemExit.setActionCommand("easy"); jitemExit.addActionListener(this); JMenuItem jitemYiban= new JMenuItem("中等"); jitemExit.setActionCommand("yiban"); jitemExit.addActionListener(this); JMenuItem jitemKunnan= new JMenuItem("困难"); jitemExit.setActionCommand("kunnan"); jitemExit.addActionListener(this)*/ game.add(jitemNew); game.add(jitemPause); game.addSeparator();//菜单里设置分隔线 game.add(jitemExit); game.addSeparator();//菜单里设置分隔线 /* game.add(jitemEasy); game.add(jitemYiban); game.add(jitemKunnan); */ 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(8, 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(148, 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(288, 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(70, 40);break; case 1:jlbMouse.setLocation(185, 35);break; case 2:jlbMouse.setLocation(315,40);break; case 3:jlbMouse.setLocation(55,95);break; case 4:jlbMouse.setLocation(190,95);break; case 5:jlbMouse.setLocation(315,90);break; case 6:jlbMouse.setLocation(50, 155);break; case 7:jlbMouse.setLocation(190, 160);break; case 8:jlbMouse.setLocation(320, 160);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")) {//退出 isOver=true; System.exit(EXIT_ON_CLOSE); } if (e.getActionCommand().equalsIgnoreCase("pause")) {//暂停 timer.stop(); JOptionPane.showMessageDialog(this, "继续请按“确定”"); timer.start(); } /* if (e.getActionCommand().equalsIgnoreCase("easy")) { timer.stop(); showNumber=0; hitNumber=0; currentGrades=1; delay=2500; isOver=false; showNum.setText(""+showNumber); hitNum.setText(""+hitNumber); currentGrade.setText(""+currentGrades); timer = new Timer(delay,this); timer.start(); } if (e.getActionCommand().equalsIgnoreCase("yiban")) { 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("kunnan")) { timer.stop(); showNumber=0; hitNumber=0; currentGrades=1; delay=100; isOver=false; showNum.setText(""+showNumber); hitNum.setText(""+hitNumber); currentGrade.setText(""+currentGrades); timer = new Timer(delay,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) { } }
相关文章推荐
- ios文章list
- android文章list
- ios文章list
- android文章list
- Unity3d角色控制器Character Controller
- 28-手势 响应者链 手势识别器
- 【译文】利用Palette为android应用着色
- 27-UIWebView
- iOS设计模式-桥接
- Swift开发教程--如何去掉UITableViewController黑色线条
- swift中的闭包
- Android 偏方
- 我的Android进阶之旅------>Android SDK支持的配置标识符(有用的参考文件)
- AndroidAnnotations前奏(部署)
- Android SDK下载和更新失败的解决方法
- iOS应用程序生命周期(前后台切换,应用的各种状态)详解 .
- ios 线程同步
- IOS SEL (@selector) 原理及使用总结(二)
- one recursive approach for 3, hdu 1016 (with an improved version) , permutations, N-Queens puzzle
- IOS SEL (@selector) 原理及使用总结(一)