Пример #1
0
        public void Scramble(Field field)
        {
            List<TilePair> reversed = new List<TilePair>();
            while (field.Tiles.Count > 0)
            {
                // Find two or more random outer tiles, remove them and store the coords
                List<Tile> removables = new List<Tile>();
                removables.AddRange(ExtractRemovableTiles(field));

                // Continue until no more removable tile pairs are left in the list
                while (removables.Count > 1)
                    reversed.Add(TilePair.FetchPair(removables));

                // Add remaing tile to the field
                foreach (Tile tile in removables)
                    field.Add(tile);
            }

            // Read the list from behind and and get random a random tile type for each pair to build the game
            Random random = new Random();
            for (int i = reversed.Count - 1; i >= 0; i--)
            {
                int typeIndex = random.Next() % field.Types.Length;
                reversed[i].Tile1.Type = field.Types[typeIndex];
                reversed[i].Tile2.Type = field.Types[typeIndex];
                field.Add(reversed[i].Tile1);
                field.Add(reversed[i].Tile2);
            }
        }
Пример #2
0
 void RestartGame()
 {
     if (_httpView != null)
     {
         _httpView.Close();
     }
     _field = new Field(new ReverseGenerator("setup.txt", "tiles/tiles.txt"));
     _httpView = new HttpView(_field);
     panelView.Field = _field;
 }
Пример #3
0
        public void Generate(Field field)
        {
            field.Types = TileType.LoadTileTypes(_typeFile);
            field.Tiles = new Dictionary<int, Tile>();

            // Place the full set without a tile type
            LoadStructure(field, null, _structureFile);

            // Set the tile types in a solveable order
            Scramble(field);
        }
Пример #4
0
        private List<Tile> ExtractRemovableTiles(Field field)
        {
            List<Tile> removables = new List<Tile>();

            int[] keys = new int[field.Tiles.Count];
            field.Tiles.Keys.CopyTo(keys, 0);

            foreach (int key in keys)
                if (field.CanMove(field.Tiles[key]))
                    removables.Add(field.Tiles[key]);

            foreach (Tile tile in removables)
                field.Remove(tile);

            return removables;
        }
Пример #5
0
 void ClearGame()
 {
     _field = new Field(new EmptyGenerator());
     panelView.Field = _field;
 }
Пример #6
0
        private void LoadStructure(Field field, TileType type, string path)
        {
            string[] lines = File.ReadAllLines(path);

            if (lines.Length % 2 != 0)
                throw new Exception("Invalid odd tile count!");

            foreach (string line in lines)
            {
                string[] splitted = line.Split(' ');
                if (splitted.Length != 3) continue;
                Tile tile = new Tile(int.Parse(splitted[0]), int.Parse(splitted[1]), int.Parse(splitted[2]), type);
                field.Add(tile);
            }
        }
Пример #7
0
 public void Generate(Field field)
 {
     field.Tiles = new Dictionary<int, Tile>();
     field.Types = new TileType[0];
 }
Пример #8
0
 public void Scramble(Field field)
 {
 }
Пример #9
-1
 public HttpView(Field field)
 {
     _field = field;
     _listener = HttpListener.Create(System.Net.IPAddress.Any, 8080);
     _listener.RequestReceived += OnRequest;
     _listener.Start(5);
 }