ГлавнаяБлогКак создать фермерский симулятор на Python и Pygame
Python

Как создать фермерский симулятор на Python и Pygame

Узнайте, как написать фермерский симулятор на Python с Pygame за один день. Полный разбор кода и механик. Попробуйте сами!

Al
Редакция Algolitalgolit.ru
10 мин чтения22 июня 2026 г.

Почему стоит написать фермерский симулятор на Python

Вы когда-нибудь мечтали создать свою версию Harvest Moon? Или просто хотите прокачать навыки геймдева на Python? В этой статье я покажу, как за один день (от рассвета до заката) построить полноценный фермерский симулятор с динамическим небом, циклом роста культур и экономикой. Мы используем Pygame и скомпилируем игру в WebAssembly, чтобы её можно было запустить в браузере.

Архитектура игры на Pygame

В основе лежит игровой цикл Pygame, который обрабатывает события, обновляет состояние и рендерит кадры. Вся логика завязана на времени: у вас есть ровно один игровой день. Чем ближе к закату, тем быстрее растут культуры, а собранные в «золотой час» дают двойную прибыль.

Основные компоненты

  • Карта на тайлах — поле, магазин, колодец
  • Персонаж — управление WASD/стрелками
  • Фермерские механики: вспашка, полив, посадка, сбор урожая
  • Динамическое небо — плавно меняет цвет от утра до заката
  • Экономика — продажа урожая, покупка семян

Реализация ключевых механик на Python

Давайте разберём код самых важных частей. Все примеры рабочие и снабжены комментариями.

Игровой цикл и время

import pygame
import sys

# Инициализация Pygame
pygame.init()
screen = pygame.display.set_mode((800, 600))
clock = pygame.time.Clock()

# Время: от 0 (рассвет) до 1000 (закат)
game_time = 0
MAX_TIME = 1000
SPEED = 0.1  # скорость течения времени

def update_time():
    global game_time
    game_time += SPEED
    if game_time >= MAX_TIME:
        game_time = MAX_TIME  # день кончился

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
    
    update_time()
    # Отрисовка и обновление объектов
    pygame.display.flip()
    clock.tick(60)

Динамическое небо

def get_sky_color(time):
    # От оранжевого рассвета до синего полудня и красного заката
    if time < 200:
        # Рассвет: оранжевый -> голубой
        t = time / 200
        r = int(255 * (1 - t) + 135 * t)
        g = int(150 * (1 - t) + 206 * t)
        b = int(50 * (1 - t) + 235 * t)
    elif time < 600:
        # Полдень: голубой
        r, g, b = 135, 206, 235
    else:
        # Закат: голубой -> красный
        t = (time - 600) / 400
        r = int(135 * (1 - t) + 255 * t)
        g = int(206 * (1 - t) + 100 * t)
        b = int(235 * (1 - t) + 50 * t)
    return (r, g, b)

# В игровом цикле:
screen.fill(get_sky_color(game_time))

Цикл роста культур

class Crop:
    def __init__(self, x, y, growth_time=300):
        self.x = x
        self.y = y
        self.growth = 0  # от 0 до 1
        self.growth_time = growth_time  # время полного роста
        self.harvested = False

    def update(self, time_speed):
        if not self.harvested and self.growth < 1:
            self.growth += time_speed / self.growth_time
            if self.growth >= 1:
                self.growth = 1

    def is_ready(self):
        return self.growth >= 1 and not self.harvested

    def harvest(self):
        if self.is_ready():
            self.harvested = True
            return True
        return False

# В основном цикле:
for crop in crops:
    crop.update(SPEED)

Золотой час — двойная прибыль

def calculate_price(crop, game_time):
    base_price = 10
    # Золотой час: последние 10% дня
    if game_time >= 0.9 * MAX_TIME:
        return base_price * 2
    return base_price

# При продаже:
if crop.harvest():
    gold += calculate_price(crop, game_time)

Компиляция в WebAssembly для браузера

Чтобы игра работала в браузере без установки Python, используем Pygbag. Это инструмент, который компилирует Pygame-приложение в WebAssembly.

# Установка
pip install pygbag

# Сборка
pygbag --build your_game_directory

# Результат в папке build/web

Затем загружаем содержимое на Vercel или любой хостинг статики.

Практический вывод: что делать прямо сейчас

1. Установите Pygame: pip install pygame
2. Скопируйте приведённые куски кода в один файл и запустите — вы увидите меняющееся небо.
3. Добавьте спрайты и тайлы — используйте бесплатные ресурсы из OpenGameArt.
4. Реализуйте полный цикл: вспашка -> посадка -> полив -> сбор -> продажа.
5. Скомпилируйте через Pygbag и поделитесь ссылкой на игру!

Заключение

Мы разобрали, как создать фермерский симулятор на Python с Pygame за один день. Главные выводы: используйте время как основной ресурс, динамическое небо добавляет атмосферы, а Pygbag позволяет запустить игру в браузере. Попробуйте написать свою версию и поделитесь результатом!

#pygame#фермерский симулятор#геймдев#python#webassembly
Al
Редакция Algolit

Пишем про алгоритмы, подготовку к собеседованиям и карьеру в IT — так, чтобы было понятно и полезно.

Хочешь закрепить знания на практике?

Решай задачи на Algolit — интерактивная платформа для обучения

Начать бесплатно →