大家好,今天小编来为大家解答以下的问题,关于打鱼网站源码分享,打鱼网站是什么这个很多人还不知道,现在让我们一起来看看吧!
使用Java300行写出一个单机捕鱼游戏,效果如下
packageorg.wf.game.fish;
importjava.awt.Color;
importjava.awt.Font;
importjava.awt.Graphics;
importjava.awt.event.MouseAdapter;
importjava.awt.event.MouseEvent;
importjava.awt.image.BufferedImage;
importjava.io.File;
importjava.io.IOException;
importjava.util.Random;
importjavax.imageio.ImageIO;
importjavax.swing.JFrame;
importjavax.swing.JPanel;
publicclassFishGame{
/**
*@paramargs
*@authorwangfan
*@version捕鱼1.0
*@time2015.06.19
*/
publicstaticvoidmain(String[]args){
//游戏画框
JFramejf=newJFrame(&34;);
jf.setSize(800,480);
jf.setLocationRelativeTo(null);
jf.setResizable(false);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setAlwaysOnTop(true);
//加载鱼池
Poolpool=newPool();
jf.add(pool);
//显示框架
jf.setVisible(true);
pool.action();
}
}
//鱼池类
classPoolextendsJPanel{
privatestaticfinallongserialVersionUID=1L;
BufferedImagebgImage;//背景图片
Fish[]fishs=newFish[20];//所有的鱼
Netnet=newNet();//渔网
booleanisExit;//鼠标是否在游戏界面
intscore,bullet=50;//游戏得分,子弹数
publicPool(){
super();
Filebg=newFile(&34;);
try{
bgImage=ImageIO.read(bg);
}catch(IOExceptione){
e.printStackTrace();
}
//0-8,9-17对应1-9号鱼
for(inti=0;i<fishs.length/2-1;i++){
fishs[i]=newFish(i+1);
fishs[i+9]=newFish(i+1);
}
fishs[18]=newFish(10);
fishs[19]=newFish(11);
}
//画游戏元素
@Override
publicvoidpaint(Graphicsg){
g.drawImage(bgImage,0,0,null);//画背景
for(Fishfish:fishs){
g.drawImage(fish.fishImage,fish.fish_x,fish.fish_y,null);//画鱼
}
if(!isExit){
g.drawImage(net.netImage,net.netX,net.netY,null);//画网
}
//画游戏说明文字
g.setColor(Color.GREEN);
g.setFont(newFont(&34;,Font.ITALIC,20));
g.drawString(&34;,10,25);
g.drawString(&34;+bullet+&34;+score,350,25);
g.drawString(&34;+(net.power%7+1),590,25);
if(bullet<=0){
g.setColor(Color.RED);
g.setFont(newFont(&34;,Font.BOLD,100));
g.drawString(&34;,150,250);
bullet=0;
isExit=true;
net.power=-1;
}
}
//游戏启动方法
publicvoidaction(){
for(Fishfish:fishs){
fish.start();
}
//鼠标监听器
MouseAdapteradapter=newMouseAdapter(){
@Override
publicvoidmousePressed(MouseEvente){
intevent=e.getModifiers();
if(event==4){
net.change();
super.mousePressed(e);
}elseif(event==16){
//减子弹
if(bullet-(net.power%7+1)<=0){
bullet=0;
}else{
bullet-=(net.power%7+1);
}
//捕鱼
for(Fishfish:fishs){
if(!fish.catched){
catchFish(fish);
}
}
}
}
@Override
publicvoidmouseMoved(MouseEvente){
net.moveTo(e.getX(),e.getY());
super.mouseMoved(e);
}
@Override
publicvoidmouseEntered(MouseEvente){
isExit=false;
super.mouseEntered(e);
}
@Override
publicvoidmouseExited(MouseEvente){
isExit=true;
super.mouseExited(e);
}
};
this.addMouseListener(adapter);
this.addMouseMotionListener(adapter);
while(true){
repaint();
}
}
//封装捕鱼的方法
publicvoidcatchFish(Fishfish){
fish.catched=net.catchFish(fish);
if(fish.catched){
score+=2*fish.k;
bullet+=2*fish.k;
}
}
}
//鱼类
classFishextendsThread{
intfish_x,fish_y;//鱼的坐标
BufferedImagefishImage;//鱼的图片
BufferedImage[]fishImages=newBufferedImage[10];//鱼动作的图片
BufferedImage[]catchImages;//鱼的被捕的图片
intfish_width,fish_height;//鱼的宽高
Randomr=newRandom();//鱼y坐标的随机数
intblood;//鱼的血量值
booleancatched;//鱼是否被捕
intk,step_size;//鱼的血量等级,移动速度
publicFish(intm){
super();
StringpreName=m>9?m+&34;:&34;+m;
//通过for循环读取鱼动作图片数组
for(inti=0;i<fishImages.length;i++){
intj=i+1;
StringlastName=j>9?&34;:&34;+j;
Filefile=newFile(&34;+preName+&34;+lastName+&34;);
try{
fishImages[i]=ImageIO.read(file);
}catch(IOExceptione){
e.printStackTrace();
}
}
fishImage=fishImages[0];
fish_width=this.fishImage.getWidth();
fish_height=this.fishImage.getHeight();
fish_x=800;
fish_y=r.nextInt(450-fish_height);
blood=m*3;
this.k=m;
step_size=r.nextInt(5)+1;
//初始化catchImages
if(m>7){
catchImages=newBufferedImage[4];
}elseif(m<=7){
catchImages=newBufferedImage[2];
}
//通过for循环读取鱼被捕图片数组
for(inti=1;i<=catchImages.length;i++){
Filefile=newFile(&34;+preName+&34;+i+&34;);
try{
catchImages[i-1]=ImageIO.read(file);
}catch(IOExceptione){
e.printStackTrace();
}
}
}
//鱼移动的方法
publicvoidmove(){
fish_x-=step_size;
}
@Override
publicvoidrun(){
super.run();
while(true){
move();//调用鱼移动的方法
//如果鱼出界,重新生成
if(fish_x<-fish_width||catched){
turnOut();//鱼被捕,颤动
newFish();
}
change();//调用鱼摇摆游动的方法
try{
Thread.sleep(15);
}catch(InterruptedExceptione){
e.printStackTrace();
}
}
}
//重新生成一条鱼
publicvoidnewFish(){
fish_x=800;
fish_y=r.nextInt(450-fish_height);
if(fish_y>=450){
//System.out.println(fish_height+&34;+fish_y);
}
catched=false;
blood=k*3;
step_size=r.nextInt(5)+1;
}
//鱼摇摆游动的方法
intindex=0;
publicvoidchange(){
index++;
fishImage=fishImages[index/3%10];
}
//鱼被捕动画的方法
publicvoidturnOut(){
for(inti=0;i<catchImages.length;i++){
fishImage=catchImages[i];
try{
Thread.sleep(100);
}catch(InterruptedExceptione){
e.printStackTrace();
}
}
}
}
//渔网类
classNet{
intnetX,netY;//网的坐标
intnetWidth,netHeight;//网的宽高
BufferedImagenetImage;//网的图片
publicNet(){
super();
Filefile=newFile(&34;+1+&34;);
try{
netImage=ImageIO.read(file);
}catch(IOExceptione){
e.printStackTrace();
}
netX=300;
netY=300;
netWidth=netImage.getWidth();
netHeight=netImage.getHeight();
}
//鱼网切换的方法
intpower=0;
publicvoidchange(){
power++;
intx=this.netX+this.netWidth/2;
inty=this.netY+this.netHeight/2;
Filefile=newFile(&34;+(power%7+1)+&34;);
try{
netImage=ImageIO.read(file);
}catch(IOExceptione){
e.printStackTrace();
}
this.netWidth=netImage.getWidth();
this.netHeight=netImage.getHeight();
moveTo(x,y);
}
//渔网移动的方法
publicvoidmoveTo(intx,inty){
this.netX=x-this.netWidth/2;
this.netY=y-this.netHeight/2;
}
//捕鱼
publicbooleancatchFish(Fishfish){
//网的中心坐标
intzX=netX+netWidth/2;
intzY=netY+netHeight/2;
//鱼的身体部分中心坐标
intfX=fish.fish_x+fish.fish_width*2/3;
intfY=fish.fish_y+fish.fish_height/2;
//如果网的中心坐标在鱼的身体部分
if(zX>fish.fish_x&&zX<fish.fish_x+fish.fish_width*2/3
&&zY>fish.fish_y&&zY<fish.fish_y+fish.fish_height){
fish.blood-=((power%7+1)*2);
//System.out.println(fish.blood);
}elseif(fX>netX&&fX<netX+netWidth
&&fY>netY&&fY<netY+netHeight){
//如果鱼的身体部分中心坐标在网里
fish.blood-=((power%7+1)*2);
//System.out.println(fish.blood);
}
returnfish.blood<=0;
}
}
149张图片太多我就没上传了
好了,本文到此结束,如果可以帮助到大家,还望关注本站哦!