package cn.highedu.fish;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.util.Random;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
/**
* 游戏主界面类 继承自JFrame(窗体)类
*/
public class FishFrame extends JFrame {
// 随机产生一个数字
final Random random = new Random();
//定义鼠标在界面上的坐标
int x0;
int y0;
// 构造方法,可以设置窗体,并且定义窗体的各个组件
public FishFrame() {
// 定义窗体的背景,并且加载背景图片
JLabel bg = new JLabel(new ImageIcon("img/background.png"));
// 定义关闭按钮
JButton close = new JButton(new ImageIcon("img/close.png"));
// 设置按钮的位置和大小
close.setBounds(776, 15, 32, 32);
// 去掉按钮的边框
close.setBorderPainted(false);
// 设置透明
close.setContentAreaFilled(false);
// 鼠标选中后不显示焦点
close.setFocusPainted(false);
// 注册事件,点击关闭按钮,关闭窗体
close.addActionListener(new ActionListener() {
// 事件处理操作
@Override
public void actionPerformed(ActionEvent e) {
// 关闭窗体
System.exit(0);
}
});
// 定义最小化按钮
JButton min = new JButton(new ImageIcon("img/min.png"));
// 设置最小化按钮的位置和大小
min.setBounds(735, 15, 32, 32);
// 去掉边框
min.setBorderPainted(false);
// 设置透明
min.setContentAreaFilled(false);
// 设置鼠标选中不显示焦点
min.setFocusPainted(false);
// 注册事件,点击最小化按钮,最小化窗体
min.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// 最小化窗体
FishFrame.this.setState(JFrame.ICONIFIED);
}
});
// 把关闭按钮放入背景中
bg.add(close);
// 把最小化按钮放入背景
bg.add(min);
// 创建鱼塘
final FishPanel pond = new FishPanel(this);
// 设置鱼塘的位置和大小
pond.setBounds(15, 50, 800, 480);
// 把鱼塘放入到背景中
bg.add(pond);
//鼠标在界面上移动,获取鼠标的坐标
//注册鼠标移动事件
this.addMouseMotionListener(new MouseMotionListener() {
@Override
public void mouseDragged(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseMoved(MouseEvent e) {
x0 = e.getX();
y0 = e.getY();
pond.repaint();//重画(刷新)
}
});
//点击鼠标打出炮弹
this.addMouseListener(new MouseListener() {
//鼠标单击事件
@Override
public void mouseClicked(MouseEvent e) {
if(pond.money > 0) {
//单击鼠标打出炮弹
Bullet bullet = new Bullet();//创建炮弹
bullet.pond = pond;//赋给炮弹鱼塘
x0 = e.getX();
y0 = e.getY();
bullet.th = coculateTh();//炮弹的角度
//炮弹的初始位置
bullet.x = (int) (440 + Math.sin(bullet.th)*35);
bullet.y = (int) (460 - Math.cos(bullet.th)*35);
//把炮弹放入鱼塘
pond.bullets.add(bullet);
pond.money--;
//启动炮弹的线程
new Thread(bullet).start();
}
if(pond.money < 1 && pond.bullets.size() == 0) {
JOptionPane.showMessageDialog(null, "游戏结束");
System.exit(0);
}
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
});
// 创建鱼,启动鱼的线程(让鱼游动)
new Thread() {
public void run() {
while (true) {
// 创建鱼
Fish fish = new Fish();
fish.pond = pond;//引入鱼塘
//产生一个1到9之间的数字,用来表示鱼的种类
fish.type = random.nextInt(9) + 1;
/**
* 1-3类鱼1炮打死,生成2个金币
* 4-5类鱼2炮打死,生成4个金币
* 6-7类鱼3炮打死,生成6个金币
* 8-9类鱼4炮打死,生成8个金币
*/
switch(fish.type) {
case 1:
case 2:
case 3:
fish.hp = 1;
fish.worth = 2;
break;
case 4:
case 5:
fish.hp = 2;
fish.worth = 4;
break;
case 6:
case 7:
fish.hp = 3;
fish.worth = 6;
break;
case 8:
case 9:
fish.hp = 4;
fish.worth = 8;
break;
}
//产生一个1到3之间的数字,用来表示鱼的方向
fish.r = random.nextInt(3) + 1;
//定义存放鱼图片的数组
ImageIcon img[] = new ImageIcon[10];
//字符串拼接,产生鱼的完整图片路径
StringBuffer buffer = new StringBuffer("img/");
//根据鱼的方向拼接不同方向的鱼的图片文件夹
switch(fish.r) {
case 1://从左到右方向的鱼
buffer.append("left_to_right/");
fish.x = 0;
fish.y = random.nextInt(300) + 50;
break;
case 2://从右到左方向的鱼
buffer.append("right_to_left/");
fish.x = 800;
fish.y = random.nextInt(300) + 50;
break;
case 3://从上到下方向的鱼
buffer.append("top_to_bottom/");
fish.x = random.nextInt(750) + 50;
fish.y = 0;
break;
}
//根据鱼的种类拼接鱼的图片
for(int i = 0; i < img.length; i++) {
img[i] = new ImageIcon(buffer.toString()
+ "fish0" + fish.type + "_" +
(i < 9 ? "0" : "") + (i + 1) + ".png");
}
fish.img = img;//给鱼赋图片
//启动鱼的线程
new Thread(fish).start();
//把鱼放入鱼塘
pond.fishes.add(fish);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
}.start();// 启动线程
// 在窗体中添加背景
this.add(bg);
// 去掉窗体的边框
this.setUndecorated(true);
// 设置窗体的大小,宽度是830,高度是545,单位:像素
this.setSize(830, 545);
// 设置窗体的初始位置,位置屏幕中间
this.setLocationRelativeTo(null);
// 设置关闭窗体,同时关闭计算机内存中的进程
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 设置窗体图标
this.setIconImage(new ImageIcon("img/icon.jpg").getImage());
// 显示窗体
this.setVisible(true);
}
// 启动程序
public static void main(String[] args) {
new FishFrame();
}
//角度算法
public double coculateTh() {
double th = 0;//定义角度
double dx = x0 - 440;//角度的对边
double dy = 460 - y0;//角度的临边
double tan = dx/dy;//角度的正切值
th = Math.atan(tan);//计算角度(反正切函数)
//当鼠标位于旋转点下方
if(dy <= 0) {
//鼠标位于旋转点左边
if(dx < 0) {
//炮口水平朝左
th = -Math.PI/2;
}
//鼠标位于旋转点右边
else {
//炮口水平朝右
th = Math.PI/2;
}
}
return th;
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
Java实现捕鱼达人游戏
共365个文件
png:331个
class:11个
xml:9个
需积分: 5 0 下载量 58 浏览量
2024-04-18
12:19:15
上传
评论
收藏 2.47MB ZIP 举报
温馨提示
Java实现捕鱼达人游戏
资源推荐
资源详情
资源评论
收起资源包目录
Java实现捕鱼达人游戏 (365个子文件)
FishPanel.class 3KB
FishFrame.class 3KB
FishFrame$5.class 3KB
Bullet.class 2KB
FishFrame$4.class 2KB
FishNet.class 2KB
Coin.class 1KB
Fish.class 1KB
FishFrame$3.class 1KB
FishFrame$2.class 738B
FishFrame$1.class 728B
.gitignore 184B
fishing.iml 597B
jaco-mp3-player-0.9.3.jar 88KB
FishFrame.java 7KB
FishPanel.java 3KB
Bullet.java 2KB
FishNet.java 1KB
Fish.java 1KB
Coin.java 1KB
pond.jpg 71KB
背景.jpg 48KB
icon.jpg 8KB
羊.jpg 6KB
背景音乐.mp3 622KB
fish09_09.png 13KB
fish09_08.png 13KB
fish09_09.png 13KB
fish09_08.png 13KB
fish09_10.png 13KB
fish09_10.png 13KB
fish09_01.png 13KB
fish09_03.png 13KB
fish09_04.png 13KB
fish09_07.png 12KB
fish09_09.png 12KB
fish09_02.png 12KB
fish09_01.png 12KB
fish09_10.png 12KB
fish09_08.png 12KB
fish09_03.png 12KB
fish09_05.png 12KB
fish09_04.png 12KB
fish09_07.png 12KB
fish09_02.png 12KB
fish09_06.png 12KB
fish09_01.png 12KB
fish09_05.png 12KB
fish09_06.png 12KB
fish09_04.png 12KB
fish09_03.png 12KB
fish09_02.png 12KB
fish09_07.png 12KB
fish09_05.png 12KB
fish09_06.png 11KB
background.png 10KB
fish08_03.png 10KB
fish08_04.png 10KB
fish08_02.png 10KB
fish08_04.png 10KB
fish08_05.png 10KB
fish08_04.png 10KB
fish08_03.png 10KB
fish08_05.png 10KB
fish08_03.png 10KB
fish08_02.png 10KB
fish08_05.png 10KB
barrel.png 10KB
fish08_02.png 10KB
fish08_06.png 9KB
fish08_01.png 9KB
fish08_10.png 9KB
fish08_06.png 9KB
fish08_01.png 9KB
fish08_06.png 9KB
fish08_01.png 9KB
fish08_10.png 9KB
fish08_07.png 9KB
fish08_10.png 9KB
fish08_09.png 9KB
fish08_07.png 9KB
fish08_07.png 9KB
fish08_09.png 9KB
fish08_08.png 9KB
fish08_09.png 8KB
fish08_08.png 8KB
fish08_08.png 8KB
fishnet.png 7KB
月饼.png 7KB
南瓜.png 6KB
月饼2.png 6KB
毛线.png 6KB
南瓜2.png 6KB
酒坛.png 5KB
白菜.png 5KB
毛线2.png 5KB
fish04_06.png 5KB
面具.png 5KB
fish04_06.png 5KB
兔子.png 5KB
共 365 条
- 1
- 2
- 3
- 4
资源评论
zhangyan_1010
- 粉丝: 1130
- 资源: 8
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功