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); } }
private void FindHints() { TilePair hint = _field.GetHint(); if (hint != null) { _hint1 = hint.Tile1; _hint2 = hint.Tile2; } }
private string BuildFieldJson() { TilePair hintPair = null; if (_showHint) { hintPair = _field.GetHint(); } Tile[] tiles = _field.GetSortedTiles(); List <string> tilesJson = new List <string>(); foreach (Tile tile in tiles) { string selected = (tile == _selected) ? "true" : "false"; string disabled = !_field.CanMove(tile) && _showMoveable ? "true" : "false"; string hint = _showHint && hintPair != null && (tile == hintPair.Tile1 || tile == hintPair.Tile2) ? "true" : "false"; string type = (tile != null) ? tile.Type.Name : "empty"; string tileJson = " {\n"; tileJson += " \"x\": " + tile.X + ",\n"; tileJson += " \"y\": " + tile.Y + ",\n"; tileJson += " \"z\": " + tile.Z + ",\n"; tileJson += " \"type\": \"" + type + "\",\n"; tileJson += " \"selected\": " + selected + ",\n"; tileJson += " \"hint\": " + hint + ",\n"; tileJson += " \"disabled\": " + disabled + "\n"; tileJson += " }"; tilesJson.Add(tileJson); } return ("{\n" + " \"field\": {\n" + " \"fieldwidth\": " + Field.WIDTH + ",\n" + " \"fieldheight\": " + Field.HEIGHT + ",\n" + " \"tilewidth\": " + Tile.WIDTH + ",\n" + " \"tileheight\": " + Tile.HEIGHT + ",\n" + " \"tiles\": [\n" + string.Join(",\n", tilesJson.ToArray()) + "\n" + " ]\n" + " }\n" + "}\n"); }