一、游戏回顾
打地鼠游戏是一款简单而有趣的反应游戏。游戏中,你需要在地洞中出现的地鼠出现时迅速点击它们,以获得分数。以下是一般的打地鼠游戏玩法介绍:
-
准备阶段:游戏开始时,你会看到一个由多个地洞组成的游戏界面。地洞中会随机出现地鼠。
-
游戏开始:地鼠会在不同的地洞中随机出现,你的任务是在它们消失之前尽快点击它们。
-
点击地鼠:当地鼠出现时,你需要迅速将光标移动到它所在的地洞,并点击鼠标或触摸屏上的相应区域,以消灭地鼠。
-
计分规则:每次成功点击地鼠都会获得一定的分数,分数通常会在地鼠消失后显示出来。你可以尝试在规定的时间内获得尽可能高的分数。
-
时间限制:游戏通常会设定一个时间限制,比如60秒。你需要在规定的时间内点击尽可能多的地鼠,以获得最高分数。
-
结束游戏:当时间用尽后,游戏结束,你可以看到你的分数以及其他相关信息,比如最高分、击中率等。
【预期效果】
击打地鼠可以加分,如果是炸弹,就会发生爆炸进行扣分。
二、分析实现
1、添加地鼠
维护一个mouses数组,随机往里面添加老鼠或者是炸弹。
//添加地鼠方法
public void addMouses() {
imgMouse = new ImageIcon(this.getClass().getResource("image/ms.png"));
imgMouseHit = new ImageIcon(this.getClass().getResource("image/mss.png"));
imgBomb = new ImageIcon(this.getClass().getResource("image/bomb.png"));
imgBoom = new ImageIcon(this.getClass().getResource("image/boom.png"));
mouses = new JLabel[9];
for (int i = 0; i < mouses.length; i++) {
mouses[i] = new JLabel();
mouses[i].setSize(imgMouse.getIconWidth(), imgMouse.getIconHeight());
//mouses[i].setIcon(imgMouse);
mouses[i].addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
Object obj = e.getSource();
if (obj instanceof JLabel) {
JLabel label = (JLabel) obj;
if (label.getIcon() != null && label.getIcon() == imgMouse) {
qiao.play();
label.setIcon(imgMouseHit);
label.setSize(imgMouseHit.getIconWidth(), imgMouseHit.getIconHeight());
score += 10;
shows[1].setText("当前分数:" + score);
} else if (label.getIcon() != null && label.getIcon() == imgBomb) {
boom.play();
label.setIcon(imgBoom);
label.setSize(imgBoom.getIconWidth(), imgBoom.getIconHeight());
life--;
shows[0].setText("剩余生命:" + life);
}
}
}
public void mousePressed(MouseEvent e) {
setCursor(myCursor2);
}
public void mouseReleased(MouseEvent e) {
setCursor(myCursor);
}
});
this.getContentPane().add(mouses[i]);
}
mouses[0].setLocation(213, 140);
mouses[1].setLocation(382, 140);
mouses[2].setLocation(552, 140);
mouses[3].setLocation(185, 267);
mouses[4].setLocation(382, 267);
mouses[5].setLocation(578, 267);
mouses[6].setLocation(160, 405);
mouses[7].setLocation(382, 405);
mouses[8].setLocation(600, 405);
}
【初始化9个洞】
//线程
public void run() {
while (true) {
while (isPause) {
try {
Thread.sleep(100);
} catch (Exception e) {
}
}
int i = (int) (Math.random() * 9);
int j = (int) (Math.random() * 9);
try {
Thread.sleep(500);
if (mouses[i].getIcon() == null) {
mouses[i].setIcon(imgMouse);
}
if (mouses[j].getIcon() == null && i != j) {
mouses[j].setIcon(imgBomb);
}
x = 2500 - 20 * tb.getValue();
if (x >= 2100) {
level = "菜鸟";
shows[2].setText("当前难度:" + level);
} else if (x >= 1300) {
level = "入门";
shows[2].setText("当前难度:" + level);
} else if (x >= 700) {
level = "中级";
shows[2].setText("当前难度:" + level);
} else {
level = "大师";
shows[2].setText("当前难度:" + level);
}
Thread.sleep(x);
if (mouses[i].isShowing()) {
mouses[i].setIcon(null);
}
if (mouses[j].isShowing()) {
mouses[j].setIcon(null);
}
} catch (Exception e) {
}
if (life == 0) {
winMessage("you are die!");
}
if (time == 0) {
winMessage("时间到");
}
}
}
2、计时器的实现
利用sleep方法,代码如下。
//时间倒计时
public void timeCount() {
timerCount.schedule(new TimerTask() {
public void run() {
while (true) {
while (isPause) {
try {
Thread.sleep(100);
} catch (Exception e) {
}
}
time--;
shows[3].setText("剩余时间:" + time);
if (time == 0) {
shows[3].setText("剩余时间:" + time);
}
try {
Thread.sleep(1000);
} catch (Exception e) {
}
}
}
}, 1000);
}
三、效果展示
【进度条】
【打地鼠】
【打到炸弹】
四、源码获取
Java实现的打地鼠小游戏资源-CSDN文库