def __init__(self, root, cols=const.WIDTH, rows=const.HEIGHT, bomb_number=const.BOMBS): """ Construct object. :param root: TODO :type root: tk.Tk :param cols: number of columns :type cols: int :param rows: number of rows :type rows: int :param bomb_number: number of bombs :type bomb_number: int """ super(FieldFrame, self).__init__(root, width=const.BTN_SIZE_RATIO * cols, height=const.BTN_SIZE_RATIO * rows) self.grid(row=1, column=0, sticky=tk.NSEW) self.grid_propagate(False) self.cells = [] self.cols = cols self.rows = rows self.bomb_number = bomb_number self.is_loser = False self.undefined_cells = cols * rows - bomb_number self.field = generate_field(self.rows, self.cols, self.bomb_number, random.random()) self.set_buttons() flag_counter.set(self.bomb_number)
def test_generate_field_small_size(self): cols = 4 rows = 4 num_bombs = 4 seed = 0 correct_field = [-1, 2, 1, 1, 1, 2, -1, 1, 1, 2, 2, 2, -1, 1, 1, -1] field = generate_field(rows, cols, num_bombs, seed) for i in range(cols * rows): if correct_field[i] != field[i]: self.fail()
def restart(self): """Restart the playing field.""" self.is_loser = False self.undefined_cells = self.cols * self.rows - self.bomb_number self.field = generate_field(self.rows, self.cols, self.bomb_number, random.random()) timer.reset_clock() flag_counter.set(self.bomb_number) label_flag_counter['foreground'] = 'black' reset_field(self.cols, self.rows, self.cells, self.field)
def test_generate_field_small_bomb_number(self): cols = 6 rows = 6 num_bombs = 3 seed = 2 correct_field = [ 0, 0, 1, -1, 2, -1, 0, 0, 1, 1, 2, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, -1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0 ] field = generate_field(rows, cols, num_bombs, seed) for i in range(cols * rows): if correct_field[i] != field[i]: self.fail()
def test_generate_field_big_bomb_number(self): cols = 7 rows = 7 num_bombs = 40 seed = 1 correct_field = [ -1, -1, 4, -1, -1, 5, -1, -1, -1, 6, -1, -1, -1, -1, -1, 6, -1, -1, -1, -1, -1, 3, -1, -1, -1, -1, -1, -1, -1, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 4, 3, 4, -1 ] field = generate_field(rows, cols, num_bombs, seed) for i in range(cols * rows): if correct_field[i] != field[i]: self.fail()
def test_generate_field_big_size(self): cols = 10 rows = 10 num_bombs = 10 seed = 0.5 correct_field = [ 0, 0, 0, 1, -1, 2, 2, 2, 1, 0, 0, 0, 0, 2, 2, 3, -1, -1, 1, 0, 1, 1, 0, 1, -1, 3, 3, 2, 1, 0, -1, 1, 0, 1, 2, -1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 2, 2, 1, 0, 0, 1, 1, 1, 0, 0, 1, -1, 1, 0, 0, 1, -1, 2, 1, 1, 2, 2, 1, 0, 0, 1, 2, -1, 1, 1, -1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] field = generate_field(rows, cols, num_bombs, seed) for i in range(cols * rows): if correct_field[i] != field[i]: self.fail()
def test_reset_bombs(self): from src import gui from src.utils import reset_field cols = 6 rows = 6 bomb_number = 6 seed = 1 field_frame = gui.FieldFrame(gui.root, cols=cols, rows=rows, bomb_number=bomb_number) gui.TopFrame(gui.root, cols=cols, field_restart=field_frame.restart) field_frame.field = generate_field(rows, cols, bomb_number, seed) reset_field(cols, rows, field_frame.cells, field_frame.field) for i in range(cols * rows): cell = field_frame.cells[i] value = field_frame.field[i] if cell.value != value: self.fail()