Esempio n. 1
0
        public static char EncodeTileImpl(MapTile.TileType tileType, MovingObject.ObjectType objectType)
        {
            char result;

            result  = (char)tileType;
            result |= (char)((int)objectType << 3);
            return(encodingChars[result]);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
 public bool DecodeTile(char input, out MapTile.TileType tileType, out MovingObject.ObjectType objectType)
 {
     return(DecodeTileImpl(input, out tileType, out objectType));
 }
Esempio n. 5
0
 public char EncodeTile(MapTile.TileType tileType, MovingObject.ObjectType objectType)
 {
     return(EncodeTileImpl(tileType, objectType));
 }
Esempio n. 6
0
 public char EncodeTile(MapTile.TileType tileType, MovingObject.ObjectType objectType)
 {
     throw new NotImplementedException();
 }
Esempio n. 7
0
        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);
        }