Java实现的打地鼠小游戏完整示例【附源码下载】

本文实例讲述了Java实现的打地鼠小游戏。分享给大家供大家参考,具体如下:

这里涉及到java线程和GUI的相关知识,一个简单的java小游戏打地鼠,有兴趣的朋友可以优化一下。先来看看运行效果:

具体代码:

Mouse.java:

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.KeyEvent;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
public class Mouse {
  private int x, y;
  private int tab;
  private int data;
  Random rd = new Random();
  private boolean live = true;
  private int mouseTime = 10;
  private MouseClient mc;
  private static Toolkit tk = Toolkit.getDefaultToolkit();
  private static Image[] imgs = null;
  private static Map<Image, String> imgKV = new HashMap<Image, String>();
  static {
    imgs = new Image[] {
        tk.getImage(Mouse.class.getClassLoader().getResource(
            "images/A.png")),
        tk.getImage(Mouse.class.getClassLoader().getResource(
            "images/B.png")),
        tk.getImage(Mouse.class.getClassLoader().getResource(
            "images/C.png")),
        tk.getImage(Mouse.class.getClassLoader().getResource(
            "images/D.png")),
        tk.getImage(Mouse.class.getClassLoader().getResource(
            "images/E.png")),
        tk.getImage(Mouse.class.getClassLoader().getResource(
            "images/F.png")),
        tk.getImage(Mouse.class.getClassLoader().getResource(
            "images/G.png")),
        tk.getImage(Mouse.class.getClassLoader().getResource(
            "images/H.png")),
        tk.getImage(Mouse.class.getClassLoader().getResource(
            "images/I.png")),
        tk.getImage(Mouse.class.getClassLoader().getResource(
            "images/J.png")),
        tk.getImage(Mouse.class.getClassLoader().getResource(
            "images/K.png")),
        tk.getImage(Mouse.class.getClassLoader().getResource(
            "images/L.png")),
        tk.getImage(Mouse.class.getClassLoader().getResource(
            "images/M.png")),
        tk.getImage(Mouse.class.getClassLoader().getResource(
            "images/N.png")),
        tk.getImage(Mouse.class.getClassLoader().getResource(
            "images/O.png")),
        tk.getImage(Mouse.class.getClassLoader().getResource(
            "images/P.png")),
        tk.getImage(Mouse.class.getClassLoader().getResource(
            "images/Q.png")),
        tk.getImage(Mouse.class.getClassLoader().getResource(
            "images/R.png")),
        tk.getImage(Mouse.class.getClassLoader().getResource(
            "images/S.png")),
        tk.getImage(Mouse.class.getClassLoader().getResource(
            "images/T.png")),
        tk.getImage(Mouse.class.getClassLoader().getResource(
            "images/U.png")),
        tk.getImage(Mouse.class.getClassLoader().getResource(
            "images/V.png")),
        tk.getImage(Mouse.class.getClassLoader().getResource(
            "images/W.png")),
        tk.getImage(Mouse.class.getClassLoader().getResource(
            "images/X.png")),
        tk.getImage(Mouse.class.getClassLoader().getResource(
            "images/Y.png")),
        tk.getImage(Mouse.class.getClassLoader().getResource(
            "images/Z.png")),
        tk.getImage(Mouse.class.getClassLoader().getResource(
            "images/0.png")),
        tk.getImage(Mouse.class.getClassLoader().getResource(
            "images/1.png")),
        tk.getImage(Mouse.class.getClassLoader().getResource(
            "images/2.png")),
        tk.getImage(Mouse.class.getClassLoader().getResource(
            "images/3.png")),
        tk.getImage(Mouse.class.getClassLoader().getResource(
            "images/4.png")),
        tk.getImage(Mouse.class.getClassLoader().getResource(
            "images/5.png")),
        tk.getImage(Mouse.class.getClassLoader().getResource(
            "images/6.png")),
        tk.getImage(Mouse.class.getClassLoader().getResource(
            "images/7.png")),
        tk.getImage(Mouse.class.getClassLoader().getResource(
            "images/8.png")),
        tk.getImage(Mouse.class.getClassLoader().getResource(
            "images/9.png"))
    };
    imgKV.put(imgs[0], "A");
    imgKV.put(imgs[1], "B");
    imgKV.put(imgs[2], "C");
    imgKV.put(imgs[3], "D");
    imgKV.put(imgs[4], "E");
    imgKV.put(imgs[5], "F");
    imgKV.put(imgs[6], "G");
    imgKV.put(imgs[7], "H");
    imgKV.put(imgs[8], "I");
    imgKV.put(imgs[9], "J");
    imgKV.put(imgs[10], "K");
    imgKV.put(imgs[11], "L");
    imgKV.put(imgs[12], "M");
    imgKV.put(imgs[13], "N");
    imgKV.put(imgs[14], "O");
    imgKV.put(imgs[15], "P");
    imgKV.put(imgs[16], "Q");
    imgKV.put(imgs[17], "R");
    imgKV.put(imgs[18], "S");
    imgKV.put(imgs[19], "T");
    imgKV.put(imgs[20], "U");
    imgKV.put(imgs[21], "V");
    imgKV.put(imgs[22], "W");
    imgKV.put(imgs[23], "X");
    imgKV.put(imgs[24], "Y");
    imgKV.put(imgs[25], "Z");
    imgKV.put(imgs[26], "0");
    imgKV.put(imgs[27], "1");
    imgKV.put(imgs[28], "2");
    imgKV.put(imgs[29], "3");
    imgKV.put(imgs[30], "4");
    imgKV.put(imgs[31], "5");
    imgKV.put(imgs[32], "6");
    imgKV.put(imgs[33], "7");
    imgKV.put(imgs[34], "8");
    imgKV.put(imgs[35], "9");
  }
  public Mouse(int x, int y, int tab, MouseClient mc) {
    this.x = x;
    this.y = y;
    this.tab = tab;
    this.mc = mc;
    data = rd.nextInt(36);
    new Thread(new MouseTime()).start();
  }
  public void draw(Graphics g) {
    if (!live) {
      mc.mouses.remove(this);
      mc.tab[tab] = 0;
      return;
    }
    g.drawImage(imgs[data], x, y, null);
    Color c = g.getColor();
    g.setColor(Color.gray);
    g.setFont(new Font(null, 1, 40));
    g.drawString("" + mouseTime, x + 50, y + 10);
    if (mouseTime <= 0) {
      this.live = false;
      mc.eclipseTime++;
    }
  }
  public boolean keyReleased(KeyEvent e) {
    int key = imgKV.get(imgs[data]).charAt(0);
    if (e.getKeyCode() == key) {
      System.out.println(key);
      mc.mouseCount++;
      this.live = false;
      return true;
    }
    return false;
  }
  private class MouseTime implements Runnable {
    public void run() {
      while (true) {
        mouseTime--;
        try {
          Thread.sleep(1000);
        } catch (InterruptedException e) {
          e.printStackTrace();
        }
      }
    }
  }
}

