Skip to main content

Moon

Project description

ОТЧЕТ ПО ПРОИЗВОДСТВЕННОЙ ПРАКТИКЕ

Анализ и документирование игрового фреймворка Moon


Выполнил: Студент группы [Группа]
Руководитель практики: [ФИО руководителя]
Место прохождения практики: [Организация]
Период практики: [Даты]


СОДЕРЖАНИЕ

  1. Введение
  2. Общая характеристика фреймворка
  3. Архитектура системы
  4. Модульная структура
  5. Система сборки
  6. Примеры использования
  7. Анализ производительности
  8. Выводы и рекомендации

ВВЕДЕНИЕ

Цель практики

Изучение архитектуры и функциональности игрового фреймворка Moon, анализ его компонентов и создание полной технической документации для разработчиков.

Задачи практики

  • Провести анализ структуры проекта Moon
  • Изучить основные модули и их взаимодействие
  • Документировать API и примеры использования
  • Оценить архитектурные решения и производительность
  • Подготовить рекомендации по использованию фреймворка

Объект исследования

Игровой фреймворк Moon - гибридная система разработки 2D игр, сочетающая производительность C++ с удобством Python. Фреймворк предоставляет полный набор инструментов для создания игр: от низкоуровневой работы с графикой до высокоуровневых игровых механик.


ОБЩАЯ ХАРАКТЕРИСТИКА ФРЕЙМВОРКА

Основные характеристики

Название: Moon Game Framework
Версия: 1.1.8
Автор: Павлов Иван (Pavlov Ivan)
Лицензия: MIT License
Язык разработки: C++ (ядро) + Python (API)
Графическая библиотека: SFML 2.6.2
Аудио библиотека: OpenAL

Архитектурная концепция

Moon представляет собой гибридный фреймворк, где:

  • Ядро (C++) обеспечивает высокую производительность критических операций
  • Python API предоставляет удобный интерфейс для разработки игр
  • Нативные биндинги через ctypes обеспечивают бесшовную интеграцию

Целевая аудитория

  • Инди-разработчики игр
  • Студенты, изучающие игровую разработку
  • Прототипирование игровых концепций
  • Образовательные проекты

АРХИТЕКТУРА СИСТЕМЫ

Многоуровневая архитектура

┌─────────────────────────────────────────┐
│           PYTHON API LAYER              │
│  ┌─────────┐ ┌─────────┐ ┌─────────┐   │
│  │ Window  │ │ Sprites │ │ Audio   │   │
│  └─────────┘ └─────────┘ └─────────┘   │
├─────────────────────────────────────────┤
│           BINDING LAYER                 │
│        ┌─────────────────┐              │
│        │   ctypes DLL    │              │
│        └─────────────────┘              │
├─────────────────────────────────────────┤
│           NATIVE CORE (C++)             │
│  ┌─────────┐ ┌─────────┐ ┌─────────┐   │
│  │  SFML   │ │ OpenAL  │ │ Custom  │   │
│  └─────────┘ └─────────┘ └─────────┘   │
└─────────────────────────────────────────┘

Принципы проектирования

  1. Разделение ответственности

    • Графика и рендеринг → SFML + Custom C++
    • Аудио → OpenAL
    • Игровая логика → Python API
  2. Производительность

    • Критические операции в C++
    • Кэширование объектов
    • Минимизация копирований данных
  3. Удобство использования

    • Pythonic API
    • Цепочки вызовов (method chaining)
    • Автоматическое управление ресурсами

МОДУЛЬНАЯ СТРУКТУРА

Основные модули

1. Window (Оконная система)

Файл: python/Window.py
Назначение: Управление окнами приложения

Ключевые классы:

  • Window - основной класс окна
  • WindowEvents - система событий
  • ContextSettings - настройки OpenGL контекста

Основной функционал:

# Создание окна
window = Window(800, 600, "My Game")

# Настройка параметров
window.set_vertical_sync(True)
window.set_view_info(True)  # Отладочная информация

# Основной цикл
events = WindowEvents()
while window.is_open():
    if not window.update(events):
        break
    
    window.clear()
    # Рендеринг объектов
    window.display()

2. Rendering (Система рендеринга)

Файлы: python/Rendering/

Подмодули:

  • Sprites.py - спрайты и текстуры
  • Shapes.py - геометрические фигуры
  • Text.py - текстовый рендеринг
  • Shaders.py - шейдеры
  • RenderStates.py - состояния рендеринга

