Fixed the astar algoritm and added some comments

This commit is contained in:
Ziver Koc 2007-04-29 18:26:45 +00:00
parent c356ddf327
commit e280861f2d
14 changed files with 776 additions and 1365 deletions

Binary file not shown.

View file

@ -10,6 +10,7 @@ import ei.game.algo.AStarNeighbour.Location;
/**
*
* @author Árni Arent
* @author Ziver Koc
*
*/
public class AStarPathfinder{
@ -17,6 +18,7 @@ public class AStarPathfinder{
protected LinkedList<AStarNode> closed;
private AStarNode start;
private AStarNode goal;
private AStarNode closest;
/**
* Constructs a Pathfinder.
@ -55,6 +57,10 @@ public class AStarPathfinder{
node = (AStarNode) open.removeFirst();
node.setVisited(true);
node.setVisitOrder(order++);
// calculates the nearest way to the destination
if(closest == null || closest.estimatedCostToGoal > node.estimatedCostToGoal){
closest = node;
}
// Check if we found the goal.
if (node == goal) {
@ -78,12 +84,12 @@ public class AStarPathfinder{
float costFromStart = node.costFromStart + node.getCost(neighbourNode, location);
boolean inClosed = closed.contains(neighbourNode);
boolean inOpen = open.contains(neighbourNode);
if ((!inOpen && !inClosed) || costFromStart < neighbourNode.costFromStart) {
neighbourNode.setParent(node);
neighbourNode.costFromStart = costFromStart;
neighbourNode.estimatedCostToGoal = neighbourNode.getEstimatedCostTo(goal,start);
if (inClosed) {
closed.remove(neighbourNode);
}
@ -96,9 +102,9 @@ public class AStarPathfinder{
closed.add(node);
}
}
System.out.println("Path Not found!!");
//return null;
return constructPath(node);
return constructPath(closest);
}

View file

@ -1,8 +1,5 @@
package ei.game.gamestate;
import java.io.File;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
@ -12,7 +9,6 @@ import ei.engine.sound.SoundLoader;
import ei.engine.state.GameState;
import ei.engine.state.GameStateManager;
import ei.engine.texture.TextureLoader;
import ei.engine.util.FileFinderHasher;
/**
* This class handels the loading of the
@ -21,12 +17,66 @@ import ei.engine.util.FileFinderHasher;
* @author Ziver
*/
public class LoadingState extends GameState{
//The extensions of the files
//The files to load
private static final String[] TEXTURES = {
"jpg","png","bmp"
"data/font.bmp",
"data/loadbar_back.png",
"data/loadbar_front.png",
"data/loadbar.png",
"data/logo.png",
"data/particle.bmp",
"data/splash.png",
"data/buildings/cc/cc_building.png",
"data/buildings/cc/cc_ground.png",
"data/buildings/cc/cc.png",
"data/hud/buildmenu.png",
"data/hud/money.png",
"data/map/Grass.png",
"data/map/redmud.jpg",
"data/map/sand.jpg",
"data/map/redstone/redstone0000.png",
"data/map/redstone/redstone0001.png",
"data/map/redstone/redstone0002.png",
"data/map/redstone/redstone0003.png",
"data/map/stone/stone0000.png",
"data/map/stone/stone0001.png",
"data/map/stone/stone0002.png",
"data/map/stone/stone0003.png",
"data/ui/apu_button_selected.png",
"data/ui/apu_button.png",
"data/ui/bomber_button_selected.png",
"data/ui/bomber_button.png",
"data/ui/tank_button_selected.png",
"data/ui/tank_button.png",
"data/units/apu/apu0000.png",
"data/units/apu/apu0001.png",
"data/units/apu/apu0002.png",
"data/units/bomber/bomber0000.png",
"data/units/bomber/bomber0001.png",
"data/units/bomber/bomber0002.png",
"data/units/bomber/bomber0003.png",
"data/units/tank/tank0000.png",
"data/units/tank/tank0001.png",
"data/units/tank/tank0002.png"
};
private static final String[] SOUNDS = {
"wav","ogg"
"data/sounds/APUattack.wav",
"data/sounds/APUmove1.wav",
"data/sounds/APUmove2.wav",
"data/sounds/APUselect.wav",
"data/sounds/APUyes.wav",
"data/sounds/BOMBERattack.wav",
"data/sounds/BOMBERmove1.wav",
"data/sounds/BOMBERmove2.wav",
"data/sounds/BOMBERselect.wav",
"data/sounds/bomberweapon.wav",
"data/sounds/ei.ogg",
"data/sounds/machinegun.wav",
"data/sounds/TANKattack.wav",
"data/sounds/TANKmove1.wav",
"data/sounds/TANKmove2.wav",
"data/sounds/TANKselect.wav",
"data/sounds/tankweapon.wav"
};
// The things to load
private Queue<String> loadTextures;
@ -56,32 +106,12 @@ public class LoadingState extends GameState{
progress.setProgressTexture(new Sprite("Progress","data/loadbar.png"));
progress.setBackgroundTexture(new Sprite("progressBackground","data/loadbar_back.png"));
try {
File dir = new File(getClass().getClassLoader().getResource("data/").toURI());
ArrayList<File> files = FileFinderHasher.Search(dir);
for(int i=0; i<files.size() ;i++){
String ext = files.get(i).getName();
ext = ext.substring(ext.lastIndexOf ('.')+1,ext.length());
if(contains(TEXTURES,ext)){
addTexture(files.get(i).getPath().substring(files.get(i).getPath().lastIndexOf("data"), files.get(i).getPath().length()));
}
else if(contains(SOUNDS,ext)){
addSound(files.get(i).getPath().substring(files.get(i).getPath().lastIndexOf("data"), files.get(i).getPath().length()));
}
}
} catch (URISyntaxException e) {
e.printStackTrace();
for(int i=0; i<TEXTURES.length ;i++){
addTexture(TEXTURES[i]);
}
}
private boolean contains(String[] array, String search){
for(int i=0; i<array.length ;i++){
if(array[i].equals(search)){
return true;
}
for(int i=0; i<SOUNDS.length ;i++){
addSound(SOUNDS[i]);
}
return false;
}
/**

View file

@ -16,6 +16,8 @@ public class SplashState extends GameState{
public SplashState(String name,String next) {
super(name);
nextState = next;
fadeInDone = false;
time = 200;
}
@ -26,10 +28,7 @@ public class SplashState extends GameState{
Sprite s = new Sprite("Splash","data/splash.png");
s.setLocation(new Vector2f(LWJGLGameWindow.getWidth()/2,LWJGLGameWindow.getHeight()/2));
splash.setEntity(s);
splash.fadeOut(false);
fadeInDone = false;
time = 200;
splash.fadeOut(false);
}
@Override

View file

@ -8,6 +8,11 @@ import ei.game.scene.SelectBox;
import ei.game.scene.weapons.Explotion;
import ei.game.scene.weapons.WeaponHandler;
/**
*
* @author Jesper Lundin
*
*/
public class CommandCenter extends Building{
private SelectBox selectionBox;
private Sprite sprite;

View file

@ -11,6 +11,11 @@ import ei.game.scene.weapons.MachineGun;
import ei.game.scene.weapons.Weapon;
import ei.game.scene.weapons.WeaponHandler;
/**
*
* @author Jesper Lundin
*
*/
public class APU extends Unit{
private SelectBox selectionBox;
private Sprite sprite;

View file

@ -12,6 +12,11 @@ import ei.game.scene.weapons.Explotion;
import ei.game.scene.weapons.Weapon;
import ei.game.scene.weapons.WeaponHandler;
/**
*
* @author Jesper Lundin
*
*/
public class Bomber extends Unit{
private SelectBox selectionBox;
private Sprite sprite;

View file

@ -11,6 +11,11 @@ import ei.game.scene.weapons.Explotion;
import ei.game.scene.weapons.Weapon;
import ei.game.scene.weapons.WeaponHandler;
/**
*
* @author Jesper Lundin
*
*/
public class Tank extends Unit{
private SelectBox selectionBox;
private Sprite sprite;

View file

@ -6,6 +6,11 @@ import ei.engine.math.Vector2i;
import ei.game.gamestate.InGameState;
import ei.game.scene.Map;
/**
* Handles the bomber units webon
* @author Jesper Lundin
*
*/
public class BomberWeapon extends Weapon{
private Particles part;
private boolean hit;

View file

@ -3,6 +3,10 @@ package ei.game.scene.weapons;
import ei.engine.effects.Particles;
import ei.engine.math.Vector2f;
/**
* @author Jesper Lundin
*
*/
public class CannonBall extends Weapon{
public CannonBall(Vector2f startPos) {

View file

@ -3,6 +3,11 @@ package ei.game.scene.weapons;
import ei.engine.effects.Particles;
import ei.engine.math.Vector2f;
/**
*
* @author Ziver
*
*/
public class Explotion extends Weapon{
private Particles part;

View file

@ -3,6 +3,11 @@ package ei.game.scene.weapons;
import ei.engine.effects.Particles;
import ei.engine.math.Vector2f;
/**
*
* @author Jesper Lundin
*
*/
public class MachineGun extends Weapon{
public MachineGun(Vector2f startPos) {

View file

@ -6,12 +6,12 @@ import ei.engine.math.Vector2i;
import ei.engine.scene.Entity;
import ei.game.gamestate.InGameState;
import ei.game.scene.Map;
/**
* The weapon class.
* @author Jesper Lundin
*
*/
public abstract class Weapon {
private int range;
private int damage;