AdjacentTiles GetAdjacentTiles(int px, int py)
        {
            AdjacentTiles azul_vizinhos = new AdjacentTiles();

            var px_esq   = px - 1;
            var px_dir   = px + 1;
            var py_cima  = py - 1;
            var py_baixo = py + 1;

            var px_primeiro = px == 0;
            var px_ultimo   = px == (width - 1);

            var py_primeiro = py == 0;
            var py_ultimo   = py == (height - 1);

            azul_vizinhos.middle_up =
                py_primeiro
          ? false
          : map[py_cima].line[px];

            azul_vizinhos.right_up =
                px_ultimo || py_primeiro
          ? false
          : map[py_cima].line[px_dir];

            azul_vizinhos.right_middle =
                px_ultimo
          ? false
          : map[py].line[px_dir];

            azul_vizinhos.right_bottom =
                px_ultimo || py_ultimo
          ? false
          : map[py_baixo].line[px_dir];

            azul_vizinhos.middle_bottom =
                py_ultimo
          ? false
          : map[py_baixo].line[px];

            azul_vizinhos.left_middle =
                px_primeiro
          ? false
          : map[py].line[px_esq];

            azul_vizinhos.left_up =
                px_primeiro || py_primeiro
          ? false
          : map[py_cima].line[px_esq];

            return(azul_vizinhos);
        }
        string GetSimplifiedTileId(AdjacentTiles adjacent_tiles)
        {
            string[] digits = new string[4];

            digits[0] = adjacent_tiles.middle_up ? "1" : "0";
            digits[1] = adjacent_tiles.right_middle ? "1" : "0";
            digits[2] = adjacent_tiles.middle_bottom ? "1" : "0";
            digits[3] = adjacent_tiles.left_middle ? "1" : "0";


            return(string.Concat(
                       digits[0],
                       digits[1],
                       digits[2],
                       digits[3]
                       ));
        }
        public GameObject GetSuitableGbj(AdjacentTiles adjacent_tiles)
        {
            var complete_id = GetTileID(adjacent_tiles);
            var id_index    = GetTileIdIndex(complete_id);

            if (id_index == -1)
            {
                complete_id = GetSimplifiedTileId(adjacent_tiles);
                id_index    = GetTileIdIndex(complete_id);

                if (id_index == -1)
                {
                    id_index = 0;
                }
            }

            return(tileGameObjects[id_index]);
        }
        string GetTileID(AdjacentTiles adjacent_tiles)
        {
            string[] digits = new string[8];

            digits[0] = adjacent_tiles.middle_up ? "1" : "0";
            digits[1] = adjacent_tiles.right_up ? "1" : "0";
            digits[2] = adjacent_tiles.right_middle ? "1" : "0";
            digits[3] = adjacent_tiles.right_bottom  ? "1" : "0";
            digits[4] = adjacent_tiles.middle_bottom ? "1" : "0";
            digits[5] = adjacent_tiles.left_bottom ? "1" : "0";
            digits[6] = adjacent_tiles.left_middle ? "1" : "0";
            digits[7] = adjacent_tiles.left_up ? "1" : "0";

            return(string.Concat(
                       digits[0],
                       digits[1],
                       digits[2],
                       digits[3],
                       digits[4],
                       digits[5],
                       digits[6],
                       digits[7]
                       ));
        }