📄 calculator.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 + -