⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 frog.java

📁 Position.java :辅助类 SerpentGameCanvas.java :游戏主控类 Maze.java :迷宫 SerpentGame.java :应用主控类 Serpent.java
💻 JAVA
字号:
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import java.util.*;

class Frog extends Thread
{
	final protected SerpentGameCanvas gameCanvas;
	final protected Maze maze;
	public Position pos;
	public boolean bLive;
//	protected Random rand=new Random((new Date()).getTime());
	Vector invalidAreas;

	Frog(SerpentGameCanvas canv, Maze m, Position initPos)
	{
		gameCanvas=canv;
		maze=m;
		pos=new Position(initPos);
		bLive=false;
		invalidAreas=new Vector();
	}
	
	public void run()
	{
		try {
			int randNumber=Math.abs( gameCanvas.rand.nextInt() % 10 );
			sleep(randNumber*1000);
			bLive=true;
			do {
				invalidAreas.removeAllElements();
				invalidAreas.addElement(pos);
				move();
				invalidAreas.addElement(pos);
				detectEgg();
				detectEggP();
				for( int i=0;i<invalidAreas.size();i++ ) {
					Position pt=(Position)invalidAreas.elementAt(i);
					Rect rt=new Rect(pt, gameCanvas.CELL_WIDTH);
					gameCanvas.repaint(rt.left, rt.top, rt.width+1, rt.height+1);
				}
//				gameCanvas.serviceRepaints();
				sleep(2000);
			} while(bLive);
		}
        catch(Exception ex)
        {
        	System.out.println("frog error!");
   			System.out.println(pos);
            ex.printStackTrace();
        }
	}
	
	protected void move()
	{
		Position posDiff=new Position();
		int randomNum=Math.abs( gameCanvas.rand.nextInt()) % 5;
		switch(randomNum) {
			case 0: 
				posDiff.setValue(0,-1);
				break;			
			case 1:
				posDiff.setValue(0,1);
				break;			
			case 2:
				posDiff.setValue(-1,0);
				break;			
			case 3:
				posDiff.setValue(1,0);
				break;			
			default:
//				System.out.println("no move " + randomNum);
				return;
		}

		Position nextPos=new Position(pos);
		nextPos.add(posDiff);
		if( nextPos.outOfRange(0,0, Maze.WIDTH-1, Maze.HEIGHT-1 )) {
//			System.out.println("conflict " + randomNum + pos);
			return;
		}
		pos.setValue(nextPos);
//		System.out.println(pos);
	}
	
	public void getKilled()
	{
		bLive=false;
//		stop();
	}

	protected void detectEggP()
	{
		if( gameCanvas.eggp==null ) return;
		synchronized(gameCanvas) {
			if( pos.equals(gameCanvas.eggp.pos)) {
				gameCanvas.eggp.getKilled();
				gameCanvas.eggp=null;
				gameCanvas.player.newEgg();
			}
		}
	}
	
	protected void detectEgg()
	{
		synchronized(gameCanvas.eggList) {
			for( int i=0;i<gameCanvas.eggList.size();i++ ) {
				Egg egg=(Egg)gameCanvas.eggList.elementAt(i);
				if( pos.equals(egg.pos)) {
					egg.getKilled();
				}
			}
			
			//	a little confusing
			for( int i=0;i<gameCanvas.eggList.size();i++ ) {
				Egg egg=(Egg)gameCanvas.eggList.elementAt(i);
				if( !egg.bLive ) {
//					System.err.println("remove egg by frog "+egg.pos);
					gameCanvas.eggList.removeElementAt(i);
					i--;
//					System.err.print("remain eggs ");
//					for( int j=0;j<gameCanvas.eggList.size();j++ )
//						System.err.print(((Egg)gameCanvas.eggList.elementAt(j)).pos);
//					System.err.println();
				}
			}		
		}
	}
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -