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

📄 calculator.java

📁 三国
💻 JAVA
字号:
package sanguo.util;

import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Map;

import javax.swing.text.Position;

public class Calculator {
	public static final int CHARACTER_WEIGHT = -100;

	private static Map<Integer, Integer> weightMap = new HashMap<Integer, Integer>();

	static {
		System.out.println("Initializing");
		weightMap.put(0, -1);
		weightMap.put(1, -2);
		weightMap.put(2, -1);
		weightMap.put(3, -1);
		weightMap.put(4, -1);
		weightMap.put(5, -1);
		weightMap.put(6, -1);
		weightMap.put(7, -1);
	}

	public static int calculateDistance(sanguo.util.Position pos1,
			sanguo.util.Position pos2) {
		return (Math.abs(pos1.getX() - pos2.getX()) + Math.abs(pos1.getY()
				- pos2.getY()));
	}

	public static int calculateMovableDistance(sanguo.character.Character c) {
		return 5;
	}

	public static int calculateFightableDistance(sanguo.character.Character c) {
		return 5;
	}

	public static LinkedList<sanguo.util.Position> calculateMobablePosition(
			sanguo.map.Map map, sanguo.character.Character c) {
		int offsets[][] = new int[][]{
				{0,1},
				{0,-1},
				{1,0},
				{-1,0}
		};
		LinkedList<sanguo.util.Position> positions = new LinkedList<sanguo.util.Position>();
		LinkedList<sanguo.util.Position> queue = new LinkedList<sanguo.util.Position>();
		int matrix[][] = new int[map.getHeight()][map.getWidth()];
		int data[][] = map.getMap();
		//Initialize the matrix;
		for(int m = 0;m<map.getHeight();m++){
			for(int n = 0; n<map.getWidth();n++){
				matrix[m][n] = weightMap.get(data[m][n]);
			}
		}
		Iterator<sanguo.character.Character> itr = map.getCharacters().iterator();
		while(itr.hasNext()){
			sanguo.util.Position p = itr.next().getPosition();
			matrix[p.getY()][p.getX()] = CHARACTER_WEIGHT;
		}
		System.out.println("null?"+(c == null));
		matrix[c.getPosition().getY()][c.getPosition().getX()] = Calculator.calculateMovableDistance(c);
		//End Initialize the matrix;
		queue.addLast(c.getPosition());
		while(!queue.isEmpty()){
			//System.out.println("#########In while");
			sanguo.util.Position pos = queue.removeFirst();
			int x = pos.getX();
			int y = pos.getY();
			//System.out.println(x +"," + y);
			for(int i =0;i<4;i++){
				int X = x + offsets[i][0];
				int Y = y + offsets[i][1];
				
				if(X >=0 && X <map.getWidth() && Y >=0 && Y<map.getHeight()){
					//System.out.println("Check position "+ X+","+Y+" matrix value: "+ matrix[Y][X]);
					if(matrix[Y][X]<0){
						if(matrix[y][x] + matrix[Y][X] >= 0){
							matrix[Y][X] = matrix[y][x] + matrix[Y][X];
							sanguo.util.Position p1 = new sanguo.util.Position(X,Y); 
							sanguo.util.Position p2 = new sanguo.util.Position(X,Y);
							positions.addLast(p1);
							//System.out.println("Add Position (" + p1.getX()+","+p1.getY()+")");
							queue.addLast(p2);
						}
					}
						
				}
			}
		}
		return positions;
	}

	public static  LinkedList<sanguo.util.Position> calculateAttackablePosition(
			sanguo.map.Map map, sanguo.character.Character c) {
		
		LinkedList<sanguo.util.Position> positions = new LinkedList<sanguo.util.Position>();
		LinkedList<sanguo.character.Character> chars = map.getCharacters();
		Iterator<sanguo.character.Character> itr = chars.iterator();
		while(itr.hasNext()){
			sanguo.character.Character ch = itr.next();
			if(ch != c){
				sanguo.util.Position pos = ch.getPosition();
				sanguo.util.Position pos1 = c.getPosition();
				int distance = Math.abs(pos.getX() - pos1.getX()) + Math.abs(pos.getY() -pos1.getY());
				if(distance <= Calculator.calculateFightableDistance(c))
					positions.add(new sanguo.util.Position(ch.getPosition().getX(), ch.getPosition().getY()));
			}
		}
		return positions;
	}
}

⌨️ 快捷键说明

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