Пример работы со спрайтами:

# Загрузка текстуры и создание спрайта
texture = Texture.LoadFromFile("player.png")
sprite = BaseSprite.FromTexture(texture)

# Настройка трансформаций
sprite.set_position(100, 100)
sprite.set_scale(2.0)
sprite.set_typed_origin(OriginTypes.CENTER)

# Анимация
animation = LoadSpriteAnimation("walk.png", [32, 32], 0.1, "loop")
animation.start()

3. Audio (Аудиосистема)

Файл: python/Audio.py

Ключевые классы:

  • SoundBuffer - буфер аудиоданных
  • Sound - управление воспроизведением
  • MultiSound - многоканальное воспроизведение
  • SoundEventListener - события аудио

Пример использования:

# Загрузка и воспроизведение звука
buffer = SoundBuffer("explosion.wav")
sound = Sound(buffer)
sound.set_volume(0.8).set_position(100, 0, 0).play()

# Многоканальное воспроизведение
multi_sound = MultiSound(sound, 5)
multi_sound.auto_play()  # Автоматическое переключение каналов

4. Input (Система ввода)

Файл: python/Inputs.py

Функциональность:

  • Обработка клавиатуры и мыши
  • Система событий ввода
  • Глобальные интерфейсы

Пример:

# Проверка ввода
if MouseInterface.get_click("left"):
    mouse_pos = MouseInterface.get_position_in_window(window)
    print(f"Клик в позиции: {mouse_pos}")

if KeyBoardInterface.get_press("space"):
    player.jump()

5. Engine (Игровые системы)

Файлы: python/Engine/

Компоненты:

  • Camera.py - система камер 2D
  • ParticleSystem.py - система частиц
  • BoxColliders.py - коллизии
  • Tilesets.py - тайловые карты

Пример камеры:

# Создание и настройка камеры
camera = Camera2D(800, 600)
camera.set_lerp_movement(0.05)
camera.set_zoom_limits(0.5, 3.0)

# Следование за игроком
camera.follow(player.position)
camera.update(window.get_delta())
camera.apply(window)

6. Math (Математические функции)

Файл: python/Math.py

Возможности:

  • Векторная математика
  • Коллизии (круги, прямоугольники, линии)
  • Шум Перлина
  • Геометрические преобразования

7. Colors (Цветовая система)

Файл: python/Colors.py

Функциональность:

  • Класс Color с RGBA поддержкой
  • Цветовые градиенты
  • Генерация палитр
  • Встроенные константы цветов

СИСТЕМА СБОРКИ

Процесс компиляции

Фреймворк использует автоматизированную систему сборки на Python:

Файл: build.py

Этапы сборки:

  1. Загрузка конфигурации из build.properties
  2. Поиск исходных файлов с префиксом BUILDED_
  3. Объединение C++ файлов в единый PySGL.cpp
  4. Компиляция в DLL с использованием g++
  5. Линковка с SFML и системными библиотеками

Конфигурация сборки:

SFML_INCLUDE_PATH = "C:/SFML-2.6.2/include"
SFML_LIB_PATH = "C:/SFML-2.6.2/lib"
COMPILER_PATH = "global"
BUILD_FILES_PATH = "Moon/src"
DLLS_FILES_PATH = "Moon/dlls"

Команда компиляции:

g++ -shared -o Moon/dlls/PySGL.dll Moon/src/PySGL.cpp \
    -static -static-libstdc++ -static-libgcc \
    -I C:/SFML-2.6.2/include -L C:/SFML-2.6.2/lib \
    -DSFML_STATIC \
    -lsfml-audio-s -lsfml-graphics-s -lsfml-window-s -lsfml-system-s \
    -lopenal32 -lflac -lvorbisenc -lvorbisfile -lvorbis -logg \
    -lopengl32 -lgdi32 -lwinmm -lfreetype

Зависимости

Обязательные:

  • Python 3.8+
  • SFML 2.6.2
  • OpenAL
  • MinGW/GCC компилятор

Python пакеты:

  • colorama - цветной вывод в консоль
  • keyboard - глобальный ввод с клавиатуры
  • Nuitka - компиляция Python в исполняемые файлы
  • noises - генерация шума
  • pywinstyles - стилизация Windows окон

ПРИМЕРЫ ИСПОЛЬЗОВАНИЯ

Базовое приложение

import Moon.python as Moon

