summaryrefslogtreecommitdiffstats
path: root/core/src/ch/asynk/tankontank/game/Hex.java
diff options
context:
space:
mode:
Diffstat (limited to 'core/src/ch/asynk/tankontank/game/Hex.java')
-rw-r--r--core/src/ch/asynk/tankontank/game/Hex.java75
1 files changed, 60 insertions, 15 deletions
diff --git a/core/src/ch/asynk/tankontank/game/Hex.java b/core/src/ch/asynk/tankontank/game/Hex.java
index b659b45..e3889f9 100644
--- a/core/src/ch/asynk/tankontank/game/Hex.java
+++ b/core/src/ch/asynk/tankontank/game/Hex.java
@@ -1,24 +1,69 @@
package ch.asynk.tankontank.game;
-public interface Hex
+import java.util.ArrayDeque;
+
+public class Hex implements Tile
{
- public int push(Pawn pawn);
+ public enum Terrain
+ {
+ CLEAR,
+ HILLS,
+ WOODS,
+ TOWN
+ }
+
+ public Terrain terrain;
+ public int roads;
+ private ArrayDeque<Pawn> stack;
+
+ public Hex(Terrain t)
+ {
+ this.terrain = t;
+ this.roads = 0;
+ this.stack = null;
+ }
- public void remove(Pawn pawn);
+ public Hex(Terrain t, int roads)
+ {
+ this.terrain = t;
+ this.roads = roads;
+ this.stack = null;
+ }
- public Pawn getTop();
+ public int costFrom(Side side)
+ {
+ if (side.v == (roads & side.v)) return 1;
+
+ int c = 0;
+ switch(terrain) {
+ case CLEAR:
+ case HILLS:
+ c = 1;
+ break;
+ case WOODS:
+ case TOWN:
+ c = 2;
+ break;
+ }
+
+ return c;
+ }
+
+ public int push(Pawn pawn)
+ {
+ if (stack == null) stack = new ArrayDeque<Pawn>();
+ stack.push(pawn);
+ return stack.size();
+ }
+
+ public void remove(Pawn pawn)
+ {
+ stack.remove(pawn);
+ }
- public enum Orientation
+ public Pawn getTop()
{
- KEEP(0),
- WEST(-90),
- NORTH_WEST(-30),
- NORTH_EAST (30),
- EAST(90),
- SOUTH_EAST(150),
- SOUTH_WEST(-150);
-
- public final int v;
- Orientation(int v) { this.v = v; }
+ if ((stack == null) || (stack.size() == 0)) return null;
+ return stack.getFirst();
}
}