fish.java
来自「大鱼吃小鱼游戏」· Java 代码 · 共 720 行 · 第 1/2 页
JAVA
720 行
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.Image;
import java.util.Vector;
import java.util.Random;
import java.lang.Object;
public class fish extends MIDlet
{
private Display display;
private fishCanvas fc;
public fish()
{
display=Display.getDisplay(this);
fc=new fishCanvas(this);
}
public void startApp()
{
fc.start();
display.setCurrent(fc);
}
public void pauseApp()
{
}
public void destroyApp(boolean unconditional)
{
fc.exit();
System.gc();
notifyDestroyed();
}
}
class fishCanvas extends Canvas implements Runnable
{
private int fishsize=3,efishkind=5,bgkind=1,grow=0,life=3,action1=-10000,action2=-10000;
private Image e0l,e0m,e0s,e1l,shayu,shuimu,bg;
private Image[][] efish=new Image[fishsize][efishkind];
private Image[] pfish=new Image[fishsize];
private Vector efishsps;
boolean conti=true;
private long start=-1,end=-1,rate=8000;
private MySprite sp1=null,shayusp=null,shuimusp=null,sp4=null;
private fish theMidlet;
private boolean goon=true;
public fishCanvas(fish midlet)
{
this.theMidlet=midlet;
try{
bg=Image.createImage("/bg1.png");//背景
shayu=Image.createImage("/shayu.png");//鲨鱼
shuimu=Image.createImage("/shuimu.png");//水母
//电脑鱼,玩家鱼共有fishsize种大小,其中电脑鱼有efishkind种样子
for(int i=0;i<fishsize;i++)
{
//电脑鱼
for(int j=0;j<efishkind;j++)
{
if(i==0)
efish[i][j]=Image.createImage("/e"+j+"s.png");
else if(i==1)
efish[i][j]=Image.createImage("/e"+j+"m.png");
else
efish[i][j]=Image.createImage("/e"+j+"l.png");
}
//玩家鱼
if(i==0)
pfish[i]=Image.createImage("/ps.png");
else if(i==1)
pfish[i]=Image.createImage("/pm.png");
else
pfish[i]=Image.createImage("/pl.png");
}
}catch(Exception ce){
System.out.println(ce);
}
efishsps=new Vector();
sp1=new MySprite("p0",pfish[0],15,12,0);
sp1.speed=3;
sp1.curspX=100;
sp1.curspY=100;
}
public void start()
{
Thread t=new Thread(this);
t.start();
}
public void exit()
{
conti=false;
}
public void run()
{
//System.out.println("run");
while(conti)
{
repaint(0, 0, getWidth(), getHeight());
try
{
Thread.sleep(90);
}catch(Exception exp){
}
}
}
public void paint(Graphics g)
{
if(life<=0)
{
g.fillRect(getWidth()/2-60,getHeight()/2-30,120,60);
g.setColor(255,255,0);
g.drawString("游戏结束!",getWidth()/2-25,getHeight()/2-20,g.TOP|g.LEFT);
if(goon==true)
{
g.setColor(255,0,0);
g.drawString("继续",getWidth()/2-16,getHeight()/2-3,g.TOP|g.LEFT);
g.setColor(255,255,0);
g.drawString("结束",getWidth()/2-16,getHeight()/2+12,g.TOP|g.LEFT);
}
else
{
g.setColor(255,255,0);
g.drawString("继续",getWidth()/2-16,getHeight()/2-3,g.TOP|g.LEFT);
g.setColor(255,0,0);
g.drawString("结束",getWidth()/2-16,getHeight()/2+12,g.TOP|g.LEFT);
}
}
else
{
autocreatefish();//产生电脑鱼
//g.setColor(0,0,0);
g.fillRect(0,0,getWidth(),20);
g.fillRect(0,270,getWidth(),20);
g.setColor(255,255,0);
g.drawString("成长",6,2,g.TOP|g.LEFT);
g.drawString("生命:",160,2,g.TOP|g.LEFT);
g.drawString(String.valueOf(life),190,2,g.TOP|g.LEFT);
g.fillRect(30,5,90,10);
g.setColor(255,0,0);
grow();//计算成长指数
g.fillRect(30,5,grow,10);
g.drawImage(bg,0,20,g.TOP|g.LEFT);
drawefishsps(g);//画电脑鱼
drawplayer(g);//画玩家鱼
}
}
public void autocreatefish()//自动产生鱼
{
if(start==-1)//第一次运行时产生鱼
{
start=System.currentTimeMillis();
createfish();
}
else
end=System.currentTimeMillis();
if((end-start)>rate)//当时间间隔大于指定的时间时产生鱼
{
createfish();
start=end;
}
}
public void grow()
{
if(grow>=90)
{
switch(sp1.spwidth)
{
case(15):
rate=7000;
int x=sp1.curspX;
int y=sp1.curspY;
sp1=new MySprite("p1",pfish[1],20,17,0);;;
sp1.curspX=x;
sp1.curspY=y;
sp1.speed=3;
sp1.setVisible(true);
break;
case(20):
rate=6000;
x=sp1.curspX;
y=sp1.curspY;
sp1=new MySprite("p2",pfish[2],37,28,0);
sp1.curspX=x;
sp1.curspY=y;
sp1.speed=3;
sp1.setVisible(true);
break;
}
grow=0;
}
}
public void drawplayer(Graphics g)
{
if(sp1!=null)
{
//System.out.println(sp1.getFrame());
sp1.curfre++;
if(sp1.curfre==sp1.changefre)
{
if(sp1.getFrame()==0)
sp1.setFrame(1);
else if(sp1.getFrame()==1)
sp1.setFrame(2);
else if(sp1.getFrame()==2)
sp1.setFrame(0);
else if(sp1.getFrame()==3)
sp1.setFrame(4);
else if(sp1.getFrame()==4)
sp1.setFrame(5);
else if(sp1.getFrame()==5)
sp1.setFrame(3);
sp1.curfre=0;
}
if(sp1.getFrame()==7)
{
sp1.eat++;
sp1.setFrame(8);
}
else if(sp1.getFrame()==8)
{
sp1.eat++;
sp1.setFrame(7);
}
else if(sp1.getFrame()==9)
{
sp1.eat++;
sp1.setFrame(10);
}
else if(sp1.getFrame()==10)
{
sp1.eat++;
sp1.setFrame(9);
}
if(sp1.eat==3)
{
sp1.eat=0;
if(sp1.getFrame()==7||sp1.getFrame()==8)
sp1.setFrame(0);
if(sp1.getFrame()==9||sp1.getFrame()==10)
sp1.setFrame(3);
}
if(sp1.curspX>235)
sp1.curspX=-10;
if(sp1.curspX<-10)
sp1.curspX=235;
if(sp1.curspY<25)
sp1.curspY=25;
if(sp1.curspY>265)
sp1.curspY=265;
switch(action1)
{
case Canvas.LEFT:
if(sp1.getFrame()!=3&&sp1.getFrame()!=4&&sp1.getFrame()!=5&&sp1.eat==0)
{
sp1.setFrame(3);
sp1.eat=0;
}
sp1.curspX-=sp1.speed;
break;
case Canvas.RIGHT:
if(sp1.getFrame()!=0&&sp1.getFrame()!=1&&sp1.getFrame()!=2&&sp1.eat==0)
{
sp1.setFrame(0);
sp1.eat=0;
}
sp1.curspX+=sp1.speed;
break;
case Canvas.UP:
sp1.curspY-=sp1.speed;
break;
case Canvas.DOWN:
sp1.curspY+=sp1.speed;
break;
}
switch(action2)
{
case Canvas.LEFT:
if(sp1.getFrame()!=3&&sp1.getFrame()!=4&&sp1.getFrame()!=5&&sp1.eat==0)
{
sp1.setFrame(3);
sp1.eat=0;
}
sp1.curspX-=sp1.speed;
break;
case Canvas.RIGHT:
if(sp1.getFrame()!=0&&sp1.getFrame()!=1&&sp1.getFrame()!=2&&sp1.eat==0)
{
sp1.setFrame(0);
sp1.eat=0;
}
sp1.curspX+=sp1.speed;
break;
case Canvas.UP:
sp1.curspY-=sp1.speed;
break;
case Canvas.DOWN:
sp1.curspY+=sp1.speed;
break;
}
sp1.draw(g);//画玩家鱼
//碰撞
for(int i=0;i<efishsps.size();i++)
{
MySprite efishsp=(MySprite)efishsps.elementAt(i);
if(sp1.collidesWith(efishsp))
{
//System.out.println("collidesWith()");
if(sp1.spwidth<efishsp.spwidth)//被吃
{
life--;
while(efishsps.size()>0)
efishsps.removeElementAt(0);
createfish();
grow=0;
sp1=new MySprite("p0",pfish[0],15,12,0);
sp1.speed=3;
sp1.curspX=100;
sp1.curspY=100;
sp1.setVisible(true);
}
else//吃
{
grow+=10;
efishsp.setVisible(false);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?