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

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

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

c0daf62425e4bdc4fc1680ecad850725.gif

具体代码:

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 imgKV = new HashMap();

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 mouses = new ArrayList();

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程序设计有所帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/512204.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入理解 Docker 网络原理

作者 | 渡、来源 | CSDN博客Docker网络原理容器是相对独立的环境&#xff0c;相当于一个小型的Linux系统&#xff0c;外界无法直接访问&#xff0c;那他是怎么做的呢&#xff0c;这里我们先了解下Linux veth pair。1. Linux veth pairveth pair是成对出现的一种虚拟网络设备接口…

全网首发|阿里资深技术专家数仓调优经验分享(上)

简介&#xff1a; 本篇文章总结了AnalyticDB表的设计的最佳经验、数据写入的最佳经验、高效查询的最佳实践&#xff0c;以及一些常见的问题。 随着云原生数据仓库AnalyticDB for MySQL&#xff08;下文统一简称&#xff1a;AnalyticDB&#xff09;在阿里集团各个业务线、社会上…

重大技术突破首次发布!十问解密云栖大会!

简介&#xff1a; 2021年10月19日&#xff0c;杭州&#xff0c;云栖大会正式开幕。大会上&#xff0c;阿里巴巴正式发布自研云芯片倚天710&#xff0c;这是阿里云推进“一云多芯”策略的重要一步&#xff0c;也是阿里第一颗为云而生的CPU芯片&#xff0c;将在阿里云数据中心部署…

Redis 缓存击穿(失效)、缓存穿透、缓存雪崩怎么解决?

作者 | 码哥来源 | 码哥字节原始数据存储在 DB 中&#xff08;如 MySQL、Hbase 等&#xff09;&#xff0c;但 DB 的读写性能低、延迟高。比如 MySQL 在 4 核 8G 上的 TPS 5000&#xff0c;QPS 10000 左右&#xff0c;读写平均耗时 10~100 ms。用 Redis 作为缓存系统正好可以…

在 Kubernetes 集群中使用 MetalLB 作为 Load Balancer(上)

作者 | Addo Zhang来源 | 云原生指北TL&#xff1b;DR网络方面的知识又多又杂&#xff0c;很多又是系统内核的部分。原本自己不是做网络方面的&#xff0c;系统内核知识也薄弱。但恰恰是这些陌生的内容满满的诱惑&#xff0c;加上现在的工作跟网络关联更多了&#xff0c;逮住机…

Java程序员情人节_盘点程序员情人节的表白,前端程序员最浪漫,后端不服来战...

今天是 2 月 14 日情人节&#xff0c;我看公众号后台有好多人在回复关键字&#xff1a;情人节表白代码。我想&#xff0c;我作为大家的校长&#xff0c;必须给大家送一波福利代码啊!我是真没想到&#xff0c;竟然很多程序员都想用代码表白&#xff0c;还整的挺浪漫的&#xff0…

GRPC: 如何实现分布式日志跟踪?

简介&#xff1a; 本文将介绍如何在 gRPC 分布式场景中&#xff0c;实现 API 的日志跟踪。 介绍 本文将介绍如何在 gRPC 分布式场景中&#xff0c;实现 API 的日志追踪。 什么是 API 日志追踪&#xff1f; 一个 API 请求会跨多个微服务&#xff0c;我们希望通过一个唯一的 ID…

一文搞懂物联网Modbus通讯协议

简介&#xff1a; 一般来说&#xff0c;常见的物联网通讯协议众多&#xff0c;如蓝牙、Zigbee、WiFi、ModBus、PROFINET、EtherCAT、蜂窝等。而在众多的物联网通讯协议中&#xff0c;Modbus是当前非常流行的一种通讯协议。它一种串行通信协议&#xff0c;是Modicon公司于1979年…

快看世界技术VP安尝思:从漫画到视频,如何用技术赋能创作

供稿 | 快看世界 2月25日&#xff0c;在火山引擎举办的视频云科技原力峰会上&#xff0c;快看世界技术VP安尝思受邀参加&#xff0c;并发表主题为《如何搭建轻量高效的视频技术体系》的演讲。 安尝思表示&#xff0c;快看视频内容的革命性变化来自于漫剧的推出&#xff0c;在过…

2021云栖大会丨阿里云发布第四代神龙架构,提供业界首个大规模弹性RDMA加速能力

简介&#xff1a; 10月20日&#xff0c;2021年杭州栖大云会上&#xff0c;阿里云发布第四代神龙架构&#xff0c;升级至全新的eRMDA网络架构&#xff0c;是业界首个大规模弹性RDMA加速能力。 10月20日&#xff0c;2021年杭州栖大云会上&#xff0c;阿里云发布第四代神龙架构。…

