Skip to content

Commit 33b04cf

Browse files
committed
Implemented A* Search Algorithm to NPC
1 parent a3334b1 commit 33b04cf

File tree

2 files changed

+30
-7
lines changed

2 files changed

+30
-7
lines changed

src/com/redomar/game/entities/Dummy.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import com.redomar.game.gfx.Colours;
88
import com.redomar.game.gfx.Screen;
99
import com.redomar.game.level.LevelHandler;
10+
import com.redomar.game.level.Node;
1011

1112
public class Dummy extends Mob {
1213

@@ -17,6 +18,8 @@ public class Dummy extends Mob {
1718
private boolean[] swimType;
1819
private int[] swimColour;
1920
private static double speed = 0.75;
21+
private List<Node> path = null;
22+
private int time = 0;
2023

2124
private Swim swim;
2225

@@ -30,13 +33,10 @@ public Dummy(LevelHandler level, String name, int x, int y, int shirtCol,
3033

3134
public void tick() {
3235

33-
List<Player> players = level.getPlayers(this, 8);
34-
if (players.size() > 0) {
35-
followMovementAI((int) getX(), (int) getY(), (int) Game.getPlayer().getX(), (int) Game
36-
.getPlayer().getY(), xa, ya, speed, this);
37-
}else{
38-
isMoving = false;
39-
}
36+
//List<Player> players = level.getPlayers(this, 8);
37+
aStarMovementAI((int) getX(), (int) getY(), (int) Game.getPlayer().getX(), (int) Game
38+
.getPlayer().getY(), xa, ya, speed, this, path, time);
39+
4040

4141
setSwim(new Swim(level, (int) getX(), (int) getY()));
4242
swimType = getSwim().swimming(isSwimming, isMagma, isMuddy);
@@ -49,6 +49,7 @@ public void tick() {
4949
}
5050

5151
public void render(Screen screen) {
52+
time++;
5253
int xTile = 8;
5354
int yTile = 28;
5455
int walkingSpeed = 4;

src/com/redomar/game/entities/Mob.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
package com.redomar.game.entities;
22

3+
import java.util.List;
34
import java.util.Random;
45

56
import com.redomar.game.level.LevelHandler;
7+
import com.redomar.game.level.Node;
68
import com.redomar.game.level.tiles.Tile;
9+
import com.redomar.game.lib.utils.Vector2i;
710

811
public abstract class Mob extends Entity {
912

@@ -155,6 +158,25 @@ protected boolean isSolid(int xa, int ya, int x, int y) {
155158

156159
return false;
157160
}
161+
162+
protected void aStarMovementAI(int x, int y, int px, int py, double xa,
163+
double ya, double speed, Mob mob, List<Node> path, int time){
164+
xa = 0;
165+
ya = 0;
166+
Vector2i start = new Vector2i(x >> 3, y >> 3);
167+
Vector2i goal = new Vector2i(px >> 3, py >> 3);
168+
path = level.findPath(start, goal);
169+
if(path != null) {
170+
if(path.size() > 0){
171+
Vector2i vector = path.get(path.size() - 1).tile;
172+
if(x < vector.getX() << 3) xa++;
173+
if(x > vector.getX() << 3) xa--;
174+
if(y < vector.getY() << 3) ya++;
175+
if(y > vector.getY() << 3) ya--;
176+
}
177+
}
178+
moveMob(xa, ya, mob);
179+
}
158180

159181
protected void followMovementAI(int x, int y, int px, int py, double xa,
160182
double ya, double speed, Mob mob) {

0 commit comments

Comments
 (0)