项目 射击游戏

这是一个使用Java编写的射击游戏,包含猪和鸟两种角色。游戏中的猪和鸟以标签控件的形式在背景面板上移动,线程控制它们的移动速度并随机休眠。当玩家点击鼠标时,如果子弹准备就绪,会消耗子弹并根据击中目标进行加分或扣分操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Component at = backgroundPanel.getComponentAt(e.getPoint())
if (at instanceof BackgroundPanel)( //如果点到面板也扣除子弹MainFrame.useAmmo(); //消耗子弹

//生成猪角色的线程
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();
/1生成鸟角色的线程
class BirdThread extends Thread (
@Override
public void run()t
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();

import java.awt Container;
import java awt.event.;
import javax.swing."
public class BirdLabel extends JLabel implements Runnable(
//随机生成线程的休眠时间,即控制鸟的移动速度
private int sleepTime = (int) (Math.random() *300) + 5;
private int y = 100;
private Thread thread; //将线程作为成员变量
private Container parent;
private int score = 15; /1 该类角色对应的分数
1/ 构造方法
public BirdLabel() (
super();
// 创建鸟的图标对象
Imagelcon icon = new lmagelcon(getClass().getResource("bird.gif"));
setlcon(icon); // 设置控件图标
addMouseListener(new MouseAction());//添加鼠标事件监听器// 添加控件事件监听器
addComponentListener(new ComponentAction());
) thread = new Thread(this); 1/ 创建线程对象
// 控件的事件监听器
private final class ComponentAction extends ComponentAdapter(
publicvoid componentResized(finalComponentEvente)
) thread.start(); /1线程启动
)
/1控件的鼠标事件监听器
private final class MouseAction extends MouseAdapter(
public void mousePressed(final MouseEvent elf
if (IMainFrame.readyAmmol))//如果子弹没有准备好
return; // 退出
MainFrame.useAmmo(); // 消耗子弹
appScore(); 1/加分
) destroy(); // 销毁本组件
)
public void run()(
parent =null;
int width = 0;
try (
while (width <=0|| parent ==null)(
if (parent == null) (
)else(parent = getParent(); // 获取父容器
width =parent.getWidth(); /1 获取父容器的宽度
)
Thread.sleep(10);

for (int i = width; i>0 && parent l= null;i-=8)(
setLocation(i, y); //从右向左移动本组件位置
Thread.sleep(sleepTime):// 休眠片刻
)catch (InterruptedException e)(
e.printStackTrace();

if (parent l= null) (
MainFrame.appScore(-score"10); //自然销毁将扣分
)
destroy(); //移动完毕,销毁本组件
// 从父容器移除本组件的方法
public void destroy()(
if (parent == null)
return;
parent.remove(this);// 从父容器中移除本组件
parent.repaint();
parent = null; //通过该语句终止线程循环
11加分的方法
private void appScore()(
System.out.println("鸟被击中”);
MainFrame.appScore(15);
)

import java.awt.Container;
import java.awt.event.·
import javax.swing.*
public class PigLabel extends JLabel implements Runnable(
//随机生成休眠时间,即猪的移动速度
private int sleepTime = (int) (Math random() * 300) + 30
private int y = 260; /控件的垂直坐标
private int score =10; //该角色对应的分数
private Thread thread; 11内置线程对象
·105·

private Container parent, //控件的父容器对象
/构造方法
public PigLabel() I
super();
Imagelcon icon = new lmagelcon(getClass).getResource("pig.gif"));//加载猪的图片setlcon(icon). // 设置本组件的图标
// 添加鼠标事件适配器
addMouseListener(new MouseAdapter()(
// 按下鼠标按键的处理方法
public void mousePressed(final MouseEvent e)(
if (lMainFrame.readyAmmo())
return;
MainFrame.useAmmo()://消耗子弹
appScore(); // 给游戏加分
destroy(); //销毁本组件

));
//添加组件事件适配器
addComponentListener(new ComponentAdapter()(
//调整组件大小时
public void componentResized(final ComponentEvent e)(
thread.start();//启动线程
)
));
//初始化线程对象
thread = new Thread(this);
public void run()(
parent= null;
int width = 0;
while (width <=0 || parent == null)( // 获取父容器宽度
if (parent == null)
parent = getParent();
else
width =parent.getWidth();
)
//从左向右移动本组件
for (inti=0;i< width && parentl=null;i+=8)(
setLocation(i, y);
try(
Thread.sleep(sleepTime);//休眠片刻
)catch(InterruptedException e)(
e.printStackTrace();
)
if (parentl= null) (
MainFrame.appScore(-score*10); //自然销毁将扣分

destroy();
)

public void destroy()(
if (parent == null)

return;
parent.remove(this);
parent.repaint();
parent=null; /通过该语句终止线程循环
11加分的方法
private void appScore()
System.out.println("猪被击中")
MainFrame.appScore(10);

import java.awt.";
import javax.swing.*
import java.awt.event.*;
public class MyPanel extends JPanel implements Runnable (int w = 90;
int h = 60;
String url =";
int result = 0;
Thread t = null;
int scWidth;
static int[] score = new int[7];
MainFrame mainFrame =null;
static int flag = 0;
// 初始化窗体
public MyPanei(String url, MainFrame main)(
mainFrame = main;
this.url = url;
t = new Thread(this);
scWidth= Toolkit.getDefaultToolkit().getScreenSize().width; try (
jblnit();
)catch (Exception exception)(
exception.printStackTrace();
)
)
// 绘图
public void paintComponent(Graphics g)(
super.paintComponent(g);
Image img =Toolkit.getDefaultToolkit().getlmage(url);
g.drawlmage(img,0, 0,w,h,this);
]
private void jblnit() throws Exception (
this.setOpaque(false);
this.setSize(new Dimension(w,h));
)
11 线程运行
public void run()(

int f= 5;
int time =80;
while (true)(
try (
int length = (int) (Math.random()*f);
int y = (int) this.getBounds().getY();
int x =(int) this.getBounds().getX() +length; if (x > scWidth-w) (
x=scWidth-w;
f=-f;
if (f < 0) (
time = (int) (Math.random() * 40) + 50;
)
this.setBounds(x,y, w, h);
int n = (int) (Math.random() *time)+ 1;
if (x<= 50 && f < 0) (
flag++;
switch (flag)(
case 1:
result=30;
break;
case 2:
result= 8;
break;
case 3:
result = 3;
/ break;
case 4:
result=1;
break;
case 5:
result = 0;
break;
case 6:
result = -4;
break;
case 7:
result=-10;
break;
break;
)
t.sleep(n);
) catch (Exception e) (
e.printStackTrace();
)
)
// 切割字符串有问题
int index =lnteger.parselnt(url.substring(6,7));
scorelflag -11 = result;
mainFrame.vtxtlindex-11.setText(String.valueOf(flag));if (flag==7)(
flag=0;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值