Пример #1
0
    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)
Пример #2
0
 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()
Пример #3
0
 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)
Пример #4
0
 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()
Пример #5
0
 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()
Пример #6
0
 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()
Пример #7
0
 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()