# Сапер

Oct 31st, 2020
685
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
1. import random
2. from random import randint
3. import enum
4.
5.
6. class Cell(enum.Enum):
7.     close_mine = 1
8.     open = 2
9.     flag = 3
10.     bombed = 4
11.     close_empty = 5
12.
13.
14. class Field:
15.     def __init__(self, weight: int, height: int, mines_count: int, block_skin='0', mine_skin='9'):
16.         if mines_count > weight * height:
17.             raise Exception("Слишком много мин")
18.         self.mine_skin = mine_skin
19.         self.block_skin = block_skin
20.         self.mines_count = mines_count
21.         self.height = height
22.         self.weight = weight
23.         self.mines = set()
24.         self.field = self.generate()
25.
26.     def generate(self):
27.         field = [[self.block_skin] * self.weight for _ in range(self.height)]
28.         while len(self.mines) < self.mines_count:
29.             x = randint(0, self.weight - 1)
30.             y = randint(0, self.height - 1)
31.             if (x, y) not in self.mines:
32.                 field[y][x] = self.mine_skin
34.         return field
35.
36.     def get_neighbours(self, x, y):
37.         count = 0
38.         for dx in range(-1, 2):
39.             for dy in range(-1, 2):
40.                 if dx == dy == 0:
41.                     continue
42.                 if (x + dx, y + dy) in self.mines:
43.                     count += 1
44.         return count
45.
46.     def check_mines(self, x, y):
47.         pass
48.
49.     def is_finished(self):
50.         pass
51.
52.     def __str__(self):
53.         return "\n".join([" ".join(line) for line in self.field][::-1])
54.
55.
56. class Game:
57.     def __init__(self):
58.         pass
59.
60.     def make_turn(self, x, y):
61.         pass
62.
63.     def open_cell(self, x, y):
64.         pass
65.
66.
67. if __name__ == "__main__":
68.     field = Field(5, 5, 5)
69.     print(field)
70.
71.
72.
73.
RAW Paste Data