from random import* class Board: def __init__(self, dim, num_bombs): self.dim = dim self.num_bombs = num_bombs self.board = ["@" for i in range(dim * dim)] self.around = [dim, -dim, 1, -1, dim+1, -dim+1, dim-1, -dim-1] def set_board(self, first_choice): x = set() while len(x) < self.num_bombs: idx = randint(0, pow(self.dim, 2) - 1) while idx == first_choice: idx = randint(0, pow(self.dim, 2) - 1) x.add(idx) self.bombs = sorted(list(x)) print(self.bombs) def print_board(self): for idx in range(pow(self.dim, 2)): if idx % self.dim == 0 and idx != 0: print() print(self.board[idx], end = " ") print() def update_board(self, idx): if idx in self.bombs: for i in self.bombs: self.board[i] = "*" self.print_board() print() print("Game Over!") return False elif 0 <= idx < pow(self.dim, 2): self.board[idx] = str(len(set(self.bombs).intersection(set([idx+j for j in self.around if 0 < idx+j < pow(self.dim, 2)])))) if "@" not in [el for i, el in enumerate(self.board) if i not in self.bombs]: print("Win!") self.print_board() return False return True def get_input(self): while True: try: i = int(input("Dig the mine(0~" + str(pow(self.dim, 2) - 1) + "): ")) if 0 < i >= pow(self.dim, 2): raise Exception break except: print("Invalid_input!") return i def play(dim, num_bombs): board = Board(dim, num_bombs) board.print_board() i = board.get_input() board.set_board(i) while board.update_board(i): board.print_board() i = board.get_input() dim = int(input("Enter demension: ")) num_bombs = int(input("Enter number of bombs: ")) play(dim, num_bombs)