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 + -
显示快捷键?