package Game;

import static java.lang.Math.random;

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class MainFrame extends JFrame {

private static final long serialVersionUID = 1L;

private static long score = 0;// 分数

private static Integer ammoNum = 5;// 子弹数量

private static JLabel scoreLabel;// 分数

private BackgroundPanel backgroundPanel;

private static JLabel ammoLabel;

private static JPanel infoPane;

/**

* 构造方法

*/

public MainFrame() {

super();

setResizable(false);// 进制调整窗体大小

setTitle("打猎游戏");

infoPane = (JPanel) getGlassPane();// 获取玻璃面板

JLabel label = new JLabel("装载子弹……");// 创建提示标签组件

label.setHorizontalAlignment(SwingConstants.CENTER);

label.setFont(new Font("楷体", Font.BOLD, 32));

label.setForeground(Color.RED);

infoPane.setLayout(new BorderLayout());

infoPane.add(label);// 添加提示标签组件到玻璃面板

setAlwaysOnTop(true);// 是窗体保持在最顶层

setBounds(100, 100, 573, 411);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

backgroundPanel = new BackgroundPanel();// 创建带背景的面板

backgroundPanel.setImage(new ImageIcon(getClass().getResource(

"background.jpg")).getImage());// 设置背景图片

getContentPane().add(backgroundPanel, BorderLayout.CENTER);

// 添加鼠标事件适配器

addMouseListener(new FrameMouseListener());

scoreLabel = new JLabel();// 显示分数的标签组件

scoreLabel.setHorizontalAlignment(SwingConstants.CENTER);

scoreLabel.setForeground(Color.ORANGE);

scoreLabel.setText("分数:");

scoreLabel.setBounds(25, 15, 120, 18);

backgroundPanel.add(scoreLabel);

ammoLabel = new JLabel();// 显示自动数量的标签组件

ammoLabel.setForeground(Color.ORANGE);

ammoLabel.setHorizontalAlignment(SwingConstants.RIGHT);

ammoLabel.setText("子弹数量:" + ammoNum);

ammoLabel.setBounds(422, 15, 93, 18);

backgroundPanel.add(ammoLabel);

}

/**

* 加分方法

*/

public synchronized static void appScore(int num) {

score += num;

scoreLabel.setText("分数:" + score);

}

/**

* 消耗子弹的方法

*/

public synchronized static void useAmmo() {

synchronized (ammoNum) {

ammoNum--;// 子弹数量递减

ammoLabel.setText("子弹数量:" + ammoNum);

if (ammoNum <= 0) {// 判断子弹是否小于0

new Thread(new Runnable() {

public void run() {

// 显示提示信息面板

infoPane.setVisible(true);

try {

// 1秒钟装载子弹的时间

Thread.sleep(1000);

} catch (InterruptedException e) {

e.printStackTrace();

}

ammoNum = 5;// 恢复子弹数量

// 修改子弹数量标签的文本

ammoLabel.setText("子弹数量:" + ammoNum);

infoPane.setVisible(false);// 隐藏提示信息面板

}

}).start();

}

}

}

/**

* 判断子弹是否够用

*

*/

public synchronized static boolean readyAmmo() {

synchronized (ammoNum) {

return ammoNum > 0;

}

}

public static void main(String args[]) {

EventQueue.invokeLater(new Runnable() {

public void run() {

try {

MainFrame frame = new MainFrame();

frame.setVisible(true);

frame.start();

} catch (Exception e) {

e.printStackTrace();

}

}

});

}

/**

* 启动游戏的方法

*/

public void start() {

new PigThread().start();

new BirdThread().start();

}

/**

* 窗体的鼠标事件监听器

*

*/

private final class FrameMouseListener extends MouseAdapter {

public void mousePressed(final MouseEvent e) {

Component at = backgroundPanel.getComponentAt(e.getPoint());

if (at instanceof BackgroundPanel) {// 如果点到面板也扣除子弹

MainFrame.useAmmo();// 消耗子弹

}

/*

* if (at instanceof BirdLabel) {// 如果点到小鸟 MainFrame.appScore(32);//

* 加分 } if (at instanceof PigLabel) {// 如果点到野猪

* MainFrame.appScore(11);// 加分 }

*/

}

}

/**

* 生成猪角色的线程

*

*/

class PigThread extends Thread {

@Override

public void run() {

while (true) {

// 创建代表野猪的标签控件

PigLabel pig = new PigLabel();

pig.setSize(120, 80);// 设置控件初始大小

backgroundPanel.add(pig);// 添加控件到背景面板

try {

// 线程随机休眠一段时间

sleep((long) (random() * 3000) + 500);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

}

/**

* 生成鸟角色的线程

*

*/

class BirdThread extends Thread {

@Override

public void run() {

while (true) {

// 创建代表小鸟的标签控件

BirdLabel bird = new BirdLabel();

bird.setSize(50, 50);// 设置控件初始大小

backgroundPanel.add(bird);// 添加控件到背景面板

try {

// 线程随机休眠一段时间

sleep((long) (Math.random() * 3000) + 500);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

}

}

java魔兽猎人_Java基于Swing实现的打猎射击游戏代码相关推荐

  1. java大作业的打猎游戏_Java基于Swing实现的打猎射击游戏代码

    本文实例讲述了Java基于Swing实现的打猎射击游戏代码.分享给大家供大家参考. 具体实现代码如下: 复制代码 代码如下: package Game; import java.awt.Graphic ...

  2. java写枪战游戏_Java基于Swing实现的打猎射击游戏代码

    本文实例讲述了Java基于Swing实现的打猎射击游戏代码.分享给大家供大家参考. 具体实现代码如下:package Game; import java.awt.Graphics; import ja ...

  3. java窗体实现射击_java_Java基于Swing实现的打猎射击游戏代码,本文实例讲述了Java基于Swing实 - phpStudy...

    package Game; import static java.lang.Math.random; import java.awt.*; import java.awt.event.*; impor ...

  4. Java Swing打猎射击游戏编程代码下载

    代码下载地址:http://www.zuidaima.com/share/1858069987494912.htm 原文:Java Swing打猎射击游戏编程代码下载 这是一款java swing编写 ...

  5. Java坦克大战,基于Swing编写很哇塞的小游戏,可以做课程设计毕业设计

    Java坦克大战,基于Swing编写很哇塞的小游戏,可以做课程设计毕业设计 有图有真相 操作方法:ASDW控制移动,鼠标控制炮筒旋转,鼠标左键开枪,空格发射炮弹, 开发思路是标准的游戏开发思路,单线程 ...

  6. java大作业的打猎游戏_Java Swing打猎射击游戏源码

    Java Swing打猎射击游戏源码 代码如下package Game;import java.awt.Graphics;import java.awt.Image;import javax.swin ...

  7. 基于java-swing打猎射击游戏

    目的 本方案为java面向对象部分的综合评测,本项目是对JAVA GUI API的综合实训. 描述 该项目是用射击游戏的案例,来增加学生的基础和面向对象的思想概念的理解 1.野猪奔跑 让野猪的图片通过 ...

  8. 【CSON原创】基于HTML5的横版射击游戏发布

    功能说明: 基于HTML5的横版射击游戏,参考自flash游戏<双面特工>.左右方向键控制移动,下方向键蹲下,上方向键跳跃,空格键射击.体验前请先关闭输入法. 该游戏基于自己开发的HTML ...

  9. java射击游戏_Java Swing打猎射击游戏源码

    代码如下 package Game; import java.awt.Graphics; import java.awt.Image; import javax.swing.JPanel; publi ...

最新文章

  1. linux DNS配置详解
  2. C++中友元类使用场合
  3. Linux slab 分配器剖析
  4. CloudFoundry Service 使用
  5. extjs 表单验证实例
  6. SAP CRM IBASE 一致性检查工具
  7. python图片读取优化_python读取raw binary图片并提取统计信息的实例
  8. 如何找到Eclipse左侧项目栏
  9. idea部署springboot项目到外部tomcat
  10. React开发(167):...数组拼接
  11. 开启 Appserv 的 curl 功能
  12. mysql limit函数
  13. LeetCode刷题(26)
  14. 数据结构与算法之递推算法 C++与PHP实现
  15. 叮咚:分享一款超棒的模组:IDO-SOM6Y08
  16. 奇幻RPG(人物构造 与 Abstract Factory模式)
  17. NPM报错 Error: EPERM: operation not permitted, unlink......解决办法。使用 rimraf 快速删除node_modules和清除缓存
  18. 【Shecan Notes】从二叉树出发浅谈风险中性定价
  19. CSRF 的攻击过程
  20. 三、在eclipse项目中添加Junit4

热门文章

  1. redis集成spring_将Redis集成到您的Spring项目中
  2. jenkins jboss_与JBoss Fuse,Jenkins和Nexus的持续集成
  3. 休息一下,或者:如何使用Java 12制作出色的拼图游戏
  4. java 快死了_如果Java快死了,那么它肯定看起来非常健康
  5. js 实现轻量ps_简单轻量的池实现
  6. maven 单元测试并行_并行运行单元测试
  7. idea中drl文件_得分DRL:在OptaPlanner中更快,更轻松
  8. javafx基础教程_JavaFX教程–基础
  9. 使用Spring boot,Thymeleaf,AngularJS从零开始构建一个新的Web应用程序-第3部分
  10. envers_分代缓存和Envers