started re-implementing using java

This commit is contained in:
Stephan Richter
2020-09-06 00:39:27 +02:00
parent e34a8414d6
commit a9e0f2b3a7
22 changed files with 295 additions and 0 deletions

10
.classpath Normal file
View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src/main/java"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER">
<attributes>
<attribute name="module" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="output" path="bin"/>
</classpath>

View File

@@ -0,0 +1,26 @@
package de.srsoftware.web4rail;
import java.util.HashMap;
import de.srsoftware.web4rail.tiles.Tile;
public class Plan {
private HashMap<Integer,HashMap<Integer,Tile>> tiles = new HashMap<Integer,HashMap<Integer,Tile>>();
public Tile set(int x,int y,Tile tile) {
Tile old = null;
HashMap<Integer, Tile> column = tiles.get(x);
if (column == null) {
column = new HashMap<Integer,Tile>();
tiles.put(x, column);
}
old = column.get(y);
column.put(y,tile);
return old;
}
public Tile get(int x, int y) {
HashMap<Integer, Tile> column = tiles.get(x);
return column == null ? null : column.get(y).position(x,y);
}
}

View File

@@ -0,0 +1,5 @@
package de.srsoftware.web4rail.tiles;
public class BlockH extends StraightH{
private Contact north,center,south;
}

View File

@@ -0,0 +1,5 @@
package de.srsoftware.web4rail.tiles;
public class BlockV extends StraightV{
Contact west,center,east;
}

View File

@@ -0,0 +1,5 @@
package de.srsoftware.web4rail.tiles;
public class Contact {
}

View File

@@ -0,0 +1,16 @@
package de.srsoftware.web4rail.tiles;
public class DiagES extends Tile{
@Override
public boolean hasConnector(Direction direction) {
switch (direction) {
case SOUTH:
case EAST:
return true;
default:
return false;
}
}
}

View File

@@ -0,0 +1,16 @@
package de.srsoftware.web4rail.tiles;
public class DiagNE extends Tile{
@Override
public boolean hasConnector(Direction direction) {
switch (direction) {
case NORTH:
case EAST:
return true;
default:
return false;
}
}
}

View File

@@ -0,0 +1,16 @@
package de.srsoftware.web4rail.tiles;
public class DiagSW extends Tile{
@Override
public boolean hasConnector(Direction direction) {
switch (direction) {
case SOUTH:
case WEST:
return true;
default:
return false;
}
}
}

View File

@@ -0,0 +1,16 @@
package de.srsoftware.web4rail.tiles;
public class DiagWN extends Tile{
@Override
public boolean hasConnector(Direction direction) {
switch (direction) {
case NORTH:
case WEST:
return true;
default:
return false;
}
}
}

View File

@@ -0,0 +1,14 @@
package de.srsoftware.web4rail.tiles;
public class StraightH extends StretchableTile{
@Override
public boolean hasConnector(Direction direction) {
switch (direction) {
case EAST:
case WEST:
return true;
default:
return false;
}
}
}

View File

@@ -0,0 +1,15 @@
package de.srsoftware.web4rail.tiles;
public class StraightV extends StretchableTile{
@Override
public boolean hasConnector(Direction direction) {
switch (direction) {
case NORTH:
case SOUTH:
return true;
default:
return false;
}
}
}

View File

@@ -0,0 +1,5 @@
package de.srsoftware.web4rail.tiles;
public abstract class StretchableTile extends Tile {
public int length = 1;
}

View File

@@ -0,0 +1,55 @@
package de.srsoftware.web4rail.tiles;
import java.util.HashMap;
public abstract class Tile {
public enum Direction{
NORTH,SOUTH,EAST,WEST;
}
private class Position {
int x,y;
}
Position position;
private HashMap<Direction,Tile> neighbours = new HashMap();
public abstract boolean hasConnector(Direction direction);
public boolean connect(Direction direction, Tile neighbour) {
if (hasConnector(direction)) {
switch (direction) {
case NORTH:
neighbour.neighbours.put(Direction.SOUTH, this);
neighbour.position.x = position.x;
neighbour.position.y = position.y-1;
case SOUTH:
neighbour.neighbours.put(Direction.NORTH, this);
neighbour.position.x = position.x;
neighbour.position.y = position.y+1;
case EAST:
neighbour.neighbours.put(Direction.WEST, this);
neighbour.position.x = position.x+1;
neighbour.position.y = position.y;
case WEST:
neighbour.neighbours.put(Direction.EAST, this);
neighbour.position.x = position.x-1;
neighbour.position.y = position.y;
}
neighbours.put(direction, neighbour);
return true;
}
return false;
}
public Tile neighbour(Direction direction) {
return neighbours.get(direction);
}
public Tile position(int x, int y) {
position.x = x;
position.y = y;
return this;
}
}

View File

@@ -0,0 +1,11 @@
package de.srsoftware.web4rail.tiles;
public abstract class Turnout extends Tile {
private boolean straight = true;
public boolean toggle() {
straight = !straight;
return straight;
}
}

View File

@@ -0,0 +1,10 @@
package de.srsoftware.web4rail.tiles;
public class TurnoutEN extends Turnout{
@Override
public boolean hasConnector(Direction direction) {
return direction != Direction.SOUTH;
}
}

View File

@@ -0,0 +1,10 @@
package de.srsoftware.web4rail.tiles;
public class TurnoutES extends Turnout{
@Override
public boolean hasConnector(Direction direction) {
return direction != Direction.NORTH;
}
}

View File

@@ -0,0 +1,10 @@
package de.srsoftware.web4rail.tiles;
public class TurnoutNE extends Turnout{
@Override
public boolean hasConnector(Direction direction) {
return direction != Direction.WEST;
}
}

View File

@@ -0,0 +1,10 @@
package de.srsoftware.web4rail.tiles;
public class TurnoutNW extends Turnout{
@Override
public boolean hasConnector(Direction direction) {
return direction != Direction.EAST;
}
}

View File

@@ -0,0 +1,10 @@
package de.srsoftware.web4rail.tiles;
public class TurnoutSE extends Turnout{
@Override
public boolean hasConnector(Direction direction) {
return direction != Direction.WEST;
}
}

View File

@@ -0,0 +1,10 @@
package de.srsoftware.web4rail.tiles;
public class TurnoutSW extends Turnout{
@Override
public boolean hasConnector(Direction direction) {
return direction != Direction.EAST;
}
}

View File

@@ -0,0 +1,10 @@
package de.srsoftware.web4rail.tiles;
public class TurnoutWN extends Turnout{
@Override
public boolean hasConnector(Direction direction) {
return direction != Direction.SOUTH;
}
}

View File

@@ -0,0 +1,10 @@
package de.srsoftware.web4rail.tiles;
public class TurnoutWS extends Turnout{
@Override
public boolean hasConnector(Direction direction) {
return direction != Direction.NORTH;
}
}