сделал генерацию поля, типа разные уровни, а так же сделал вывод текста, что же тут сделалось
This commit is contained in:
+1
-2
@@ -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()
|
||||
|
||||
+18
-11
@@ -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) # запускаю меню
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
+29
-22
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user