Игра «Поиск предметов» одной строкой

Материал из Ren'Py Wiki
Перейти к навигации Перейти к поиску
Findgame.jpg

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

# Это мини-игра по поиску предметов
# сохранить этот код в файл game.rpy в корне игры

# Вызывается примерно так:

# $ InitGame("bg_room", 5.0, True, (735, 300), "figure1", (640, 226), "figure2", (288, 38), "figure3", (115, 260), "figure4")
# $ StartGame()

# где bg_room - имя файла фона без указания расширения .jpg
# 5.0 - количество секунд на выполнение поиска (если <= 0, таймер отключен)
# (735, 300), "figure1" - координаты и имя файла предмета
# без расширения .png
# предметов может быть сколько угодно
# все фоны и картинки предметов должны быть в папке images
# на выходе - истина или ложь (уложились в отведенное время или нет)
# количество найденных предметов в переменной oLen
# общее количество предметов в переменной maxLen

# в папке sounds должен лежать звук «click.mp3»
# либо, если его нет, то нужно закомментировать строку:
# renpy.play("sounds/click.mp3", channel="sound")

init python:
    oXY = []
    oN = []
    oLen = 0
    maxLen = 0
    oBg = ""
    oLast = -1
    oTime = 0.0
    needTimer = False
    oActive = False

    # Инициализация игры, размещение предметов на экране
    def InitGame(bg, time, *args):
        global oBg, oXY, oN, oLen, maxLen, oLast, oTime, oActive, needTimer
        oXY = []
        oN = []
        oLen = 0
        oBg = bg
        oLast = -1
        oTime = time
        maxLen = 0
        oActive = True
        if oTime > 0.0:
            needTimer = True
        for xy, obj_name in zip(args[0::2], args[1::2]):
            oXY.append(xy)
            oN.append(obj_name)
            maxLen += 1

    # Запуск игры
    def StartGame():
        global oActive
        oActive = True
        while (oLen < maxLen) and ((oTime > 0.0) or not needTimer):
            renpy.call_screen("game")
        if oTime > 0.0 or not needTimer:
            return True
        else:
            return False

    # Показать экран игры в виде неактивного фона
    # Уже найденные предметы не будут отображаться
    def NotGame():
        global oActive
        oActive = False
        renpy.show_screen("game")

    # Обработчик клика по предмету
    def oClick():
        global oLen
        if oLast >= 0:
            if oN[oLast]:
                oN[oLast] = ""
                oLen += 1
                renpy.play("sounds/click.mp3", channel="sound")

# Собственно экран игры, запускать из функции StartGame()
screen game:
    if oActive and needTimer:
        timer 0.1 repeat True action [SetVariable("oTime", oTime - .1), If(oTime <= .0, true = [Hide("game"), Return(-1)])]
    add "images/" + oBg + ".jpg"
    for i in range(0, len(oN)):
        if oN[i]:
            imagebutton:
                focus_mask True
                pos(oXY[i])
                idle "images/" + oN[i] + ".png"
                hover "images/" + oN[i] + ".png"
                if oActive:
                    action [SetVariable("oLast", i), oClick(), Hide("game"), Return(i)]
                else:
                    action []
    if oActive and needTimer:
        if oTime > .1:
            text "[oTime]" align(.1, .1) size 48
        else:
            text "0.0" align(.1, .1) size 48

На главную страницу Книга рецептов Энциклопедии Ren'Py Renpy для чайников Вернуться к началу статьи