打地鼠游戏代码

  • 格式:doc
  • 大小:16.02 KB
  • 文档页数:6

package org.hzy.app.timeMod;import java.awt.Color;public class TimeChallenge<bgSound> extends JFrame{private BgPanel pnlMain; //画板,用来装载所有控件private SoundPlayer bgSound; //音乐对象1private SoundPlayer hitSound; //音乐对象2,用来在程序中替换音乐对象1 private AnimalLabel[] lblRats; //自定义标签,用来显示地鼠或者兔子private JLabel lblScore; //显示分数的标签private int score; //统计玩家得分private int re_time; //剩余时间private JLabel lblRemainT; //显示剩余时间//计时模式下的游戏总时间private long totalTime;//计时模式下的游戏开始时间private long beginTime;//显示的剩余时间private int showTime=60;//倒计时显示private JLabel lblTime;private Player[] topTen; //玩家数组private JFrame parentFrame;public Object time_bar;public TimeChallenge (JFrame parentFrame) {this.parentFrame = parentFrame;initSound(); //初始化音乐initControls(); //初始化控件,即窗口上的所有东西initTop10(); //初始化分数文件,采用对象流读写}private void closeMainFrame(){ //关闭当前窗口的方法int rst = JOptionPane.showConfirmDialog(TimeChallenge.this,"你确定要返回吗?\n关卡进度将不会被保存!","确认", JOptionPane.OK_CANCEL_OPTION);if(rst == JOptionPane.OK_OPTION){ //如果确定关闭当前窗口TimeChallenge.this.dispose();bgSound.stop(); //播放音乐停止}}private void initSound() { //初始化音频bgSound = new SoundPlayer("sound/_bg.wav");bgSound.loop(); //循环音乐,直到关闭窗口}private void initControls() { //初始化当前窗口上的各个控件lblScore = new JLabel("得分:" + score);lblScore.setFont(new Font("华文琥珀", Font.BOLD, 20));//字体设置为华文琥珀,字体样式设置为粗体lblScore.setSize(150, 50);lblScore.setLocation(90, 397);lblScore.setBackground(Color.CYAN);lblScore.setForeground(new Color(191, 18, 205));lblRemainT = new JLabel("剩余时间:" + re_time);lblRemainT.setFont(new Font("华文琥珀", Font.BOLD, 20));lblRemainT.setSize(150, 50);lblRemainT.setLocation(345, 397);lblRemainT.setBackground(Color.BLACK);lblRemainT.setForeground(new Color(217, 44, 6));pnlMain = new BgPanel("img/bg.jpg");pnlMain.setLayout(null);pnlMain.setBounds(0, 0, 640, 480);// pnlMain.add(lblRat);lblRats = new AnimalLabel[9];for (int i = 0; i < lblRats.length; i++) {lblRats[i] = new AnimalLabel();lblRats[i].setSize(90, 90);lblRats[i].setVisible(false);lblRats[i].addMouseListener(new MouseAdapter() {@Overridepublic void mouseClicked(MouseEvent e) {AnimalLabel lbl = (AnimalLabel) e.getSource();if (lbl.isVisible()) {switch (lbl.getScore()) {case 10:hitSound = new SoundPlayer("sound/_hit.wav");hitSound.play();break;default:hitSound = new SoundPlayer("sound/_hiterror.wav");hitSound.play();break;}score += lbl.getScore();lblScore.setText("得分:" + score);lbl.setVisible(false);}}});}lblRats[0].setLocation(115, 110);//九个位置。

地鼠或者兔子将随机的出现在这里lblRats[1].setLocation(255, 110);lblRats[2].setLocation(415, 110);lblRats[3].setLocation(85, 200);lblRats[4].setLocation(258, 200);lblRats[5].setLocation(418, 200);lblRats[6].setLocation(80, 300);lblRats[7].setLocation(258, 300);lblRats[8].setLocation(433, 300);this.setCursor(Toolkit.getDefaultToolkit().createCustomCursor(Toolkit.getDefaultToolkit().getImage("img/hammer.png"),new Point(3, 3), "myhammer"));// 把鼠标改成锤子for (AnimalLabel lbl : lblRats) {pnlMain.add(lbl); //显示各个地鼠或者兔子的标签}pnlMain.add(lblScore); //显示分数pnlMain.add(lblRemainT);//显示剩余时间getContentPane().add(pnlMain);// getContentPane().add(pnlMain);// getContentPane().add(pnlMain); //等于this.add(pnMain);this.setResizable(false);this.setTitle("时间挑战——打地鼠");this.setSize(640, 480);getContentPane().setLayout(null);this.setResizable(false); //禁止拉伸窗口this.setLocationRelativeTo(null);this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);this.addWindowListener(new WindowAdapter() {@Overridepublic void windowClosing(WindowEvent e) {closeMainFrame();}});ShowAnimal sa = new ShowAnimal(); //Thread t1 = new Thread(sa); //开一个线程用来显示兔纸或者地鼠// Thread t2 = new Thread(sa);// Thread t3 = new Thread(sa);t1.start();// t2.start();// t3.start();UpdateTime ut=new UpdateTime();Thread t3=new Thread(ut);t3.start();}private class UpdateTime implements Runnable{ //倒计时@Overridepublic void run() {for (int i = 1; i <= 60; i++) {int x = i;re_time=60-x;lblRemainT .setText("剩余时间:" + re_time);if(re_time==0){JOptionPane.showMessageDialog(TimeChallenge.this, "Game Over, 你的得分:"+ score);}try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}}}private class ShowAnimal implements Runnable { //用线程来显示小动物@Overridepublic void run() {while (re_time<60&&re_time>0){//9个数字代表9个动物(兔子或者地鼠),每一次只得到1个int current = new Random().nextInt(lblRats.length);lblRats[current].setVisible(true); //把随机得到的这个动物设为出现// public void time(float time ,float num){// if(time>0&&time<20){// num=1;// Thread.sleep(1000);// }else if(time>20&&time<30){// num=1;// Thread.sleep(500);// }else if(time>30&&time<40){// num=2;// Thread.sleep(500);// }else{// num=3;// Thread.sleep(300);// }// }try{Thread.sleep(1000); //每次1秒的间隔}catch (InterruptedException e){// TODO Auto-generated catch blocke.printStackTrace();}lblRats[current].setVisible(false);}}}private void initTop10() {try {FileInputStream fis = new FileInputStream("scoretime.dat");ObjectInputStream ois = new ObjectInputStream(fis);topTen = (Player[]) ois.readObject();ois.close();} catch (IOException | ClassNotFoundException e) {topTen = new Player[10];for (int i = 0; i < topTen.length; i++) {topTen[i] = new Player();topTen[i].setName("No Name");topTen[i].setScore(0);}Arrays.sort(topTen, new MyCompare());}StringBuffer sb = new StringBuffer();for (int i = topTen.length - 1; i >= 0; i--) {sb.append(topTen[i].getName());sb.append(" ");sb.append(topTen[i].getScore());sb.append("\n");}JOptionPane.showMessageDialog(TimeChallenge.this, sb.toString());}}。