MouseClient.java:

import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class MouseClient extends Frame {
  /*
   * 整个游戏界面的规格
   */
  public static final int GAME_WIDTH = 1000;
  public static final int GAME_HEIGHT = 700;
  public static int mouseCount;
  public static int count;
  public static int gameTime;
  public static int eclipseTime;
  List<Mouse> mouses = new ArrayList<Mouse>();
  Random rd = new Random();
  public int initMouseCount = 2;// 同时显示的地鼠数
  public int[] tab = new int[10];// 标记坑里是否有地鼠
  Image offScreenImage = null;
  /*
   * 本方法显示主窗口
   */
  public void launchFrame() {
    this.setLocation(200, 10);
    this.setSize(GAME_WIDTH, GAME_HEIGHT);
    this.setTitle("MouseClient");
    this.addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
        System.exit(0);
      }
    });
    this.setVisible(true);
    this.setBackground(Color.GREEN);
    this.setResizable(false);
    this.addKeyListener(new KeyMonitor());
    new Thread(new PaintThread()).start();
    new Thread(new GameTime()).start();
  }
  private class GameTime implements Runnable {
    public void run() {
      while (true) {
        gameTime++;
        try {
          Thread.sleep(1000);
        } catch (InterruptedException e) {
          e.printStackTrace();
        }
      }
    }
  }
  private class PaintThread implements Runnable {
    public void run() {
      while (true) {
        repaint();
        try {
          Thread.sleep(10);
        } catch (InterruptedException e) {
          e.printStackTrace();
        }
      }
    }
  }
  public void update(Graphics g) {
    if (offScreenImage == null) {
      offScreenImage = this.createImage(GAME_WIDTH, GAME_HEIGHT);
    }
    Graphics gOffScreen = offScreenImage.getGraphics();
    Color c = gOffScreen.getColor();
    gOffScreen.setColor(Color.GREEN);
    gOffScreen.fillRect(0, 0, GAME_WIDTH, GAME_HEIGHT);
    gOffScreen.setColor(c);
    paint(gOffScreen);
    g.drawImage(offScreenImage, 0, 0, null);
  }
  public void paint(Graphics g) {
    Color c = g.getColor();
    g.setColor(Color.gray);
    for (int i = 1; i <= 3; i++)
      for (int j = 1; j <= 3; j++)
        g.fillOval(GAME_WIDTH / 4 * i - 60, GAME_HEIGHT / 4 * j - 25,
            120, 50);
    g.setColor(c);
    g.drawString("击打数:" + count, 20, 40);
    g.drawString("击中数:" + mouseCount, 20, 60);
    g.drawString("逃跑数:" + eclipseTime + "", 20, 80);
    g.drawString("时间:" + gameTime + "s", 20, 100);
    if (mouseCount >= 80)
      initMouseCount = 8;
    else if (mouseCount >= 50)
      initMouseCount = 6;
    else if (mouseCount >= 20)
      initMouseCount = 4;
    int temp;
    while (mouses.size() < initMouseCount) {
      temp = rd.nextInt(9);
      while (tab[temp] == 1) {
        temp++;
        if (temp == 9)
          temp = 0;
      }
      tab[temp] = 1;
      mouses.add(new Mouse(GAME_WIDTH / 4 * (temp % 3 + 1) - 70,
          GAME_HEIGHT / 4 * (temp / 3 + 1) - 100, temp, this));
    }
    for (int i = 0; i < mouses.size(); i++) {
      Mouse m = mouses.get(i);
      m.draw(g);
    }
  }
  public static void main(String[] args) {
    MouseClient km = new MouseClient();
    km.launchFrame();
  }
  private class KeyMonitor extends KeyAdapter {
    public void keyReleased(KeyEvent e) {
      System.out.println(e.getKeyCode());
      count++;
      for (int i = 0; i < mouses.size(); i++) {
        if (mouses.get(i).keyReleased(e))
          break;
      }
    }
  }
}

