SberMA_game
Описание
Инди-игра Ферма для проекта по программированию
Языки
- Python100%
5 часов назад
месяц назад
5 часов назад
5 часов назад
месяц назад
месяц назад
README.md
SberMA Farm
Инди-игра «Ферма» для проекта по программированию.
Описание
2D-ферма на Pygame: перемещение по полю, рубка деревьев, грядки и урожай, торговля с NPC-торговцем. Крафт в коде есть (), отдельного игрового меню крафта пока нет.CraftingSystem
Структура проекта
SberMA_game/
├── main.py # Точка входа
├── requirements.txt # Зависимости
├── README.md
├── Plans_Ideas.md # Идеи (по желанию)
│
├── game/
│ ├── __init__.py
│ ├── main_game.py # Класс Game: цикл, сборка зависимостей
│ │
│ ├── core/
│ │ ├── __init__.py # Реэкспорт констант, событий, ошибок
│ │ ├── enums.py
│ │ ├── events.py
│ │ ├── errors.py
│ │ ├── constants.py # UI, цвета, пути к ассетам
│ │ ├── input_handler.py
│ │ ├── fsm/
│ │ │ ├── __init__.py
│ │ │ ├── state.py
│ │ │ └── fsm.py
│ │ ├── pathfinding/
│ │ │ ├── __init__.py
│ │ │ └── astar.py
│ │ ├── commands/
│ │ │ ├── __init__.py
│ │ │ ├── base.py
│ │ │ ├── actions.py
│ │ │ └── registry.py
│ │ └── interfaces/
│ │ ├── __init__.py
│ │ └── protocols.py
│ │
│ ├── entities/
│ │ ├── __init__.py
│ │ ├── player/
│ │ │ ├── __init__.py
│ │ │ └── player.py
│ │ ├── systems/
│ │ │ ├── __init__.py
│ │ │ ├── resource_storage.py
│ │ │ ├── crafting.py
│ │ │ └── trading.py
│ │ └── npc/
│ │ ├── __init__.py
│ │ ├── base.py
│ │ ├── merchant.py
│ │ ├── pest_bird.py
│ │ └── states/
│ │ ├── __init__.py
│ │ ├── bird_states.py
│ │ ├── sleep.py
│ │ └── walk.py
│ │
│ ├── world/
│ │ ├── __init__.py
│ │ └── world.py
│ │
│ ├── ui/
│ │ ├── __init__.py
│ │ ├── renderers/
│ │ │ ├── __init__.py
│ │ │ ├── renderer.py
│ │ │ ├── textures.py
│ │ │ ├── world.py
│ │ │ └── entities.py
│ │ └── menus/
│ │ ├── __init__.py
│ │ ├── base.py
│ │ └── merchant_menu.py
│ │
│ ├── config/
│ │ ├── __init__.py
│ │ ├── settings.py # Сетка, FPS, баланс, спавны
│ │ ├── config.py # CELL, WIDTH, HEIGHT (из сетки)
│ │ ├── keybinds.py
│ │ └── recipes.py
│ │
│ └── assets/
│ ├── images/
│ └── sounds/
Запуск
Управление
Режим игры () — см. GameState.GAME. Меню у торговца — см. game/config/keybinds.py.game/ui/menus/merchant_menu.py
| Клавиша | Действие |
|---|---|
| ← → ↑ ↓ | Перемещение |
| SPACE | Рубить дерево / собрать урожай (по типу клетки) |
| B | Вскопать грядку |
| S | Посадить семя |
| TAB | В игре: меню торговца (магазин + крафт), если рядом с NPC. В меню: выход в игру |
В меню торговца: ↑ ↓ — список, SPACE — действие; 1 — вкладка магазина, 2 — крафт.
Архитектура
| Компонент | Описание |
|---|---|
| Game | Игровой цикл, pygame, состояния GAME / SHOP, сборка всех зависимостей |
| World | Сетка клеток, рост растений, лес, генерация карты |
| Player | Позиция, действия; композиция: , , |
| Merchant | NPC, FSM (sleep / walk), поиск пути через , торговля |
| PestBird | NPC-вредитель, FSM (walk / attack), атакует незащищенные грядки |
| FSM | Переключение состояний NPC |
| PathFinder (A*) | Путь по сетке; в коде непроходимы камни и края карты |
| Command + Registry | Ввод в режиме игры через команды |
| Renderer | Фасад: мир, игрок, NPC, HUD, события |
| MerchantMenu | Меню торговца: магазин и крафт (TAB рядом с NPC) |
| InputHandler | События клавиатуры, TAB, делегирование в реестр / меню |
| EventManager | Управление игровыми событиями (всплывающие сообщения) |
Технологии
- Python 3.10+
- Pygame 2.x
Паттерны и принципы
- SRP / композиция — системы у игрока вынесены в entities/systems/
- Command — реестр команд для ввода в поле
- FSM — состояния NPC (торговец и птица)
- Facade — Renderer
- Protocol — абстракции в
(частично используются типами и вводом)core/interfaces/ - Dependency Injection — объекты передаются через конструкторы
Планы
- Процедурная генерация карты
- Расширенное строительство и предметы
- Управление мышью