Rambus推出面向下一代数据中心的PCIe 6.0控制器

新闻摘要&#xff1a; 将先进的人工智能/机器学习、存储和网络应用的性能提升至64 GT/s优化了功耗、面积和延迟&#xff0c;全方位实现PCIe 6.0特性集成IDE引擎提供最先进的数据安全Rambus PCIe 6.0控制器框图 作为业界领先的芯片和IP核供应商&#xff0c;致力于使数据传输更…

阿里云混合云Apsara Stack 2.0发布 加速政企数智创新

简介&#xff1a; 2021年10月21日&#xff0c;杭州 – 今日&#xff0c;阿里云于云栖大会正式发布Apsara Stack 2.0&#xff0c;从面向单一私有云场景&#xff0c;升级为服务大型集团云&行业云场景。新一代Apsara Stack不仅可以为政企定制稳定、安全、开放、智能的数字底座…

ArrayList源码浅析

简介&#xff1a; ArrayList作为我们开发中最常用的集合&#xff0c;作为极高频次使用的类&#xff0c;我们不妨阅读源码一谈究竟。 前言 ArrayList作为我们开发中最常用的集合&#xff0c;作为极高频次使用的类&#xff0c;我们不妨阅读源码一谈究竟。 介绍 ArrayList继承…

阿里云边缘云ENS再升级 四大场景应用加速产业数字化落地

简介&#xff1a; 云栖大会 | 于10月21日上午举办的边缘云应用升级与技术创新论坛中&#xff0c;阿里云边缘云ENS产品全面升级&#xff0c;从边缘云产品、技术、行业应用等维度全面阐述阿里云在边缘计算领域的技术积累、产品&解决方案沉淀、商业实践。 一年一度科技圈盛事…

在 Kubernetes 集群中使用 MetalLB 作为 LoadBalancer(下)

作者 | Addo Zhang来源 | 云原生指北在上一篇《在 Kubernetes 集群中使用 MetalLB 作为 LoadBalancer&#xff08;上&#xff09;》中&#xff0c;我们使用 MetalLB 的 Layer2 模式作为 LoadBalancer 的实现&#xff0c;将 Kubernetes 集群中的服务暴露到集群外。还记得我们在 …

聚焦2021云栖大会,边缘云专场畅谈技术应用创新

简介&#xff1a; 本届大会以“前沿 探索 想象力”为主题&#xff0c;与业界同仁、合作伙伴共同打造一场数字时代的云上相聚。其中&#xff0c;边缘计算技术领域因5G快速发展而备受关注&#xff0c;阿里云边缘云专场吸引了数百位参会嘉宾驻足。 于10月21日上午举办的“边缘云应…

技术干货 | 闲鱼:一个优秀的 Push 平台,需要经历怎样的前世今生

简介&#xff1a; mPaaS 消息推送服务&#xff0c;快速集成多家厂商 Push 通道&#xff0c;有效提高用户留存率&#xff0c;提升用户体验。 编者荐语&#xff1a; 点击这里&#xff0c;了解 mPaaS 消息推送服务&#xff0c;快速集成多家厂商 Push 通道&#xff0c;有效提高用户…

「深入浅出」主流前端框架更新批处理方式

作者 | &#x1f47d;来源 | 前端Sharing背景在不同的技术框架背景下&#xff0c;处理更新的手段各不相同&#xff0c;今天我们来探讨一下&#xff0c;主流的前端框架批量处理的方式&#xff0c;和其内部的实现原理。通过今天的学习&#xff0c;你将收获这些内容&#xff1a;主…

钉钉宜搭3.0发布!易连接、酷数据、更安全

简介&#xff1a; 10月20日&#xff0c;在2021云栖大会低代码分论坛上&#xff0c;阿里巴巴资深技术专家叶周全&#xff08;花名骁勇&#xff09;发布钉钉宜搭3.0版本。 10月20日&#xff0c;在2021云栖大会低代码分论坛上&#xff0c;阿里巴巴资深技术专家叶周全&#xff08;…

基层数字化治理困境如何破局?

简介&#xff1a; 10月20日&#xff0c;2021云栖大会低代码分论坛如约举行。在这场低代码行业的盛会上&#xff0c;兰溪市大数据发展中心党组书记、主任芦建洪分享的内容获得了在场观众的热烈反响&#xff0c;兰溪市使用钉钉宜搭低代码破解基层数字化治理困境的成功经验也为全国…