SberMA_game

0

Описание

Инди-игра Ферма для проекта по программированию

Языки

  • Python100%
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Позиция, действия; композиция:
ResourceStorage
,
CraftingSystem
,
TradingSystem
MerchantNPC, FSM (sleep / walk), поиск пути через
PathFinder
, торговля
PestBirdNPC-вредитель, 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 — объекты передаются через конструкторы

Планы

  • Процедурная генерация карты
  • Расширенное строительство и предметы
  • Управление мышью