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

📄 greedyserpent.java

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

class GreedySerpent extends Serpent
{
//	protected Random rand=new Random((new Date()).getTime());
	GreedySerpent(SerpentGameCanvas canv, Maze m, Position initPos, int len) {
		super(canv, m, initPos, len);
		direction=MOVE_UP;
		type=GREEDY;
	}

	public void run()
	{
		int track=0;
		try {
				track=-1;
//			egg.start();
			newEgg();
			do {
				track=0;
				invalidAreas.removeAllElements();
				invalidateSerpent(this);
				if( moveAhead()) {
				track=1;
					invalidateSerpent(this);
					detectFrog();			//	invalidate when frog eaten
				track=8;
					detectEggP();
				track=2;
					detectPlayerSerpent();
				track=3;
					if( isGhost())
						System.err.println("Ghost Serpent "+ this + " at " + head);
				track=4;
					Rect rt;
					rt=null;
					for( int i=0;i<invalidAreas.size();i++ ) {
						Position pt=(Position)invalidAreas.elementAt(i);
						if( i==0 ) rt=new Rect(pt, gameCanvas.CELL_WIDTH);
						rt.merge( new Rect(pt, gameCanvas.CELL_WIDTH));
					}
					if( rt!=null ) gameCanvas.repaint(rt.left, rt.top, rt.width+1, rt.height+1);
				track=5;
				}
				if( !bLive ) gameCanvas.checkNpcKilled();
				track=6;
				sleep(400);
			} while(bLive);
		}
        catch(Exception ex)
        {
        	System.err.println("Npc Serpent error!");
            ex.printStackTrace();
        	System.err.println(track);
        }
	}

	protected void setRandomDirection()
	{
		int randNumber=Math.abs( gameCanvas.rand.nextInt() % 4 );
		switch( randNumber ) {
			case 0:
				direction=MOVE_UP;
				break;
			case 1:
				direction=MOVE_DOWN;
				break;
			case 2:
				direction=MOVE_LEFT;
				break;
			case 3:
				direction=MOVE_RIGHT;
				break;
			default:
		}
	}
	
	protected boolean moveAhead()
	{
		synchronized(gameCanvas.npc) {
			if( !bLive ) return false;
			Position posDiff=new Position();
			switch(direction) {
				case MOVE_UP: 
					posDiff.setValue(0,-1);
					break;			
				case MOVE_DOWN:
					posDiff.setValue(0,1);
					break;			
				case MOVE_LEFT:
					posDiff.setValue(-1,0);
					break;			
				case MOVE_RIGHT:
					posDiff.setValue(1,0);
					break;			
				default:
			}
			if( conflictWithWall(posDiff)) {
				setRandomDirection();
				return false;
			}
			
			for( int i=body.size()-1;i>=1;i-- ) {
				((Position)body.elementAt(i)).setValue( (Position)body.elementAt(i-1) );
			}
			((Position)body.elementAt(0)).setValue(head);
			head.add(posDiff);
		}
		return true;
	}

	protected void detectPlayerSerpent()
	{
		Serpent player=gameCanvas.player;
		synchronized(gameCanvas.npc) {
			if( !bLive ) return;
			if( !player.bLive ) return;
			int result;
			bDetecting=true;
			result=( player.hitTest(head));
			if( result==-2 ) {
				bDetecting=false;
				return;
			}
			if( result==-1 ) {
				invalidateSerpent(player);
				if( body.size()>=player.body.size()) {
					player.getKilled();
					award(KILL_SERPENT);
				}
				else {
					getKilled();
					player.award(KILL_SERPENT);
				}
				invalidateSerpent(player);
			}
			else {
				invalidateSerpent(player);
				player.hurtBody(result);
				invalidateSerpent(player);
			}
			bDetecting=false;
		}
	}

	protected void detectEggP()
	{
		if( gameCanvas.eggp==null ) return;
		synchronized(gameCanvas) {
			if( head.equals(gameCanvas.eggp.pos)) {
				invalidAreas.addElement(gameCanvas.eggp.pos);
				gameCanvas.eggp.getKilled();
				gameCanvas.eggp=null;
				award(EAT_EGG);
				gameCanvas.player.newEgg();
			}
		}
	}
	
	protected boolean isGhost()
	{
		for( int i=0;i<gameCanvas.npc.size();i++ ) {
			if( ((Serpent)gameCanvas.npc.elementAt(i))==this )
				return false;
		}
		return true;
	}
	
}

⌨️ 快捷键说明

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