Index: src/com/medievaltech/advancewars/GameView.java
===================================================================
--- src/com/medievaltech/advancewars/GameView.java	(revision 5d77d4377ebb8ee6d72fb26de3438bfc587fc0b3)
+++ src/com/medievaltech/advancewars/GameView.java	(revision ebaddd97ef205aa37e549fec7cd109ec22d81384)
@@ -48,5 +48,5 @@
 
         /** Paint to draw the lines on screen. */
-        private Paint mLinePaint, mTextPaint, mButtonPaint, mTilePaint1, mTilePaint2,
+        private Paint mLinePaint, mTextPaint, mButtonPaint, mTilePaint1, mTilePaint2, mSelectionPaint,
         	mUnitPaint;
         
@@ -60,4 +60,6 @@
         
         private com.medievaltech.gui.Window wndMainMenu, wndBattleMap;
+        private Unit selectedUnit;
+        private boolean test = false;
         
         public DrawingThread(SurfaceHolder surfaceHolder, Context context, Handler handler) {
@@ -94,4 +96,8 @@
             mUnitPaint.setAntiAlias(true);
             mUnitPaint.setARGB(255, 255, 0, 0);
+            
+            mSelectionPaint = new Paint();
+            mSelectionPaint.setAntiAlias(true);
+            mSelectionPaint.setARGB(255, 255, 127, 0);
             
             wndMainMenu = new com.medievaltech.gui.Window(0, 0, 320, 450);;
@@ -112,7 +118,7 @@
     			for(int y=0; y<mMap.getHeight(); y++) {
     				if(land)
-    					mMap.setTile(x, y, new Tile(grassTile));
+    					mMap.setTile(x, y, new Tile(grassTile, new Point(x, y)));
     				else
-    					mMap.setTile(x, y, new Tile(oceanTile));
+    					mMap.setTile(x, y, new Tile(oceanTile, new Point(x, y)));
     				land = !land;
     			}
@@ -122,4 +128,6 @@
             mMap.getTile(2, 3).addUnit(new Soldier(mUnitPaint));
             mMap.getTile(5, 7).addUnit(new Soldier(mUnitPaint));
+            
+            selectedUnit = mMap.getTile(2, 3).currentUnit;
             
             mGameState = GameState.MAIN_MENU;
@@ -343,4 +351,11 @@
             	
             	mMap.draw(canvas, 10, 25);
+            	
+            	for(Point p : selectedUnit.getMovementRange()) {
+            		canvas.drawRect(p.x*50+10, p.y*50+25, p.x*50+50+10, p.y*50+50+25, mSelectionPaint);
+            		if(!test)
+            			Log.i("AdvanceWars", "("+p.x+","+p.y+")");
+            	}
+            	test = true;
             	
             	text = "Advance Wars grid test";
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();
 	
