package FishGame;
import javax.swing.*;
import java.awt.*;
import java.util.ArrayList;
import java.util.TimerTask;
import java.util.Timer;
import java.awt.event.KeyEvent;
import java.awt.Graphics;
public class FishPanel extends JPanel{
////标识状态0开始,1运行,2暂停,3是结束
public int state = START;
public static final int START=0;
public static final int RUNNING =1;
public static final int PAUSE =2;
public static final int GAMEOVER =3;
Image bkImg = DataImg.background;
Image start =DataImg.start;
int score=0;//经验得分
ArrayList<Fish> fishes = new ArrayList<Fish>();//装其他🐟的集合
int fish_1=0,fish_2=1,fish_3=1,fish_4=1,fish_5=1;
boolean lock=true;
Point p;
myFish fish;
String username;
public FishPanel(String username){
this.username=username;
fish=new myFish();
}
@Override
public void paint(Graphics g) {
super.paint(g);
//绘制游戏背景界面
switch(state) {
case START: g.drawImage(start, 0, 0, 1440, 900, null);
g.setFont(new Font("微软雅黑",Font.BOLD,40));
g.setColor(Color.WHITE);
g.drawString("按下空格开始",600,600);
score=0;//再次初始化
break;
case RUNNING:
//背景绘制
drawBackGround(g);
//绘制己方的小鱼
drawMyFish(g);
//绘制其他的小鱼
drawFishes(g);
//设置字体颜色
g.setColor(Color.white);
Font f = new Font("黑体",Font.BOLD,20);//加粗
g.setFont(f); //传进去
g.drawString("当前得分:"+score, 15, 20);//在x=15,y=20显示分数
g.drawString("战斗力:"+fish.zhanli, 200, 20);
break;//一样
case PAUSE:
drawBackGround(g);
drawMyFish(g);
drawFishes(g);
g.setColor(Color.white);
Font fff = new Font("黑体",Font.BOLD,50);
g.setFont(fff);
g.drawString("按下空格继续游戏",500 ,450);
break;
case GAMEOVER:
drawBackGround(g);
drawMyFish(g);
drawFishes(g);
g.drawString("当前得分:"+score, 15, 20);
g.setColor(Color.white);
Font ff = new Font("黑体",Font.BOLD,50);
g.setFont(ff);
g.drawString("游戏 结束",600 ,450);
break;
}
}
/*定时器、
1.生成其他鱼
2.移动*/
public void action(){//多线程,timer内部实现
Timer timer=new Timer();
timer.schedule(new TimerTask() {//定时器任务
@Override
public void run() {
if(state==1) {
createFish();//1.创建其他鱼2.不断的改变其他鱼的位置:
hitFish();//3.吃鱼
if(lock)move(p);
outOfBounds();//4.当鱼跑出圈外,我们要删除集合中的鱼;
repaint(); //重画
}
}
},20,10);//20延迟执行,10每隔10ms执行run里面的内容一次
}
//产生鱼
private void createFish() {
if((fish_1++%200)==0) {//每隔10ms自加一次
fishes.add(new Fish_1());
}
if((fish_2++%300)==0) {
fishes.add(new Fish_2());
fishes.add(new Fish_2_1());
}
if((fish_3++%400)==0) {
fishes.add(new Fish_3());
}
if((fish_4++%600)==0) {
fishes.add(new Fish_4());
}
if((fish_5++%1500)==0) {
fishes.add(new Fish_5());
}
}
private void hitFish() {
for(int i=0;i<fishes.size();i++) {
if(hit(fishes.get(i))) {
if(fish.zhanli>=fishes.get(i).zhanli) {
switch(fishes.get(i).zhanli) {
case 1:
score++;
break;
case 2:
score+=2;
break;
case 3:
score+=3;
break;
case 4:
score+=4;
break;
}
fishes.remove(i);//根据分数加战力
if(score>=10 && score<40)
fish.zhanli=2;
if(score>=40 && score<80)
fish.zhanli=3;
if(score>=80)
fish.zhanli=4;
}else {
state=3;//运行结束
}
}
}
}
private void outOfBounds() {
for(int i=0;i<fishes.size();i++) {
if(fishes.get(i).isMoveLeft) {
if(fishes.get(i).x+fishes.get(i).length<=0) {
fishes.remove(i);
}
} else
if(fishes.get(i).x>=1440) {
fishes.remove(i);
}
}
}
//中心点在鱼的xy范围内,检测碰撞
public boolean hit(Fish fishs) {
int x=(fish.x1+fish.x)/2,y=(fish.y+fish.y1)/2;
int x1 = fish.x1,y1 = fish.y1;
int x2 = fish.x,y2 = fish.y;
if(((x>=fishs.x)&&(x<=fishs.x+fishs.length))||((x1>=fishs.x)&&(x1<=fishs.x+fishs.length))||((x2>=fishs.x)&&(x2<=fishs.x+fishs.length)) ){
if(((y>=fishs.y)&&(y<=fishs.y+fishs.height))||((y1>=fishs.y)&&(y1<=fishs.y+fishs.height))||((y2>=fishs.y)&&(y2<=fishs.y+fishs.height))) {
return true;//产生碰撞
}
}
return false;
}
public void move(int keycode) {//键盘事件移动鱼
switch(keycode) {
case KeyEvent.VK_RIGHT:
fish.moveRight();
break;
case KeyEvent.VK_LEFT:
fish.moveLeft();
break;
case KeyEvent.VK_UP:
fish.fishMoveUp();
break;
case KeyEvent.VK_DOWN:
fish.fishMoveDown();
break;
case KeyEvent.VK_ESCAPE:
if (state==RUNNING)state=GAMEOVER;
break;
case KeyEvent.VK_SPACE:
if(state == 0) {
state=RUNNING;
}else if(state==1){
state=PAUSE;
}else if(state==2){
state=RUNNING;
}
else if(state==3) {
state=START;
fish=new myFish();
fishes = new ArrayList<Fish>();
}
break;
}
repaint();
}
public void move(Point point){
p=point;
lock=true;//产生鼠标事件
if(p.x>(fish.x1+fish.x)/2 && p.y>=(fish.y1+fish.y)/2){fish.moveDownAndRight();}
else if(p.x>(fish.x1+fish.x)/2 && p.y<=(fish.y1+fish.y)/2){fish.moveUpAndRight();}
else if(p.x<(fish.x1+fish.x)/2 && p.y>=(fish.y1+fish.y)/2){fish.moveDownAndLeft();}
else if(p.x<(fish.x1+fish.x)/2 && p.y<=(fish.y1+fish.y)/2){ fish.moveUpAndLeft();}
else{lock=false;}
}
//画其他鱼
private void drawFishes(Graphics g) {
// TODO Auto-generated method stub
for(int i=0;i<fishes.size();i++) {
fishes.get(i).draw(g);
}
}
//画�
没有合适的资源?快使用搜索试试~ 我知道了~
资源详情
资源评论
资源推荐
收起资源包目录
FishGame.zip (56个子文件)
FishGame
src
FishGame
Fish_2_1.java 1KB
myFish.java 3KB
Fish_1.java 1KB
FishFrame.java 2KB
Fish_2.java 1KB
Fish_4.java 1KB
Fish_3.java 1KB
FishPanel.java 8KB
Fish.java 437B
Img
fish.png 1.02MB
fish17.png 106KB
fish12.png 25KB
fish03.png 278KB
begin_picture.jpg 324KB
fish08.png 23KB
background2.jpeg 259KB
fish06.png 27KB
fish13.png 22KB
Fish_5.java 1KB
DataImg.java 1KB
out
production
MyFishGame
FishGame
Fish_3$1.class 583B
Fish_2.class 2KB
FishFrame$1.class 981B
FishFrame.class 1KB
myFish$1.class 583B
Fish_4$1.class 583B
Fish_2$1.class 583B
Fish_2_1$1.class 595B
Fish_2_1.class 2KB
Fish_4.class 2KB
FishPanel.class 6KB
MyFishKeyListener.class 622B
Fish_1$1.class 583B
Fish_5.class 2KB
Fish.class 607B
Img
fish.png 1.02MB
fish17.png 106KB
fish12.png 25KB
fish03.png 278KB
begin_picture.jpg 324KB
fish08.png 23KB
background2.jpeg 259KB
fish06.png 27KB
fish13.png 22KB
DataImg.class 1KB
myFish.class 3KB
Fish_1.class 2KB
Fish_3.class 2KB
FishFrame$2.class 858B
Fish_5$1.class 583B
FishPanel$1.class 845B
.idea
.gitignore 184B
misc.xml 278B
workspace.xml 4KB
modules.xml 267B
MyFishGame.iml 433B
共 56 条
- 1
菜刀l四庭柱
- 粉丝: 23
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0