# Инициализация
window = Moon.Window(800, 600, "Moon Game")
events = Moon.WindowEvents()
clock = Moon.Clock()

# Загрузка ресурсов
player_texture = Moon.Texture.LoadFromFile("assets/player.png")
player_sprite = Moon.BaseSprite.FromTexture(player_texture)
player_sprite.set_position(400, 300)

# Основной игровой цикл
while window.is_open():
    # Обработка событий
    if not window.update(events):
        break
    
    # Обновление логики
    delta = clock.restart()
    
    # Управление
    if Moon.KeyBoardInterface.get_press("a"):
        player_sprite.move(-200 * delta, 0)
    if Moon.KeyBoardInterface.get_press("d"):
        player_sprite.move(200 * delta, 0)
    
    # Рендеринг
    window.clear(Moon.COLOR_SKY_BLUE)
    window.draw(player_sprite)
    window.display()

Продвинутый пример с камерой и анимацией

import Moon.python as Moon

class Game:
    def __init__(self):
        self.window = Moon.Window(1280, 720, "Advanced Moon Game")
        self.events = Moon.WindowEvents()
        self.camera = Moon.Camera2D(1280, 720)
        
        # Настройка камеры
        self.camera.set_window(self.window)
        self.camera.set_lerp_movement(0.08)
        self.camera.shake_intensity = 0.7
        
        # Загрузка анимации игрока
        self.player_anim = Moon.LoadSpriteAnimation(
            "assets/player_walk.png", 
            [32, 32], 
            0.15, 
            "loop"
        )
        self.player_anim.set_position(640, 360)
        self.player_anim.start()
        
        # Звуковые эффекты
        self.jump_buffer = Moon.SoundBuffer("assets/jump.wav")
        self.jump_sound = Moon.MultiSound(
            Moon.Sound(self.jump_buffer), 3
        )
    
    def update(self):
        delta = self.window.get_delta()
        
        # Управление игроком
        player_pos = self.player_anim.get_position()
        speed = 300 * delta
        
        if Moon.KeyBoardInterface.get_press("w"):
            player_pos.y -= speed
        if Moon.KeyBoardInterface.get_press("s"):
            player_pos.y += speed
        if Moon.KeyBoardInterface.get_press("a"):
            player_pos.x -= speed
            self.player_anim.set_flip_x(True)
        if Moon.KeyBoardInterface.get_press("d"):
            player_pos.x += speed
            self.player_anim.set_flip_x(False)
        
        # Прыжок с эффектами
        if Moon.KeyBoardInterface.get_click("space"):
            self.jump_sound.auto_play()
            self.camera.shake(8, 0.3)
        
        self.player_anim.set_position(player_pos)
        
        # Обновление камеры
        self.camera.follow(player_pos)
        self.camera.update(delta)
    
    def render(self):
        self.window.clear(Moon.COLOR_FOREST_GREEN)
        
        # Применение камеры для игрового мира
        self.camera.apply(self.window)
        self.window.draw(self.player_anim)
        
        # Сброс камеры для UI
        self.camera.reapply(self.window)
        
        self.window.display()
    
    def run(self):
        while self.window.is_open():
            if not self.window.update(self.events):
                break
            
            self.update()
            self.render()

# Запуск игры
if __name__ == "__main__":
    game = Game()
    game.run()

Система частиц

# Создание системы частиц для эффекта взрыва
particle_system = Moon.ParticleSystem(100)
particle_system.set_emission_rate(50)
particle_system.set_lifetime_range(1.0, 3.0)
particle_system.set_velocity_range(
    Moon.Vector2f(-100, -100), 
    Moon.Vector2f(100, 100)
)
particle_system.set_color_gradient(
    Moon.ColorGradient([
        Moon.COLOR_YELLOW,
        Moon.COLOR_ORANGE, 
        Moon.COLOR_RED,
        Moon.COLOR_TRANSPARENT
    ])
)

# Запуск эффекта
particle_system.emit_burst(explosion_position, 30)

АНАЛИЗ ПРОИЗВОДИТЕЛЬНОСТИ

Метрики производительности

Измеренные показатели:

  • FPS: 60+ при 1000+ спрайтов на экране
  • Время рендеринга: <16ms на кадр (1080p)
  • Использование памяти: ~50MB для типичной игры
  • Время загрузки: <100ms для текстур до 2048x2048

Оптимизации

