亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? sprite.java

?? a java game code for java
?? JAVA
字號(hào):
//Source file: d:/MyProjects/Java/eatbean/eatbean/Sprite.java

package eatbean;

import java.util.Hashtable;
import java.awt.*;
//
import eatbean.util.*;
import eatbean.util.algorithm.PathFinder;
import eatbean.util.algorithm.Node;
import eatbean.conf.*;

public class Sprite extends Actor {
	public static final int MAX_FRAME = 2;
	public static final int MIN_FRAME = 0;
	public static final int MAX_SIZE = 16;
	private Rect bakR = null;
	private Pos[] bakP = null;
	private Image img = null;
	private boolean keepRunning = true;
	private boolean stepSucc = false;   //  nextstep()是否成功
	private PathManager pathManager = null;
	private static Hashtable frameTable = new Hashtable();
	private static Hashtable imgBuffTable = new Hashtable();
	private int currFrame = MIN_FRAME;
	private long lastChangeFrameTime = -1;

	static {
		for(int i = MIN_FRAME; i <= MAX_FRAME; i++)
		    frameTable.put(new Integer(i), "sprite"+i+".gif");
	}

	public Sprite(Mediator mediator) {
		super(mediator);
		init();
	}
	private void init() {
		mapPos = mediator.getSpriteBornPos();
		MapElement e = mediator.getElement(mapPos);
		rect.width = MAX_SIZE;
		rect.height = MAX_SIZE;
		rect.x = adjustX(e.getLeft(), e.getWidth(), rect.width);
		rect.y = adjustY(e.getTop(), e.getHeight(), rect.height);
		currCoveredPos = mediator.getCoveredElementsMapPos(this);
		mapPos = mediator.getCurrMapPos(currCoveredPos, rect);
		direction = DIR_EAST;   //  初始方向
		pathManager = new PathManager(mediator.getMapIntElements());

		currFrame = MIN_FRAME;
		img = getImage(currFrame);
	}
	public void run() {
		nextDirection = DIR_WEST;
		while(keepRunning) {
			if(!mediator.getPaused()) {
				stepSucc = nextstep();
				//if(!nextstep() || Math.random()*10 > 9.8)
					choiceNextDirection();
				//mediator.flushScreen(this);
			} else
				if(thread != null) thread.yield();
			mediator.flushScreen(this);
			nextframe();
		}
	}
	public void die() {
		keepRunning = false;
	}
	public boolean nextstep() {
		boolean result = false;
		boolean flag = true;
		backup();
		/*
		if(Debug.ON) Debug.println("mapPos: " + mapPos);
		if(Debug.ON) Debug.println("rect: " + rect);
		if(Debug.ON) Debug.println("nextDirection: " + nextDirection);
		*/
		if(nextDirection == getReverse())
			direction = nextDirection;
		else if(nextDirection != direction) {	//nextDirection 與 direction 互相垂直
			if(mediator.acceptable(getMapPos(), nextDirection)) {
				MapElement e = mediator.getElement(mapPos);
				rect.x = adjustX(e.getLeft(), e.getWidth(), rect.width);
				rect.y = adjustY(e.getTop(), e.getHeight(), rect.height);
				direction = nextDirection;
				flag = false;
			}
		}
		if(flag) {
			switch(direction) {
				case DIR_WEST :
						rect.x = rect.x - step;
						break;
				case DIR_EAST :
						rect.x = rect.x + step;
						break;
				case DIR_NORTH :
						rect.y = rect.y - step;
						break;
				case DIR_SOUTH :
						rect.y = rect.y + step;
						break;
			}
		}
		currCoveredPos = mediator.getCoveredElementsMapPos(this);
		//下一步是否有效
		if(!flag || mediator.acceptable(this)) {	//有效
			if(!mediator.hasIntersectSprite(this)) {
				clear(bakP);
				//paint();
				Pos p = mediator.getCurrMapPos(currCoveredPos, rect);
				if(p != null)
					mapPos = p;
				result = true;
			}
		} else {
			restore();
		}
		return result;
	}
	private void nextframe() {
		long currTime = System.currentTimeMillis();
		if(currTime - lastChangeFrameTime < SysParam.CHANGE_FRAME_TIME) return;
		currFrame++;
		if(currFrame > MAX_FRAME || currFrame < MIN_FRAME) currFrame = MIN_FRAME;
		img = getImage(currFrame);
		lastChangeFrameTime = currTime;
	}
	public void clear(Pos[] p) {
		if(p == null) {
			if(Debug.ON)System.out.println("Sprite.clear(): p == null!!!!");
		} else
			mediator.repaintBg(this, p);
	}
	public void clear() {
		clear(currCoveredPos);
	}
	private void draw() {
		OffScreen offScreen = mediator.getOffScreen();
		offScreen.drawImage(img, rect.x, rect.y);
	}
	public boolean act() {
		if(thread == null) {
			thread = new Thread(this);
			thread.start();
		}
		return true;
	}
	public void paint() {
		draw();
	}
	private int adjustX(int x, int w1, int w2) {
		return x + (w1-w2)/2;
	}
	private int adjustY(int y, int h1, int h2) {
		return y + (h1-h2)/2;
	}
	private void backup() {
		bakR = getRect();	//backup rect
		//if(currCoveredPos == null) currCoveredPos = mediator.getCoveredElementsMapPos(this);
		if(currCoveredPos != null) {
			bakP = new Pos[currCoveredPos.length];
			for(int i = 0; i < currCoveredPos.length; i ++)
				bakP[i] = (Pos)currCoveredPos[i].clone();
		}
	}
	private void restore() {
		rect = bakR;
		currCoveredPos = bakP;
	}
	private Image getImage(int imgIndex) {
		Image result = null;
		synchronized(imgBuffTable) {    //  同步,保證同一Image僅被調(diào)入內(nèi)存一次
		    result = super.getImage(imgBuffTable, frameTable, imgIndex);
		}
		return result;
	}
	private void choiceNextDirection() {
		nextDirection = pathManager.choiceNextDirection();
	}

