/
spirzen
/
it-code-examples
Обзор
Документация
Войти
/
spirzen
/
it-code-examples
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
examples/python/py-502-312-026/main.py
120 строк
4 KB
Spirzen
Code migration pack
09 июн 2026, 01:41
09 июн 2026, 01:41
cebc284
Код
Авторство
О чём код?
import pygame import sys import json import os SAVE_FILE = "save_game.json" # ... (код инициализации Pygame и класса Player из предыдущих примеров) ... class SaveablePlayer(pygame.sprite.Sprite): def __init__(self): super().__init__() self.image = pygame.Surface((30, 30)) self.image.fill((0, 255, 0)) self.rect = self.image.get_rect(center=(400, 300)) self.hp = 100 self.level = 1 self.score = 0 def save_data(self): """Создает словарь данных для сохранения""" return { "position": {"x": self.rect.centerx, "y": self.rect.centery}, "hp": self.hp, "level": self.level, "score": self.score } def load_data(self, Данные): """Загружает данные из словаря""" if "position" in Данные: self.rect.centerx = Данные["position"]["x"] self.rect.centery = Данные["position"]["y"] if "hp" in Данные: self.hp = Данные["hp"] if "level" in Данные: self.level = Данные["level"] if "score" in Данные: self.score = Данные["score"] def save_game(player): try: data = player.save_data() with open(SAVE_FILE, 'w', encoding='utf-8') as f: json.dump(Данные, f, indent=4, ensure_ascii=False) print("Игра сохранена успешно.") except Exception as e: print(f"Ошибка сохранения: {e}") def load_game(player): if not os.path.exists(SAVE_FILE): print("Файл сохранения не найден.") return False try: with open(SAVE_FILE, 'r', encoding='utf-8') as f: data = json.load(f) player.load_data(Данные) print("Игра загружена.") return True except Exception as e: print(f"Ошибка загрузки: {e}") return False def main(): player = SaveablePlayer() all_sprites = pygame.sprite.Group() all_sprites.add(player) # Проверка наличия сохранения при старте # Если хотите всегда начинать заново, закомментируйте строку ниже # load_game(player) running = True keys_pressed = {'w': False, 'a': False, 's': False, 'd': False} while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False elif event.type == pygame.KEYDOWN: if event.key == pygame.K_F5: save_game(player) key_map = {pygame.K_w: 'w', pygame.K_a: 'a', pygame.K_s: 's', pygame.K_d: 'd'} if event.key in key_map: keys_pressed[key_map[event.key]] = True elif event.type == pygame.KEYUP: key_map = {pygame.K_w: 'w', pygame.K_a: 'a', pygame.K_s: 's', pygame.K_d: 'd'} if event.key in key_map: keys_pressed[key_map[event.key]] = False # Обновление логики speed = 5 if keys_pressed['w'] and player.rect.top > 0: player.rect.y -= speed if keys_pressed['s'] and player.rect.bottom < SCREEN_HEIGHT: player.rect.y += speed if keys_pressed['a'] and player.rect.left > 0: player.rect.x -= speed if keys_pressed['d'] and player.rect.right < SCREEN_WIDTH: player.rect.x += speed # Пример изменения данных player.score += 1 # Отрисовка screen.fill((30, 30, 30)) all_sprites.draw(screen) font = pygame.font.SysFont('Arial', 20) info_text = f"Score: {player.score} | F5: Save" screen.blit(font.render(info_text, True, (255, 255, 255)), (20, 20)) pygame.display.flip() clock.tick(60) # Автоматическое сохранение при выходе save_game(player) pygame.quit() sys.exit() if __name__ == "__main__": main()