Java游戏练习---打地鼠
2017-05-12 15:52
477 查看
先看一下样子吧
然后是代码
这里是需要的图片
然后是代码
package cn.hncu.games; import java.awt.Cursor; import java.awt.Dimension; import java.awt.Font; import java.awt.Graphics; 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.Date; import java.util.Random; import javax.swing.BorderFactory; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.SwingConstants; import javax.swing.Timer; import javax.swing.border.BevelBorder; /* * 一、显示图片(图像) * 1. JLabel: 构造方法 JLabel(Icon image) * 2. Icon接口: 有一个实现类ImageIcon,它的构造方法是ImageIcon(String filename) 二、设置鼠标 * 3. Window类中的一个方法: public void setCursor(Cursor cursor) * * 4.java.awt.Toolkit抽象类中的方法 1)创建自定义光标: public Cursor createCustomCursor(Image cursor, Point hotSpot, String name) 2)创建Image对象: public abstract Image createImage(String filename) 3)创建一个Toolkit对象: public static Toolkit getDefaultToolkit() 5. Image是表示图形图像的所有类的超类 三、分层显示 1. 通过JFrame中的方法" JLayeredPane getLayeredPane() ",获得一个分层面板 2. 在分层面板中添加对象即分层显示: add(Component comp, int index)---把组件comp加在分层面板的index位置,如果index值越小放在越低层 3. 分层显示时需把内容窗格设成透明(用的是JComponent中的方法):public void setOpaque(false) */ public class HitMouse extends JFrame implements ActionListener, MouseListener{ private final String DIR = "images/"; private JLabel jlbMouse; private Timer timer; private int delay=1000; private Random r = new Random( new Date().getTime() ); private JLabel timesShowLabel,timesHitLabel,gradeLabel; private int timesShow=0,timesHit=0,grade=1; private boolean isHit=false; public HitMouse() { setTitle("打地鼠"); setDefaultCloseOperation(EXIT_ON_CLOSE); setLocation(200, 200); setSize(438, 375); setResizable(false); //demo(); setBak();//设置背景 //setLayout(null);//屏蔽掉框架内容窗格的BorderLayout //设置光标 N NJNJ mySetCursor(1); this.addMouseListener(this); //设置地鼠 jlbMouse = new JLabel( new ImageIcon(DIR+"dishu.png")); jlbMouse.setLocation(100, 100); jlbMouse.setSize(80, 80); getContentPane().add(jlbMouse); jlbMouse.setVisible(false); jlbMouse.addMouseListener(this); //定时器 timer = new Timer(delay,this); timer.start(); //显示出现次数、打中次数、等级信息 JPanel panel = new JPanel(); panel.setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED)); panel.setPreferredSize(new Dimension(438,375)); getContentPane().add(panel); //加了panel之后,前面就不需要屏蔽框架内容窗格的BorderLayout了。因为现在,内容窗格都被panel盖住了 panel.setOpaque(false); //出现次数 timesShowLabel = new JLabel("0", new ImageIcon(DIR+"chuxiancishu.png"), SwingConstants.CENTER); timesShowLabel.setFont(n e4d8 ew Font("幼圆", Font.BOLD, 20)); timesShowLabel.setSize(146, 40); panel.add(timesShowLabel); //打中次数 timesHitLabel = new JLabel("0", new ImageIcon(DIR+"dazhongcishu.png"), SwingConstants.CENTER); timesHitLabel.setFont(new Font("幼圆", Font.BOLD, 20)); timesHitLabel.setSize(146, 40); panel.add(timesHitLabel); //等级 gradeLabel = new JLabel("1", new ImageIcon(DIR+"dangqiandengji.png"), SwingConstants.CENTER); gradeLabel.setFont(new Font("幼圆", Font.BOLD, 20)); gradeLabel.setSize(146, 40); panel.add(gradeLabel); setVisible(true); } private void mySetCursor(int i) { Toolkit tk = Toolkit.getDefaultToolkit(); Image img = null; if(i==1){ img = tk.createImage(DIR+"chui1.png"); }else{ img = tk.createImage(DIR+"chui2.png"); } Cursor cursor = tk.createCustomCursor(img, new Point(10,10), "xyz"); setCursor(cursor); } private void setBak() { ImageIcon bgImg = new ImageIcon(DIR+"beijing.jpg"); JLabel bgLabel = new JLabel(bgImg); bgLabel.setBounds(0, 0, bgImg.getIconWidth(), bgImg.getIconHeight()); //this.getContentPane().add(bgLabel);//要以分层的方式添加 this.getLayeredPane().add(bgLabel, new Integer(Integer.MIN_VALUE) ); ((JPanel)(this.getContentPane())).setOpaque(false); } @Override public void actionPerformed(ActionEvent e) { int pos = r.nextInt(9);//随机位置:0~8 switch(pos){ case 0: jlbMouse.setLocation(56,63);break; case 1: jlbMouse.setLocation(322,204);break; case 2: jlbMouse.setLocation(185,204);break; case 3: jlbMouse.setLocation(48,203);break; case 4: jlbMouse.setLocation(298,133);break; case 5: jlbMouse.setLocation(162,133);break; case 6: jlbMouse.setLocation(22,133);break; case 7: jlbMouse.setLocation(311,63);break; case 8: jlbMouse.setLocation(186,63); } jlbMouse.setIcon(new ImageIcon(DIR+"dishu.png"));//每次刚出来时应该是没有打中的状态显示 jlbMouse.setVisible(true); //更新出现次数信息 timesShow++; timesShowLabel.setText(timesShow+""); isHit=false; //Game Over的实现 if(timesShow>15){ int op = JOptionPane.showConfirmDialog(this, "太菜,挂了,还要再来一盘吗?!!!","Game Over",JOptionPane.YES_NO_OPTION); if(op==JOptionPane.YES_OPTION){ mySetCursor(1); delay=1000; grade=1; timesShow=0; timesHit=0; timesShowLabel.setText(""+timesShow); timesHitLabel.setText(""+timesHit); gradeLabel.setText(""+grade); timer.start(); }else{ timer.stop(); } } } public static void main(String[] args) { new HitMouse(); } @Override public void mouseClicked(MouseEvent e) { } @Override public void mousePressed(MouseEvent e) { mySetCursor(2); if(e.getSource()==jlbMouse && !isHit ){ isHit=true; jlbMouse.setIcon( new ImageIcon(DIR+"datou.png")); jlbMouse.setVisible(true); timesHit++; timesHitLabel.setText(""+timesHit); Toolkit.getDefaultToolkit().beep(); //升级 if(timesHit>8){ delay -=190;// if(delay<100){ jlbMouse.setVisible(false); timer.stop(); int op = JOptionPane.showConfirmDialog(this, "神啊,您已经打通关了,要重新来吗?","宇宙猛男",JOptionPane.YES_NO_OPTION); if(op==JOptionPane.YES_OPTION){ grade=0; delay=1000; }else{ System.exit(0); } } if(timer.isRunning()){ timer.stop(); } jlbMouse.setVisible(false); mySetCursor(1);//锤子复位 grade++; JOptionPane.showConfirmDialog(this, "游戏进入第"+grade+"关, 加油!!!","游戏升级",JOptionPane.CLOSED_OPTION); timesShow=0; timesHit=0; timesShowLabel.setText(""+timesShow); timesHitLabel.setText(""+timesHit); gradeLabel.setText(""+grade); timer.start(); } } } @Override public void mouseReleased(MouseEvent e) { mySetCursor(1); } @Override public void mouseEntered(MouseEvent e) { } @Override public void mouseExited(MouseEvent e) { } /////////以下属开发前的技术讲解演示////////////////// private void demo() { //显示图片 JLabel lb = new JLabel( new ImageIcon("images/a.gif")); getContentPane().add(lb); //设置光标 Toolkit t = Toolkit.getDefaultToolkit(); Image img = t.createImage("images/chui1.png"); Cursor cursor = t.createCustomCursor(img, new Point(5,5), "a"); setCursor(cursor); //JPanel设透明显示 JPanel p = new JPanel(); p.setOpaque(false); JPanel p2 = new JPanel(){ @Override public void print(Graphics g) { //g.drawImage(img, x, y, observer); } }; } }
这里是需要的图片
相关文章推荐
- java界面编程学习笔记:打地鼠游戏
- Java基本功练习四(用方法的思想编程举例,如显示当前时间、检验信用卡号合法性与类别、掷骰子游戏等)
- 初级java练习(报数杀人游戏)
- Java集合练习:斗地主游戏
- [Java练习]简单的抽牌游戏
- java课程练习---开发新游戏
- java打地鼠游戏
- Java基本功练习二(显示日历,石头剪子布游戏,找完全数等)
- JAVA之简陋打地鼠(监听事件的练习)
- java游戏源码(打地鼠游戏实现)
- Java打地鼠游戏
- java循环练习:猜数游戏
- Java游戏练习---音乐播放器
- java语言的科学与艺术-编程练习---打砖块游戏
- 一个由java实现的打地鼠游戏
- java面向对象练习08(游戏角色)
- Java实现的打地鼠游戏
- Java游戏编程---第一章 2D图形和动画
- Java游戏编程---人机交互和用户接口
- [转载] java编俄罗斯游戏