private void DrawTile(Graphics g, Tile tile) { int id = tile.Type != null ? tile.Type.Id : -1; if (!_images.ContainsKey(id)) { Bitmap copy; using (Image img = Image.FromFile("tiles/" + tile.Type.Name + ".png")) { copy = new Bitmap(_tileImage); Graphics.FromImage(copy).DrawImage(img, new Rectangle(0, 0, DRAWWIDTH, DRAWHEIGHT)); _images.Add(id, copy); } } Image texture = _images[id]; RectangleF rect = TileRectangle(tile); rect.X -= 5; rect.Y -= 5 + 5 * tile.Z; rect.Width = DRAWWIDTH; rect.Height = DRAWHEIGHT; g.DrawImage(texture, rect); if (_showMoveable && !_field.CanMove(tile)) { g.DrawImage(_disImage, rect); } if (_showHint && (tile == _hint1 || tile == _hint2)) { g.DrawImage(_hintImage, rect); } if (tile == _selected) { g.DrawImage(_selImage, rect); } }
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; }
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"); }
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); }