Загрузка данных


from machine import Pin, I2C
import ssd1306
import time
import random

i2c = I2C(0, scl=Pin(22), sda=Pin(21), freq=400000)
oled = ssd1306.SSD1306_I2C(128, 64, i2c)

b13 = Pin(13, Pin.IN, Pin.PULL_UP)  # покормить
b14 = Pin(14, Pin.IN, Pin.PULL_UP)  # играть
b25 = Pin(25, Pin.IN, Pin.PULL_UP)  # спать
b26 = Pin(26, Pin.IN, Pin.PULL_UP)  # сброс

hunger = 50   # 0 = сыт, 100 = голодный
mood = 50     # 0 = грустный, 100 = счастливый
energy = 50   # 0 = уставший, 100 = бодрый
alive = True

# Мордочка
FACE_HAPPY = [
    "  ####  ####  ",
    " ##  ## ##  ##",
    "##    ##    ##",
    "##  #    #  ##",
    " ##  ####  ## ",
    "  ##      ##  ",
    "    ######    "
]

FACE_SAD = [
    "  ####  ####  ",
    " ##  ## ##  ##",
    "##    ##    ##",
    "##   #  #   ##",
    " ##  ####  ## ",
    "  ##      ##  ",
    "    ######    "
]

FACE_SLEEP = [
    "              ",
    "  ####  ####  ",
    " ##  ## ##  ##",
    "##    ##    ##",
    " ##  ----  ## ",
    "  ##      ##  ",
    "    ######    "
]

def draw_face(face, x=28, y=8):
    for row, line in enumerate(face):
        for col, ch in enumerate(line):
            if ch == '#':
                oled.pixel(x + col, y + row, 1)

def draw_bars():
    # Полоски состояния
    def bar(x, y, val, label):
        oled.text(label, x, y)
        oled.rect(x + 18, y, 30, 7, 1)
        fill = int(val * 28 / 100)
        if fill > 0:
            oled.fill_rect(x + 19, y + 1, fill, 5, 1)

    bar(0, 40, 100 - hunger, "E:")
    bar(0, 50, mood, "M:")
    bar(64, 50, energy, "S:")

last_press = [1, 1, 1, 1]

while True:
    if not alive:
        oled.fill(0)
        oled.text("GAME OVER", 28, 20)
        oled.text("Press D26", 28, 36)
        oled.show()
        if b26.value() == 0:
            hunger, mood, energy, alive = 50, 50, 50, True
            time.sleep(0.3)
        time.sleep(0.05)
        continue

    # Обработка кнопок
    btns = [b13.value(), b14.value(), b25.value(), b26.value()]

    if btns[0] == 0 and last_press[0] == 1:
        hunger = max(0, hunger - 15)
        mood = min(100, mood + 5)
    if btns[1] == 0 and last_press[1] == 1:
        mood = min(100, mood + 15)
        energy = max(0, energy - 10)
        hunger = min(100, hunger + 5)
    if btns[2] == 0 and last_press[2] == 1:
        energy = min(100, energy + 20)
    if btns[3] == 0 and last_press[3] == 1:
        hunger, mood, energy = 50, 50, 50

    last_press = btns

    # Время идёт
    hunger = min(100, hunger + 0.3)
    mood = max(0, mood - 0.15)
    energy = max(0, energy - 0.1)

    # Смерть
    if hunger >= 100 or mood <= 0 or energy <= 0:
        alive = False

    # Выбор мордочки
    if btns[2] == 0 or energy < 20:
        face = FACE_SLEEP
    elif mood > 60 and hunger < 60:
        face = FACE_HAPPY
    else:
        face = FACE_SAD

    oled.fill(0)
    draw_face(face)
    draw_bars()
    oled.show()

    time.sleep(0.1)