public static char EncodeTileImpl(MapTile.TileType tileType, MovingObject.ObjectType objectType) { char result; result = (char)tileType; result |= (char)((int)objectType << 3); return(encodingChars[result]); }
public static bool DecodeTileImpl(char input, out MapTile.TileType tileType, out MovingObject.ObjectType objectType) { tileType = MapTile.TileType.Empty; objectType = MovingObject.ObjectType.None; switch (input) { case ' ': tileType = MapTile.TileType.Empty; break; case 'e': tileType = MapTile.TileType.Exit; break; case 'x': tileType = MapTile.TileType.Trap; break; case '#': tileType = MapTile.TileType.Block; break; case '<': tileType = MapTile.TileType.PusherLeft; break; case '>': tileType = MapTile.TileType.PusherRight; break; case '^': tileType = MapTile.TileType.PusherUp; break; case '_': tileType = MapTile.TileType.PusherDown; break; case '@': objectType = MovingObject.ObjectType.Actor; break; case 'a': objectType = MovingObject.ObjectType.AntiActor; break; case 'b': objectType = MovingObject.ObjectType.Box; break; default: return(false); } return(true); }
public static bool DecodeTileImpl(char input, out MapTile.TileType tileType, out MovingObject.ObjectType objectType) { var idx = encodingChars.IndexOf(input); if (idx == -1) { tileType = MapTile.TileType.Empty; objectType = MovingObject.ObjectType.None; return(false); } var tt = idx & 0x7; tileType = (MapTile.TileType)tt; tt = (idx >> 3) & 0x3; objectType = (MovingObject.ObjectType)tt; return(true); }
public bool DecodeTile(char input, out MapTile.TileType tileType, out MovingObject.ObjectType objectType) { return(DecodeTileImpl(input, out tileType, out objectType)); }
public char EncodeTile(MapTile.TileType tileType, MovingObject.ObjectType objectType) { return(EncodeTileImpl(tileType, objectType)); }
public char EncodeTile(MapTile.TileType tileType, MovingObject.ObjectType objectType) { throw new NotImplementedException(); }
private MapTile[,] tiles; // x,y indexing private bool LoadMapImpl(Tuple <MapTile.TileType, MovingObject.ObjectType>[,] map) { this.width = map.GetLength(1); this.height = map.GetLength(0); tiles = new MapTile[width, height]; ExitTile = null; int actorsCount = 0; int x = 0, y = 0; int index = 0; foreach (var t in map) { x = index % width; y = index / width; index++; MapTile.TileType tileType = t.Item1; MovingObject.ObjectType objectType = t.Item2; var tile = new MapTile(tileType, x, y, index, this); tiles[x, y] = tile; if (tileType == MapTile.TileType.Exit) { if (ExitTile != null) { //Console.WriteLine( "Map exit already defined" ); return(false); } ExitTile = tile; } if (objectType != MovingObject.ObjectType.None) { tile.obj = new MovingObject { type = objectType } } ; if (objectType == MovingObject.ObjectType.Actor) { actors[actorsCount++] = tile; } else if (objectType == MovingObject.ObjectType.AntiActor) { contrActors.Add(tile); } } if (index != width * height) { //Console.WriteLine( "Invalid map data" ); return(false); } if (TestIsOn == false && actorsCount == 0) { //Console.WriteLine( "No actors on map" ); return(false); } if (TestIsOn == false && ExitTile == null) { //Console.WriteLine( "No exit on map" ); return(false); } SetupTileNeighbourhood(); Symmetry = eMapSymmetry.None; FindSymmetry(); var res = CalculateDistanceToExit(); return(res); }