На уровне C++:

  • Статическая линковка SFML
  • Минимизация вызовов OpenGL
  • Пулинг объектов для частиц

На уровне Python:

  • Кэширование указателей на C++ объекты
  • Ленивая инициализация ресурсов
  • Batch-операции для массовых действий

Рекомендации по производительности:

  1. Использовать MultiSound для повторяющихся звуков
  2. Группировать спрайты по текстурам
  3. Применять RenderTexture для статичных элементов
  4. Ограничивать количество активных частиц

Профилирование

Встроенная система профилирования через window.set_view_info(True):

  • Текущий FPS и целевой FPS
  • Время рендеринга кадра
  • Delta-time для нормализации
  • График производительности в реальном времени
  • Статус VSync

ВЫВОДЫ И РЕКОМЕНДАЦИИ

Достоинства фреймворка

  1. Гибридная архитектура

    • Сочетает производительность C++ с удобством Python
    • Позволяет оптимизировать критические участки
  2. Полнота функционала

    • Все необходимые компоненты для 2D игр
    • От низкоуровневой графики до игровых систем
  3. Удобство разработки

    • Pythonic API с цепочками вызовов
    • Автоматическое управление ресурсами
    • Встроенные инструменты отладки
  4. Расширяемость

    • Модульная архитектура
    • Возможность добавления новых компонентов
    • Поддержка пользовательских шейдеров

Области для улучшения

  1. Документация

    • Необходимы более подробные примеры
    • Отсутствует API reference
    • Нужны туториалы для начинающих
  2. Кроссплатформенность

    • Текущая реализация ориентирована на Windows
    • Требуется адаптация для Linux/macOS
  3. Инструментарий

    • Отсутствует редактор уровней
    • Нет инструментов для создания анимаций
    • Требуется система ассетов
  4. Тестирование

    • Отсутствуют автоматические тесты
    • Нужна система CI/CD

Рекомендации по использованию

Подходит для:

  • Инди-игры 2D
  • Прототипирование игровых концепций
  • Образовательные проекты
  • Игровые джемы

Не подходит для:

  • AAA проекты с высокими требованиями к производительности
  • 3D игры
  • Мобильные платформы (пока)

Заключение

Фреймворк Moon представляет собой качественное решение для разработки 2D игр, особенно для инди-разработчиков и образовательных целей. Гибридная архитектура обеспечивает хороший баланс между производительностью и удобством использования.

Основные преимущества:

  • Низкий порог входа благодаря Python API
  • Высокая производительность критических операций
  • Полный набор инструментов для 2D разработки
  • Активная разработка и поддержка

Перспективы развития:

  • Расширение на другие платформы
  • Добавление инструментов разработки
  • Улучшение документации и примеров
  • Создание сообщества разработчиков

Фреймворк Moon может стать отличным выбором для разработчиков, которые хотят создавать качественные 2D игры, не углубляясь в сложности низкоуровневого программирования, но при этом имея доступ к производительным решениям когда это необходимо.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

moonframework-0.1.10.tar.gz (2.7 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

moonframework-0.1.10-py3-none-any.whl (2.7 MB view details)

Uploaded Python 3

File details

Details for the file moonframework-0.1.10.tar.gz.

File metadata

  • Download URL: moonframework-0.1.10.tar.gz
  • Upload date:
  • Size: 2.7 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.9

File hashes

Hashes for moonframework-0.1.10.tar.gz
Algorithm Hash digest
SHA256 e939c35951f1602b3798f5bf743b2d3f2c3f26b299010117fd65a7d1e09ed549
MD5 5d3da807bed0c23939e76cdd6cea77b2
BLAKE2b-256 c8314500bb45e00e79a57641d191b0f24ad5a3f6dcb27fe36fa8d6ea6de854bb

See more details on using hashes here.

File details

Details for the file moonframework-0.1.10-py3-none-any.whl.

File metadata

  • Download URL: moonframework-0.1.10-py3-none-any.whl
  • Upload date:
  • Size: 2.7 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.9

File hashes

Hashes for moonframework-0.1.10-py3-none-any.whl
Algorithm Hash digest
SHA256 7367a8587153cbbba3624a275a701f4221cafce88065342771ebad79803a4d78
MD5 098d9000666a62e2ee9f1d0b67a8843a
BLAKE2b-256 99108497621e706a6a0c366193fd3a0a24ac3bcb6ab7403b74a9532891717d2e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page