Files
philippe lhardy 619e9b9f19 jackson databind import
- and some reowrk to use Position more than (x,y) parameters
2021-11-03 08:30:30 +01:00

99 lines
2.1 KiB
Java

package org.artisanlogiciel.games.maze;
/*
2x2 Tile to represent a labyrinth position with some walls
this is 2x2 downright most part of 3x3 centered tile.
center right
down downright
ab
cd
a is 'H' or '.' or ' '
bcd is within 'H' or ' '
*/
public class Brick
{
// order matters index is same as bits order
public static final Position[] AllMoves = {
new Position(0,0).doReverseTranslate(Position.stepX),
new Position(Position.stepY),
new Position(Position.stepX),
new Position(0,0).doReverseTranslate(Position.stepY),
// last is no move
new Position(0,0)
};
// flag is in Brick settings
static int getDirectionIndex(short flag)
{
// short a = (short) (flag >> FLAGLENGTH);
for (int index = 0; index < AllMoves.length - 1; index ++) {
if (isFlagSet((short) (1 << index), flag)) {
return index;
}
}
// return last index which is no move.
return AllMoves.length - 1;
}
public static Position getDirectionMove(short direction) {
return AllMoves[getDirectionIndex(direction)];
}
public final static short LEFT = 1;
public final static short DOWN = 2;
public final static short RIGHT = 4;
public final static short UP = 8;
public final static short ENTRY = 16;
public final static short GOAL = 32;
// TODO get rid of those chars
char a;
char b;
char c;
char d;
short walls; // according to LabyModel.getWalls();
protected Brick()
{
//
}
public Brick(String up, String low, short walls)
{
a = up.charAt(0);
b = up.charAt(1);
c = low.charAt(0);
d = low.charAt(1);
this.walls = walls;
}
public static boolean isFlagSet(short flags, short wall)
{
return ( flags & wall ) == flags;
}
public String getUpString()
{
return "" + a + b;
}
public String getLowString()
{
return "" + c + d;
}
public short getWalls()
{
return walls;
}
}