func drawGame(g *game.Game, window draw.Window) { // draw tiles and numbers w, h := window.Size() window.FillRect(0, 0, w, h, draw.DarkBlue) for _, tile := range g.GetTiles() { x := tile.Position.X * tileW / 2 y := tile.Position.Y * tileYOffset var file string switch tile.Terrain { case game.Forest: file = "./forest.png" case game.Field: file = "./field.png" case game.Mountains: file = "./mountains.png" case game.Pasture: file = "./pasture.png" case game.Desert: file = "./desert.png" case game.Hills: file = "./hills.png" case game.Water: file = "./water.png" } window.DrawImageFile(file, x, y) if tile.Number != 0 || tile.Terrain == game.Desert { number := strconv.Itoa(tile.Number) const scale = 4 w, h := window.GetScaledTextSize(number, scale) x, y := x+(tileW-w)/2, y+(tileH-h)/2 plateSize := max(w, h) + 10 window.FillEllipse(x+w/2-plateSize/2, y+h/2-plateSize/2, plateSize, plateSize, draw.RGBA(1, 1, 1, 0.5)) numberColor := draw.Black if tile.Number == 6 || tile.Number == 8 { numberColor = draw.Red } window.DrawScaledText(number, x+3, y+3, scale, numberColor) if tile.HasRobber { window.FillEllipse(x+w/2-plateSize/2, y+h/2-plateSize/2, plateSize, plateSize, draw.DarkGray) } } } // draw buildings for _, player := range g.GetPlayers() { for _, s := range player.GetBuiltSettlements() { var file string switch player.Color { case game.Red: file = "./settlement_red.png" case game.Blue: file = "./settlement_blue.png" case game.White: file = "./settlement_white.png" case game.Orange: file = "./settlement_orange.png" } x, y := cornerToScreen(game.Point(s.Position)) window.DrawImageFile(file, x-30/2, y-42/2) } for _, s := range player.GetBuiltCities() { var file string switch player.Color { case game.Red: file = "./city_red.png" case game.Blue: file = "./city_blue.png" case game.White: file = "./city_white.png" case game.Orange: file = "./city_orange.png" } x, y := cornerToScreen(game.Point(s.Position)) window.DrawImageFile(file, x-65/2, y-42/2) } for _, s := range player.GetBuiltRoads() { var color draw.Color switch player.Color { case game.Red: color = draw.Red case game.Blue: color = draw.Blue case game.White: color = draw.White case game.Orange: color = draw.LightBrown // TODO have orange in prototype/draw } x, y := edgeToScreen(s.Position) window.FillRect(x-20, y-20, 40, 40, color) } } }