import random from kivy import app, properties from kivy.uix.button import Button from kivy.uix.label import Label from kivy.uix.boxlayout import BoxLayout from kivy.graphics import Color, Rectangle, Ellipse from hexmap import HexMapCell class HexSpace(Label): def __init__(self): super(HexSpace, self).__init__(size_hint=(0.5, 1), text=':)') class StrategyGame(BoxLayout): main_map = properties.ObjectProperty(None) status = properties.ObjectProperty(None) map_rows = properties.NumericProperty(0) map_cols = properties.NumericProperty(0) def __init__(self, **kwargs): super(StrategyGame, self).__init__(**kwargs) for row in range(0, self.map_rows): hex_map_row = BoxLayout(orientation='horizontal') if row % 2 == 1: hex_map_row.add_widget(HexSpace()) for col in range(0, self.map_cols): # map_tile = HexMapCell(col=col, row=row) # map_tile.visible_on_map = True # map_tile.disabled = False # map_tile.bind(pos=map_tile.update_pos, size=map_tile.update_pos) map_tile = Button(text="{} {}".format(col, row), background_color=( random.random(), random.random(), random.random(), 0.6)) with map_tile.canvas.after: Color(random.random(), random.random(), random.random(), 0.6) solid_x = map_tile.x - map_tile.height solid_y = map_tile.y - map_tile.height solid_size = (map_tile.height, map_tile.height) Ellipse(pos=(solid_x, solid_y), size=solid_size, segments=6) hex_map_row.add_widget(map_tile) if row % 2 == 0: hex_map_row.add_widget(HexSpace()) self.main_map.add_widget(hex_map_row) # number_of_regions = self.map_rows * self.map_cols # for region in range(0, number_of_regions): # row = region / self.map_cols # col = region % self.map_cols # # # Add hex cells to make up the map. # hex_cell = HexMapCell(row, col) # hex_cell.disabled = True # self.main_map.add_widget(hex_cell) # # # Add overlay conditionally. # if (row % 6 == 1 and col % 2 == 1) or (row % 6 == 4 and col % 2 == 0) and (col > 0): # hex_cell.disabled = False # hex_cell.visible_on_map = True # # # Bind the cell code so as to update its position and size when the parent widget resizes. # hex_cell.bind(pos=hex_cell.update_pos, size=hex_cell.update_pos) # def update_selected_cell(self, coords, terrain_colour, *args): self.status.text = 'Coords: ({}, {})'.format(coords[0], coords[1]) with self.status.canvas.before: Color(*terrain_colour) Rectangle(pos=self.status.pos, size=self.status.size) return True class StrategyGameApp(app.App): def build(self): return StrategyGame() if __name__ == '__main__': StrategyGameApp().run()