package 大鱼吃小鱼;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
/**
*
* 背景的绘制
*
*/
public class FishPanel extends JPanel {
//0:游戏加载;1:游戏开始;2:游戏暂停;3:游戏结束
int state = 0;//游戏状态
Image bkImg = new ImageIcon("images/bg.jpg").getImage();
Image over = new ImageIcon("images/bg.jpg").getImage();
Image zan = new ImageIcon("images/bg.jpg").getImage();
Image start = new ImageIcon("images/start.png").getImage();
ArrayList<Fish> fishs = new ArrayList<Fish>();//装其他鱼的集合
int miniFish = 0 , middleFish = 0 , bigFish = 0 ,superFish = 0 ;//各种鱼在初始界面鱼的数量
int score = 0;//初始分数
public FishPanel() {
myFish = new MyFish();
//music = new Music();
oldzhanLi=myFish.zhanLi;
}
MyFish myFish = new MyFish();//己方鱼
int oldzhanLi = myFish.zhanLi;
/**
* 绘制的方法
* g 画笔对象
*/
public void paint(Graphics g) {//画图必备路径
super.paint(g);// g 画笔对象
System.out.println("zzzzz");
//绘制游戏背景界面
switch(state) {
case 0://游戏加载
g.drawImage(start, 0, 0, 1440, 900, 0, 0, 500,300, null);
break;
case 1://游戏开始
drawBackGround(g);//背景绘制
drawMyFish(g);//绘制己方的小鱼
drawFishs(g);//绘制其他的鱼
g.setColor(Color.white);
Font f = new Font("黑体",Font.BOLD,20);
g.setFont(f);
g.drawString("当前得分:"+score, 15, 20);//"当前分数"在界面的位置
g.drawString("战斗力:"+myFish.zhanLi, 200, 20);//"战斗力"在界面的位置
break;
case 2://游戏暂停
g.drawImage(zan, 0, 0, null);
break;
case 3://游戏结束
//g.drawImage(over, 0, 0, null);break;
drawBackGround(g);//背景绘制
drawMyFish(g);//绘制己方的小鱼
drawFishs(g);//绘制其他的鱼
g.drawString("当前得分:"+score, 15, 20);//"当前分数"在界面的位置
g.drawString("战斗力:"+myFish.zhanLi, 200, 20);//"战斗力"在界面的位置
g.setColor(Color.white);//"游戏结束"的字体颜色
Font ff = new Font("黑体",Font.BOLD,50);//"游戏结束"字体为黑体,粗细为BOLD,大小为50
g.setFont(ff);
g.drawString("游戏结束",600 ,450);//"游戏结束"在界面的位置
break;
}
}
/**
* 绘制其他的方法
* @param g
*/
private void drawFishs(Graphics g) {
// TODO 自动生成的方法存根
for(int i = 0 ; i < fishs.size() ; i ++ ) {
Fish fish = fishs.get(i);
fish.draw(g);
}
}
/**
* 绘制游戏开始的背景
* @param g
*/
private void drawBackGround(Graphics g) {
// TODO 自动生成的方法存根
g.drawImage(bkImg, 0, 0, 1440, 900, 0, 0, 2048, 1024, null);
}
/**
* 绘制己方小鱼的方法
* @param g
*/
private void drawMyFish(Graphics g) {
// TODO 自动生成的方法存根
myFish.draw(g);
}
/**
* 键盘监听事件执行的方法
*/
public void move(int keycode) {
switch(keycode) {
case KeyEvent.VK_SPACE:
//空格键,进入游戏开始的界面
if(state == 0) {
state = 1;
}
break;
case KeyEvent.VK_LEFT:
//左键
if(state == 1) {//当游戏结束时鱼不能动
myFish.moveLeft();//己鱼
repaint();//敌方鱼
}
break;
case KeyEvent.VK_RIGHT:
//右键
if(state == 1) {//当游戏结束时鱼不能动
myFish.moveRight();//己鱼
repaint();//敌方鱼
}
break;
case KeyEvent.VK_UP:
//上键
if(state == 1) {//当游戏结束时鱼不能动
myFish.moveUp();//己鱼
repaint();//敌方鱼
}
break;
case KeyEvent.VK_DOWN:
//下键
if(state == 1) {//当游戏结束时鱼不能动
myFish.moveDown();//己鱼
repaint();//敌方鱼
}
break;
}
}
/**
* 定时器的方法:
* 创建其他鱼
* 不断的改变其他鱼的位置
*/
int index=1;
public void action() {
Timer timer=new Timer();
timer.schedule(new TimerTask() {
public void run() {
if(state == 1) {
//创建其他鱼,不断的改变其他鱼的位置
createFishs();
//吃鱼
hitFish();
//当鱼跑出圈外,我们要删除集中的鱼
repaint();
}
}
},20,10);//鱼生成周期
}
/**
* 吃鱼
*/
private void hitFish() {
// TODO 自动生成的方法存根
for( int i = 0 ; i < fishs.size() ; i ++ ) {
Fish fish = fishs.get(i);
//检查碰撞:如果是true则执行碰撞,否则没有参数碰撞
if( hit(fish) ) {
//产生碰撞:第一种情况吃掉其他鱼;第二种情况己方鱼被吃游戏结束
if(myFish.zhanLi >= fish.zhanLi) {
//自己鱼能吃掉敌方鱼,变强
switch(fish.zhanLi) {
case 1 ://吃最小鱼加一分
score ++;
break;
case 2 ://吃中下等鱼加二分
score += 2;
break;
case 3 ://吃中上等鱼加五分
score += 5;
break;
case 4 ://吃大鱼加十分
score += 10;
break;
}
//升级
if(score >= 5) {
myFish.zhanLi = 2;
}
if(score >= 25) {
myFish.zhanLi = 3;
}
if(score >= 45) {
myFish.zhanLi = 4;
}
//其他鱼要消失
fishs.remove(i);
//自己鱼变大
if(myFish.zhanLi > oldzhanLi) {
myFish.x1 = (int)(myFish.x1*1.1);
myFish.y1 = (int)(myFish.y1*1.1);
oldzhanLi = myFish.zhanLi;
}
}else {
//自己鱼被吃,游戏结束
//游戏状态分 0:游戏加载;1:游戏开始;2:游戏暂停;3:游戏结束
state = 3;//游戏结束
}
}
}
}
/**
* 检查碰撞:如果是true则执行碰撞,否则没有参数碰撞
* @param fish
* @return
*/
private boolean hit(Fish fish) {
// TODO 自动生成的方法存根
//找出自己鱼的坐标和其他鱼的坐标
int x = myFish.x + (myFish.x1 - myFish.x)/2;//己方鱼的x中心
int y = myFish.y + (myFish.y1 - myFish.y)/2;//己方鱼的y中心
if(x >= fish.x && x <= fish.x + fish.length) {
if(y >= fish.y && y <= fish.y + fish.height) {
return true;
}
}
return false;
}
/**
* 生成敌方鱼对象的速率
*/
private void createFishs() {
// TODO 自动生成的方法存根
if(miniFish ++ % 200 == 0) {//生成最小的鱼的速度
fishs.add(new MiniFish());
}
if(middleFish ++ % 400 == 0) {//生成中等下的鱼的速度
fishs.add(new MiddleFish());
}
if((bigFish ++ % 1000) == 0) {//生成中等上的鱼的速度
fishs.add(new BigFish());
}
if((superFish++%5000)==0) {//生成大的鱼的速度
fishs.add(new SuperFish());
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
基于Java+Swing实现大鱼吃小鱼小游戏(含用户登陆、注册功能)
共43个文件
class:15个
java:14个
png:8个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 171 浏览量
2023-12-22
11:17:12
上传
评论
收藏 1.97MB RAR 举报
温馨提示
详见:https://blog.csdn.net/Timi2019/article/details/135148590 1、创建窗口对象Ui 2、背景的绘制 3、键盘的监听事件 4、将己方鱼放上去 5、让小鱼移动 6、其他的鱼并引导(先创建集合将鱼装起来,获得每个对象,画图) 7、吃鱼 8、被吃
资源推荐
资源详情
资源评论
收起资源包目录
大鱼吃小鱼.rar (43个子文件)
大鱼吃小鱼
.classpath 396B
.settings
org.eclipse.jdt.core.prefs 781B
org.eclipse.core.resources.prefs 55B
myFile
User.text 23B
src
大鱼吃小鱼
Fish.java 468B
BigFish.java 1KB
Ui.java 1KB
SuperFish.java 1KB
MiddleFish.java 1KB
MiniFish.java 1KB
LoginFrame.java 6KB
MyFish.java 1KB
RegisterFrame.java 5KB
FishPanel.java 6KB
entity
Users.java 678B
com
lt
util
WindowUtil.java 788B
ReadTxt.java 4KB
UUIDUtils.java 720B
bin
大鱼吃小鱼
RegisterFrame.class 6KB
LoginFrame.class 6KB
FishPanel$1.class 731B
Ui.class 1KB
Fish.class 768B
BigFish.class 1KB
SuperFish.class 1KB
FishPanel.class 5KB
MiniFish.class 2KB
MiddleFish.class 2KB
MyFish.class 2KB
entity
Users.class 917B
com
lt
util
ReadTxt.class 4KB
WindowUtil.class 1013B
UUIDUtils.class 1KB
.project 391B
images
fish12.png 25KB
fish.png 1.02MB
fish08.png 23KB
fish13.png 22KB
bg.jpg 239KB
fish06.png 27KB
fish17.png 106KB
fish03.png 278KB
start.png 343KB
共 43 条
- 1
资源评论
五星资源
- 粉丝: 5621
- 资源: 1555
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功