From af27d3393f5c95235fd2f679e3c8b07c87a281a8 Mon Sep 17 00:00:00 2001 From: dmitrium12 Date: Thu, 19 Jan 2023 16:52:13 +0700 Subject: [PATCH] =?UTF-8?q?=D1=81=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=20=D0=B3?= =?UTF-8?q?=D0=B5=D0=BD=D0=B5=D1=80=D0=B0=D1=86=D0=B8=D1=8E=20=D0=BF=D0=BE?= =?UTF-8?q?=D0=BB=D1=8F,=20=D1=82=D0=B8=D0=BF=D0=B0=20=D1=80=D0=B0=D0=B7?= =?UTF-8?q?=D0=BD=D1=8B=D0=B5=20=D1=83=D1=80=D0=BE=D0=B2=D0=BD=D0=B8,=20?= =?UTF-8?q?=D0=B0=20=D1=82=D0=B0=D0=BA=20=D0=B6=D0=B5=20=D1=81=D0=B4=D0=B5?= =?UTF-8?q?=D0=BB=D0=B0=D0=BB=20=D0=B2=D1=8B=D0=B2=D0=BE=D0=B4=20=D1=82?= =?UTF-8?q?=D0=B5=D0=BA=D1=81=D1=82=D0=B0,=20=D1=87=D1=82=D0=BE=20=D0=B6?= =?UTF-8?q?=D0=B5=20=D1=82=D1=83=D1=82=20=D1=81=D0=B4=D0=B5=D0=BB=D0=B0?= =?UTF-8?q?=D0=BB=D0=BE=D1=81=D1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/config.ini | 2 +- modules/Game.py | 3 +-- modules/GameMenu.py | 29 ++++++++++++++--------- modules/Mathematics.py | 22 ++++++++++++++++++ modules/RewardWindow.py | 26 +++++++++++++++++++++ modules/Swamp.py | 51 +++++++++++++++++++++++------------------ test.py | 6 ++--- 7 files changed, 99 insertions(+), 40 deletions(-) create mode 100644 modules/RewardWindow.py diff --git a/conf/config.ini b/conf/config.ini index d97d121..72b1e1d 100644 --- a/conf/config.ini +++ b/conf/config.ini @@ -1,4 +1,4 @@ [Settings] -difficulty = +difficulty = Простая sound = True diff --git a/modules/Game.py b/modules/Game.py index 8b11cea..b57782a 100644 --- a/modules/Game.py +++ b/modules/Game.py @@ -9,7 +9,6 @@ class Game: config.read("conf/config.ini") sound = config['Settings']['sound'] if sound == "True": - print(sound) pg.mixer.init() pg.mixer.music.load('styles/background.mp3') pg.mixer.music.play(loops=-1) @@ -28,7 +27,7 @@ class Game: if event.type == pg.QUIT: self.running = False if event.type == pg.MOUSEBUTTONDOWN: - self.swamp.get_click(event.pos) + self.swamp.get_click(event.pos, self.screen) self.screen.fill((93, 101, 48)) self.swamp.render(self.screen) pg.display.flip() diff --git a/modules/GameMenu.py b/modules/GameMenu.py index 1b27b80..cfef261 100644 --- a/modules/GameMenu.py +++ b/modules/GameMenu.py @@ -26,24 +26,30 @@ def start_the_game() -> None: config = configparser.ConfigParser() # создаю объект ConfigParser config.read('conf/config.ini') # читаю файл config['Settings']['difficulty'] = difficulty # перезаписываю сложность + config['Settings']['sound'] = sound # перезаписываю настройку звука with open('conf/config.ini', 'w') as configfile: # открываю файл для записи config.write(configfile) # записываю menu.toggle() # останавливаю меню -def test(value: dict, _): - print(value) +def test(value: dict, _) -> None: + """ + Функция сохраняет настройки звука во временную переменную + + :param value: dict - тут лежит, всё что программа знает о сложности + + :param _: мы не знаем, что это такое, если бы мы знали, что это такое, но мы не знаем, что это такое + + :return: None + """ + global sound if value[0][0] == "Да": - test = "True" + sound = "True" else: - test = "False" - config = configparser.ConfigParser() # создаю объект ConfigParser - config.read('conf/config.ini') # читаю файл - config['Settings']['sound'] = test # перезаписываю сложность - with open('conf/config.ini', 'w') as configfile: # открываю файл для записи - config.write(configfile) # записываю + sound = "False" +sound = "True" difficulty = "Простая" # временная переменная для сложности pygame.init() # запускаю pygame surface = pygame.display.set_mode((600, 400)) # создаю полотно @@ -51,10 +57,11 @@ mytheme = pygame_menu.themes.THEME_DARK.copy() # создаю свою тему mytheme.background_color = pygame_menu.baseimage.BaseImage(image_path='styles/background.jpg') # натягиваю свой background menu = pygame_menu.Menu('Welcome', 600, 400, theme=mytheme) # создаю меню -menu.add.label("Сложность") # добавляю label +menu.add.label("Сложность") # добавляю label сложности menu.add.selector('', [('Простая', 1), ('Средняя', 2), ('Сложная', 3), ('Проигрывать весело', 4)], onchange=set_difficulty) # добавляю selector с выбором сложности -menu.add.selector("музыка", [("Да", 1), ("Нет", 1)], onchange=test) +menu.add.label("Музыка") # добавляю label музыки +menu.add.selector('', [("Да", 1), ("Нет", 1)], onchange=test) # добавляю selector с выбором настроек музыки menu.add.button('Play', start_the_game) # добавляю кнопку начала игры menu.add.button('Quit', pygame_menu.events.EXIT) # добавляю кнопку выхода menu.mainloop(surface) # запускаю меню diff --git a/modules/Mathematics.py b/modules/Mathematics.py index fe1e2d0..3cc2aa5 100644 --- a/modules/Mathematics.py +++ b/modules/Mathematics.py @@ -59,3 +59,25 @@ def start_calculating(): f"и probability_consequence") quit(0) logger.debug("Валидация игры успешно прошла") + + +def field_generation(): + difficulties = { + "Простая": [40, 30, 15, 10, 5], + "Средняя": [30, 30, 25, 10, 5], + "Сложная": [30, 40, 15, 10, 5], + "Проигрывать весело": [5, 50, 20, 10, 15] + } + config = configparser.ConfigParser() + config.read("conf/config.ini") + difficulty = config['Settings']['difficulty'] + import random + board = [] + for _ in range(8): + line = [] + for _ in range(13): + # 0 - ничего, 1 - мина, любое другое число - указывает на количество получаемых мух + variant = random.choices(['0', '1', '2', '5', '10'], weights=difficulties[difficulty]) + line.append(int(variant[0])) + board.append(line) + return board diff --git a/modules/RewardWindow.py b/modules/RewardWindow.py new file mode 100644 index 0000000..d99d18e --- /dev/null +++ b/modules/RewardWindow.py @@ -0,0 +1,26 @@ +import pygame as pg + + +class RewardWindow: + def open_window(self, event, screen): + pg.draw.rect(screen, (38, 33, 55), (0, 0, 700, 500)) + font = pg.font.Font(None, 30) + text_string = self.event_to_string(event) + text = font.render(text_string, True, (255, 255, 255)) + size = font.size(text_string) + screen.blit(text, (350 - (size[0] / 2.), 250 - (size[1] / 2.))) + + @staticmethod + def event_to_string(event): + event_string = "" + if event == 0: + event_string = "ничего не было" + elif event == 1: + event_string = "была мина, попрощайся с лягушкой" + elif event == 2: + event_string = "было 2 мухи, теперь они твои" + elif event == 5: + event_string = "было 5 мух, теперь они твои" + elif event == 10: + event_string = "было 10 мух, теперь они твои" + return event_string diff --git a/modules/Swamp.py b/modules/Swamp.py index 711ca03..c9a6c86 100644 --- a/modules/Swamp.py +++ b/modules/Swamp.py @@ -1,10 +1,13 @@ import pygame as pg -from math import pi -from modules import Book, GameOver +from modules import Book, GameOver, Mathematics +from modules.RewardWindow import RewardWindow +# тут писал код не я, поэтому я отказываюсь это комментировать class Swamp: def __init__(self): + self.cell_info = None + self.event = None self.left_book = None self.down_book = None self.right_book = None @@ -13,15 +16,18 @@ class Swamp: self.left_area = None self.y = None self.x = None + self.test = False self.width = 13 self.height = 8 - self.board = [[0] * 13 for _ in range(8)] # Матрица + self.board = Mathematics.field_generation() # Матрица self.cell_size = 30 + self.time_to_close = 0 self.book_use = False # Если self.book_use является True, то активируется класс Book self.book = Book.Book() self.frogs = 3 # кол-во лягушек self.game_over = GameOver.GameOver() + self.reward_window = RewardWindow() def render(self, screen): # Рисование поля, книги и болота myimage = pg.image.load("styles/background.jpg") @@ -40,22 +46,27 @@ class Swamp: for col in range(self.height): self.x = self.left_area + row * self.cell_size self.y = self.top_area + col * self.cell_size - if self.board[col][row] == 0: - pg.draw.rect(screen, (100, 100, 100), - (self.x, self.y, self.cell_size, self.cell_size), 1) - elif self.board[col][row] == 1: - pg.draw.rect(screen, (252, 232, 131), (self.x, self.y, self.cell_size, self.cell_size)) + pg.draw.rect(screen, (100, 100, 100), + (self.x, self.y, self.cell_size, self.cell_size), 1) if self.book_use is True: # При нажатии на книгу рисуется небольшой экран с информацией from modules.Mathematics import recalculation_events, get_random_event - event = get_random_event() - print(event) - recalculation_events(event["well"]) - self.book.info(screen, event) + if not self.test: + self.event = get_random_event() + self.test = True + recalculation_events(self.event["well"]) + self.book.info(screen, self.event) + + if not self.book_use: + self.test = False if self.frogs == 0: # Если все лягушки вымрут, то открывается окно с Game over self.game_over.end(screen) + if self.time_to_close != 0: + self.time_to_close -= 1 + self.reward_window.open_window(self.cell_info, screen) + def set_view(self, left, top, cell_size): self.left_area = left self.top_area = top @@ -67,13 +78,15 @@ class Swamp: self.down_book = down self.left_book = left - def get_cell(self, mouse_pos): + def get_cell(self, mouse_pos, screen): board_width = self.width * self.cell_size board_height = self.height * self.cell_size if self.left_area < mouse_pos[0] < self.left_area + board_width: if self.top_area < mouse_pos[1] < self.top_area + board_height: cell_coords = (mouse_pos[0] - self.top_area) // self.cell_size + 1, \ (mouse_pos[1] - self.left_area) // self.cell_size - 1 + self.cell_info = self.board[cell_coords[1]][cell_coords[0]] + self.time_to_close = 100 return cell_coords elif self.left_book < mouse_pos[0] < self.right_book: if self.top_book < mouse_pos[1] < self.down_book and self.book_use is False: @@ -83,14 +96,8 @@ class Swamp: return None def on_click(self, mouse_pos): # Действия после клика на клетчатое поле - if mouse_pos is None: - self.board = [[0] * 13 for _ in range(8)] - elif self.board[mouse_pos[1]][mouse_pos[0]] == 0: - self.board = [[0] * 13 for _ in range(8)] - self.board[mouse_pos[1]][mouse_pos[0]] = 1 - elif self.board[mouse_pos[1]][mouse_pos[0]] == 1: - self.board[mouse_pos[1]][mouse_pos[0]] = 0 + pass - def get_click(self, mouse_pos): - cell = self.get_cell(mouse_pos) + def get_click(self, mouse_pos, screen): + cell = self.get_cell(mouse_pos, screen) self.on_click(cell) diff --git a/test.py b/test.py index 856d0cb..4ae184f 100644 --- a/test.py +++ b/test.py @@ -1,5 +1,3 @@ -from modules.Mathematics import recalculation_events, get_random_event +from modules.Mathematics import field_generation -event = get_random_event() -print(event) -recalculation_events(event["well"]) +field_generation()