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) { } } </pre>
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!