class FieldGrid(GridLayout): def __init__(self, rows, cols, bombs): super().__init__(cols=cols, pos_hint={'center_x': 0.5, 'center_y': 0.7}, size=(cols*22, rows*22), size_hint=(None, None)) self.board = Board(rows, cols, bombs) self.over = False self.mark = False for i in range(rows*cols): tile = TileWidget(i) self.add_widget(tile) def tile_pressed(self, index): if self.over: return tile = self.board.tiles[index] n_tiles = self.board.rows * self.board.cols if self.mark: if not tile.covered: return self.board.mark_tile(index) if tile.marked: self.children[n_tiles-1-index].change_image("mark") else: self.children[n_tiles-1-index].change_image("cov") if self.board.status() == 1: gui.field.status.text = "Win!" # TODO: refactor self.over = True else: if tile.marked: return self.board.expose_tile(index) widget = self.children[n_tiles-1-index] if self.board.status() == 0 and tile.value != 0: widget.change_image(str(tile.value)) elif self.board.status() == 0 and tile.value == 0: self.reload_board() elif self.board.status() == -1: widget.change_image("bomb") gui.field.status.text = "Game over" # TODO: refactor self.over = True def reload_board(self): n_tiles = self.board.rows*self.board.cols for i in range(n_tiles): w = self.children[n_tiles-1-i] t = self.board.tiles[i] if t.covered and t.marked: w.change_image("mark") elif t.covered and not t.marked: w.change_image("cov") else: w.change_image(str(t.value))