	class PathManager {
	    private Node path = null;
		private Node currNode = null;
		private int[][] map = null;
		private boolean reFind = true;
		PathManager(int[][] map) {
		    this.map = map;
		}
		public int choiceNextDirection() {
			int result = getDirection();
			if(Math.random()*100 > 99) reFind = true;
		    if(reFind) {    //  尋找路徑
			    reFind = false;
				path = null;
				currNode = null;
				Pos fairyMapPos = mediator.getFairyMapPos();
				if(fairyMapPos != null) {
					Node spriteNode = new Node(mapPos.x, mapPos.y);  //  start node
					Node fairyNode = new Node(fairyMapPos.x, fairyMapPos.y);  //  target node
					PathFinder pathFinder = new PathFinder(map);
					path = pathFinder.findPath(fairyNode, spriteNode);
					currNode = path;
					//printPath();
				}
			}
			if(currNode == null)
				result = choiceRandomDirection();
			else {
				if(mapPos.equals(currNode)) {   //  按路徑往下走
					currNode = currNode.parent;
					if(currNode != null) result = compare(mapPos, currNode);
				}
				if(Math.random()*10>9) {  //  放棄已找到的路徑
					path = null;
					currNode = null;
				}
			}
			return result;
		}
		private int compare(Pos spriteMapPos, Pos nextNode) {
			int result = getDirection();
			if(spriteMapPos.x < nextNode.x)
				result = Actor.DIR_EAST;
			else if(spriteMapPos.x > nextNode.x)
				result = Actor.DIR_WEST;
			else if(spriteMapPos.y < nextNode.y)
				result = Actor.DIR_SOUTH;
			else if(spriteMapPos.y > nextNode.y)
				result = Actor.DIR_NORTH;
			return result;
		}
		private int choiceRandomDirection() {
			int result = getDirection();
			if(!stepSucc || Math.random()*10 > 9.9) {
				int r = (int)(Math.random()*12);
				if(r < 3)
					result = Actor.DIR_WEST;
				else if(r < 6)
					result = Actor.DIR_EAST;
				else if(r < 9)
					result = Actor.DIR_NORTH;
				else if(r < 12)
					result = Actor.DIR_SOUTH;
			}
			return result;
		}
		private void printPath() {
			if(path == null)
				System.out.println("無(wú)可用路徑!");
			else {
				Node tmp = path;
				while(tmp != null) {
					System.out.println(tmp.toString() + "\n");
					tmp = tmp.parent;
				}
			}
		}
	}
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产高清成人在线| 国产传媒久久文化传媒| 久久久亚洲精品石原莉奈| 99热这里都是精品| 天堂久久一区二区三区| 欧美韩国日本综合| 91精品国产91久久久久久最新毛片 | 欧美成人a视频| 91蜜桃网址入口| 精品亚洲aⅴ乱码一区二区三区| 亚洲免费观看高清完整版在线观看| 在线综合+亚洲+欧美中文字幕| 菠萝蜜视频在线观看一区| 蜜臀91精品一区二区三区| 亚洲免费在线电影| 日本一区二区三区四区在线视频| 7777精品伊人久久久大香线蕉超级流畅| 国产精品自在欧美一区| 日韩福利电影在线观看| 亚洲欧美偷拍另类a∨色屁股| www久久久久| 91超碰这里只有精品国产| 色噜噜狠狠色综合中国| 成人美女视频在线观看| 日本女人一区二区三区| 亚洲激情在线播放| 亚洲色图欧洲色图婷婷| 国产日韩影视精品| 久久夜色精品国产噜噜av| 欧美一区二区三区在| 欧美日韩国产影片| 欧美在线色视频| 91国偷自产一区二区三区观看| 成人动漫在线一区| 国产福利精品一区二区| 国产一区二区不卡在线 | 成人一级片网址| 国产一区二区电影| 国产精品一区二区你懂的| 精一区二区三区| 精品一区免费av| 精品一区二区在线观看| 久久99精品久久久久婷婷| 久久精品72免费观看| 美美哒免费高清在线观看视频一区二区 | 韩国毛片一区二区三区| 麻豆精品视频在线观看视频| 日韩电影在线免费观看| 婷婷综合另类小说色区| 日韩av在线免费观看不卡| 日日噜噜夜夜狠狠视频欧美人| 亚洲电影一级片| 日韩高清不卡一区| 久久se这里有精品| 国产盗摄一区二区三区| 成人综合婷婷国产精品久久蜜臀| 国产69精品久久久久毛片| 波多野洁衣一区| 色婷婷综合久久久久中文一区二区| 色哦色哦哦色天天综合| 欧美日韩视频在线一区二区| 欧美丰满美乳xxx高潮www| 欧美一区二区福利视频| 国产亚洲一区二区三区在线观看| 国产视频亚洲色图| 综合久久国产九一剧情麻豆| 亚洲一区二区欧美日韩| 日本强好片久久久久久aaa| 国产在线精品一区二区不卡了 | 亚洲大型综合色站| 欧美aaa在线| 国产精品亚洲一区二区三区在线| 97精品国产露脸对白| 欧美亚洲综合网| 精品国产不卡一区二区三区| 中文字幕日韩av资源站| 五月激情综合色| 国产精品456| 在线免费一区三区| 欧美大胆一级视频| 国产精品美女久久久久久2018 | 欧美一级片在线| 亚洲国产精品99久久久久久久久| 亚洲精品少妇30p| 九九在线精品视频| 日本精品视频一区二区三区| 欧美电影免费观看高清完整版| 国产精品天天摸av网| 日韩国产欧美在线播放| 成人听书哪个软件好| 91精品国产综合久久久久久久久久| 久久精品日产第一区二区三区高清版 | 99国产精品一区| 欧美一二三区精品| 亚洲少妇中出一区| 国产一区日韩二区欧美三区| 91搞黄在线观看| 国产亚洲一区二区三区在线观看| 亚洲国产成人porn| 成人高清视频免费观看| 日韩视频中午一区| 亚洲女同ⅹxx女同tv| 国产乱子伦一区二区三区国色天香| 色菇凉天天综合网| 国产日韩成人精品| 日本欧美肥老太交大片| 欧洲人成人精品| 欧美国产激情二区三区| 免费成人在线网站| 91精品福利在线| 中文字幕成人av| 国产一区视频导航| 日韩一区二区电影网| 一区二区三区成人在线视频| 国产成人精品免费在线| 日韩一区二区三区在线视频| 亚洲国产中文字幕| 91视频精品在这里| 久久免费偷拍视频| 九九在线精品视频| 欧美一卡二卡在线观看| 亚洲国产一区二区a毛片| 91丨porny丨蝌蚪视频| 国产精品久久综合| 国产精品99久久久久久久女警| 日韩欧美在线一区二区三区| 视频一区国产视频| 欧美日韩一区成人| 依依成人精品视频| 一本到不卡免费一区二区| 欧美国产精品一区二区| 成人一区二区三区视频| 欧美经典一区二区三区| 国产精品羞羞答答xxdd| 久久久久久久久久久久久久久99| 麻豆极品一区二区三区| 欧美一区二区三区视频在线观看| 亚洲国产日韩a在线播放| 91精品91久久久中77777| 亚洲黄色小说网站| 日本电影欧美片| 亚洲第一狼人社区| 欧美精品一二三四| 日本欧美一区二区三区| 日韩精品资源二区在线| 韩国视频一区二区| 国产人妖乱国产精品人妖| 成人一级片在线观看| 亚洲视频一区二区在线| 在线影院国内精品| 一区二区三区国产| 欧美人xxxx| 久久se这里有精品| 久久久久久夜精品精品免费| 国产凹凸在线观看一区二区| 国产精品免费视频网站| 色哟哟亚洲精品| 三级亚洲高清视频| 亚洲精品在线三区| 国产69精品久久777的优势| 日韩美女视频一区二区| 欧美日精品一区视频| 奇米影视在线99精品| 国产亚洲1区2区3区| 91伊人久久大香线蕉| 午夜精品久久久久影视| 亚洲精品在线一区二区| av不卡一区二区三区| 天堂午夜影视日韩欧美一区二区| 日韩免费观看2025年上映的电影| 国产suv精品一区二区三区| 中文字幕综合网| 51精品视频一区二区三区| 国产一区二区伦理片| 一区二区三区日韩在线观看| 欧美一区二区三区白人| 国产suv精品一区二区三区| 亚洲一区二区三区在线看| 欧美mv日韩mv国产网站app| 成人黄色小视频在线观看| 一区二区三区欧美日韩| 欧美大尺度电影在线| 97精品国产露脸对白| 蜜臀av亚洲一区中文字幕| 亚洲国产精品高清| 欧美久久久久中文字幕| 国产成人免费网站| 亚洲国产精品一区二区www在线| 精品久久久久久久久久久久久久久| 波多野结衣精品在线| 麻豆精品一区二区| 一区二区三区久久久| 26uuuu精品一区二区| 精品视频在线看| 处破女av一区二区| 免播放器亚洲一区| 亚洲精品国产无天堂网2021| 久久久99免费| 欧美日韩久久不卡| 不卡视频在线观看|