附:完整实例代码点击此处本站下载

更多关于java算法相关内容感兴趣的读者可查看本站专题:《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》

希望本文所述对大家java程序设计有所帮助。

(0)

相关推荐

  • Java版AI五子棋游戏

    本文实例为大家分享了java五子棋游戏的具体代码,供大家参考,具体内容如下 AI思路:通过判断棋盘上每个空位的分数,去分数最高的几个点,随机下棋 分数计算思路:能成5个说明能赢了,给最高分 不能成5个,对方能成5个,说明对方要赢了,给第二高分 能成活4,给第三高分 能成活3,给第四高分 能成冲4,给第五高分 能成冲3,给第六高分 能成活2,给第七高分 能成冲2,给第八高分 其他,给最低分 分数设定可自己定义. 因为是去年写的了,思路记得大概就是这样.最近根据书上写了个棋类游戏的设计框架,待完善后

  • java实现斗地主游戏

    感想: 第一次写博客,感觉编辑器挺复杂厉害的,感觉自己的内容挺简单的.有什么问题请多多指教! 思路: 1.创建一个扑克牌的实体类Poker,设置了四个参数:花色.数字.牌值(判断大小).是否地主牌,实现getset方法和构造方法: 2.创建一个玩家的实体类Player,设置了四个参数: 初始牌集合,排序后牌集合,牌值集合,是否地主,实现getset方法和构造方法: 3.洗牌:循环嵌套花色数组跟数字数组生成52个Poker,手动加入大小王Poker,放进map(int,Poker)里面,利用Col

  • java实现flappy Bird小游戏

    本文实例为大家分享了java实现flappy Bird游戏的具体代码,供大家参考,具体内容如下 整个游戏由3个类构成.Bird类,Pipe类,stage类 第一步:首先写一个Bird类 //鸟类 public class Bird { private int flyHeight;//飞行高度 private int xpos;//距离y轴(窗口左边缘)的位置, public static int Up=1;//向上飞 public static int Down=-1;//向下飞 public

  • java实现猜拳游戏

    本文实例为大家分享了java实现猜拳游戏的具体代码,供大家参考,具体内容如下 package com.farsight.session7; import java.util.Scanner; /** * 根据输入的数字,判断数组strs的值 然后进行逻辑判断 */ public class 猜拳 { public static void main(String[] args) { String[] strs = { "石头", "剪刀", "布"

  • Java Swing实现扫雷小游戏

    swing设计扫雷心得,供大家参考,具体内容如下 最近学习swing学习之余做了一个小游戏:扫雷 1.前期设计 2.实现 其实完成这个游戏的核心就在于对数组的操纵,下面贴主要代码Main.java: package first; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.GridLayout; import java.awt.Image; import java.

  • java实现24点游戏

    游戏规则 从扑克中每次取出4张牌.使用加减乘除,第一个能得出24者为赢.(其中,J代表11,Q代表12,K代表13,A代表1),按照要求编程解决24点游戏. 基本要求 随机生成4个代表扑克牌牌面的数字字母,程序自动列出所有可能算出24的表达式 列出表达式无重复 用户初始生命值为一给定值(比如3),初始分数为0.随机生成4个代表扑克牌牌面的数字或字母,由用户输入包含这4个数字或字母的运算表达式(可包含括号),如果表达式计算结果为24则代表用户赢了此局. 使用计时器要求用户在规定时间内输入表达式,如

  • 小伙熬夜用Java重现经典超级马里奥代码实例

    说起Java,很多人都想问,Java这么火但是Java能干什么呢?Java主要是做企业级的应用开发,其实Java还可以做游戏开发,Java不仅开发过电脑端的游戏,手游也有开发过,经典的游戏有很多,比如<我的世界>.<吃豆>等等,今天小编来分享一个用Java开发超级马里奥. 游戏界面展示: 游戏代码如下: 以上所述是小编给大家介绍的Java重现经典超级马里奥详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的.在此也非常感谢大家对我们网站的支持!

  • java实现简单扫雷小游戏

    本文实例为大家分享了java实现扫雷游戏的具体代码,供大家参考,具体内容如下 import java.awt.BorderLayout; import java.awt.Color; import java.awt.Container; import java.awt.GridLayout; import java.awt.Insets; import java.awt.Label; import java.awt.event.ActionEvent; import java.awt.event

  • java连连看游戏菜单设计

    本文实例为大家分享了java连连看游戏菜单的具体实现代码,供大家参考,具体内容如下 先写GUI. 首先初始化框架,菜单,按钮,需要把菜单和按钮都添加在框架中.注意添加的顺序,首先要设置菜单,再设置框架,再设置按钮,如果交换了设置菜单和框架的顺序,会导致菜单显示不出,被框架挡住.对菜单设置了三个选项,第一个选项有五个下拉按键,用循环添加,第二个和第三个选项的下拉按键直接添加. GUI代码如下: package gui; import java.awt.Font; import javax.swin

  • Java实现Flappy Bird游戏源码

    本文实例为大家分享了Java实现Flappy Bird游戏的具体代码,供大家参考,具体内容如下 1.首先在mainActivity.xml中放置一个View,ID为viewDraw 2.开始编程,程序中自定义一个View类的子类,与viewDraw关联,程序除了放置如一个view控件,没有其他控件,程序上面的所有图片都是通过控制canvas画图实现 3.游戏是依据flappybird的游戏过程重新写的算法,功能与原版游戏相似,可能有些地方不足,完全是学习练习编程而已,做的不好见谅 4.原图片大小

随机推荐