Index: src/com/medievaltech/game/Map.java
===================================================================
--- src/com/medievaltech/game/Map.java	(revision 5d77d4377ebb8ee6d72fb26de3438bfc587fc0b3)
+++ src/com/medievaltech/game/Map.java	(revision ebaddd97ef205aa37e549fec7cd109ec22d81384)
@@ -16,5 +16,5 @@
 		for(int x=0; x<getWidth(); x++)
 			for(int y=0; y<getHeight(); y++)
-				grid[x][y] = new Tile(t);
+				grid[x][y] = new Tile(t, new Point(x, y));
 	}
 	
Index: src/com/medievaltech/game/Soldier.java
===================================================================
--- src/com/medievaltech/game/Soldier.java	(revision 5d77d4377ebb8ee6d72fb26de3438bfc587fc0b3)
+++ src/com/medievaltech/game/Soldier.java	(revision ebaddd97ef205aa37e549fec7cd109ec22d81384)
@@ -9,4 +9,6 @@
 	public Soldier(Paint p) {
 		super(p);
+		
+		move = 2;
 	}
 	
@@ -24,7 +26,6 @@
 
 	@Override
-	public List<Point> getRange() {
-		// TODO Auto-generated method stub
-		return null;
+	public List<Point> getMovementRange() {
+		return super.getMovementRange();
 	}
 
Index: src/com/medievaltech/game/Tile.java
===================================================================
--- src/com/medievaltech/game/Tile.java	(revision 5d77d4377ebb8ee6d72fb26de3438bfc587fc0b3)
+++ src/com/medievaltech/game/Tile.java	(revision ebaddd97ef205aa37e549fec7cd109ec22d81384)
@@ -22,12 +22,14 @@
 	}
 	
-	public Tile(Tile t) {
+	public Tile(Tile t, Point point) {
 		this.type = t.type;
 		this.moveCoefficent = t.moveCoefficent;
 		this.p = t.p;
+		this.point = point;
 	}
 	
 	public void addUnit(Unit unit) {
-		currentUnit = unit;	
+		currentUnit = unit;
+		unit.location = point;
 	}
 	
Index: src/com/medievaltech/game/Unit.java
===================================================================
--- src/com/medievaltech/game/Unit.java	(revision 5d77d4377ebb8ee6d72fb26de3438bfc587fc0b3)
+++ src/com/medievaltech/game/Unit.java	(revision ebaddd97ef205aa37e549fec7cd109ec22d81384)
@@ -1,4 +1,5 @@
 package com.medievaltech.game;
 
+import java.util.LinkedList;
 import java.util.List;
 
@@ -26,5 +27,5 @@
 	
 	public int sightRange;
-	public int move;
+	protected int move;
 	
 	public int minAttackRange;
@@ -36,8 +37,50 @@
 	}
 	
-	public abstract void move(Point point);
-	public abstract void attack(Point point);
+	public abstract boolean move(Point point);
+	public abstract boolean attack(Point point);
 	
-	public abstract List<Point> getRange();
+	public List<Point> getMovementRange() {
+		List<Point> l = new LinkedList<Point>();
+		List<Point> prev = new LinkedList<Point>();
+		List<Point> cur = new LinkedList<Point>();
+		boolean[][] visited = new boolean[move*2+1][move*2+1];
+		
+		for(int x=0; x<=move*2; x++)
+			for(int y=0; y<=move*2; y++)
+				visited[x][y] = false;
+		
+		prev.add(new Point(location));
+		l.addAll(prev);
+		visited[move][move] = true;
+
+		for(int dist=1; dist <= move; dist++) {
+			for(Point p : prev) {
+				if(p.x>0 && p.x>location.x-move && !visited[p.x-location.x+move-1][p.y-location.y+move]) {
+					cur.add(new Point(p.x-1, p.y));
+					visited[p.x-location.x+move-1][p.y-location.y+move] = true;
+				}
+				if(p.x<8 && p.x<location.x+move && !visited[p.x-location.x+move+1][p.y-location.y+move]) {
+					cur.add(new Point(p.x+1, p.y));
+					visited[p.x-location.x+move+1][p.y-location.y+move] = true;
+				}
+				if(p.y>0 && p.y>location.y-move && !visited[p.x-location.x+move][p.y-location.y+move-1]) {
+					cur.add(new Point(p.x, p.y-1));
+					visited[p.x-location.x+move][p.y-location.y+move-1] = true;
+				}
+				if(p.y<6 && p.y<location.y+move && !visited[p.x-location.x+move][p.y-location.y+move+1]) {
+					cur.add(new Point(p.x, p.y+1));
+					visited[p.x-location.x+move][p.y-location.y+move+1] = true;
+				}
+			}
+			
+			l.addAll(cur);
+			prev.clear();
+			prev.addAll(cur);
+			cur.clear();
+		}
+		
+		return l;
+	}
+	
 	public abstract List<Point> getAttackRange();
 	
