Форум Anivisual закрыт. Вы не можете создавать новые темы или писать ответы. Форум будет работать в режиме архива.
Пользователи · Поиск по форуму · · · Регистрация

  • Страница 1 из 1
  • 1
Форум о визуальных новеллах » Для разработчиков » Ren'Py » Базовый календарь,ошибка (Не робит()
Базовый календарь,ошибка

partizein

#1
Есть довольно таки простой код:
label days:
if day_of_weak == 1 and day_of_weak <=5:
"working"
$day_of_weak +=1
jump days
if day_of_weak ==6 and day_of_weak <=7:
"Yeeah"
$day_of_weak +=1
jump days
НО,при запуске он тупо пропускает Jump cry и идет дальше,вопрос почему?
Ну ок,подумал я,тупой ты ренпай.Буду тебя насильно перепрыгивать в нужное место
Дописал еще один лейбл для распрыжки:
label start:
$day_of_weak = 1
"ok"
jump days

label nextd:
"ok made it"
jump days

label days:
if day_of_weak == 1 and day_of_weak <=5:
"working"
$day_of_weak +=1
jump nextd
if day_of_weak ==6 and day_of_weak <=7:
"Yeeah"
$day_of_weak +=1
jump nextd
Непомоголо cry втупую пропускает лейбл days,как будто его нет.

Прописал для каждого дня отдельную проверку angry :
label start:
$day_of_weak = 1
"ok"
jump days

label days:

if day_of_weak == 1:
"Monday"
$day_of_weak +=1
jump nextd
if day_of_weak == 2:
"Tuesday"
$day_of_weak +=1
jump nextd
if day_of_weak == 3:
"Wednesday"
$day_of_weak +=1
jump nextd
if day_of_weak == 4:
"Thursday"
$day_of_weak +=1
jump nextd
if day_of_weak == 5:
"Friday"
$day_of_weak +=1
jump nextd
if day_of_weak == 6:
"Saturday"
$day_of_weak +=1
jump nextd
if day_of_weak ==7:
"Sunday"
$day_of_weak -=6
jump nextd

label nextd:
"ok made it"
jump days
Только так заработало madness ,но сильно дохера текста и работы,хотелось бы код покомпактней,кто че может посоветовать?
Сообщение отредактировал partizein - Вторник, 26/Июн/2018, 11:58
Пользуйтесь ребята

Ikuku

#2
И первый вариант, и второй, с распрыжкой, технически рабочие, проблема не в конструкции, а в условии в if:

Код
if day_of_weak == 1 and day_of_weak <=5:

читается как "если Х равен 1 и одновременно с этим Х меньше либо равен 5", т.е. единственное значение переменной, которое удовлетворяет такому условию - это 1. В первом куске кода оно не выполняется никогда, т.к. переменную вы до вхождения в него не объявили, и значения у нее нет, во втором, с распрыжкой, выполняется только раз, потому что переменная была объявлена ($day_of_weak = 1). Если исправить на:
Код
if day_of_weak >= 1 and day_of_weak <=5:

- все заработает. Аналогично со вторым условием:
Код
if day_of_weak >=6 and day_of_weak <=7:

Можно свернуть их в if/else, но нужно ли это, зависит от конкретной задачи, пока что такой код будет просто циклить нас в метке days, пока дней не станет 8 а потом выпадать на следующую по тексту в файле метку:
Код
label days:
    if day_of_weak >= 1 and day_of_weak <=5:
        "working"

        $day_of_weak +=1
        jump days

    elif day_of_weak >=6 and day_of_weak <=7:
        "Yeeah"

        $day_of_weak +=1
        jump days

Tester

#3
Ну вообще мне кажется, что изначальный код стоило бы доработать так (- вместо пробела).
Согласен с ответом выше, что в одном из условий ошибка. Но почему бы не доработать?..
(Встраивание в код: в N++ замена 4-х дефисов ("----") на 4 пробела (" ")).
===1:

label days:
----if ((day_of_weak >= 1) and (day_of_weak <=5)):
--------"working"
----elif ((day_of_weak == 6) or (day_of_weak ==7)):
--------"Yeeah"
----$ day_of_weak +=1
----if (day_of_weak > 7):
--------$ day_of_weak = 1
----jump days

===
Ежели нужно под каждый день с сохранением day_of_weak (1 == Пон).
===2:

init:
----$ dayer = ["Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота", "Воскресенье"]
label days:
----if ((day_of_weak >= 1) and (day_of_weak <=7)):
--------"[dayer[day_of_weak - 1]]"
----else:
--------$ day_of_weak = 0
----$ day_of_weak +=1
----if (day_of_weak > 7):
--------$ day_of_weak = 1
----jump days

===
Полные дни с наличием проверки на выходные:
===3.1:
init:
----$ dayer = [["Понедельник", "Рабочий"], "[Вторник", "Рабочий"], ["Среда", "Рабочий"], ["Четверг", "Рабочий"], ["Пятница", "Рабочий"], ["Суббота", "Выходной"], ["Воскресенье", "Выходной"]]
label days:
----if ((day_of_weak >= 1) and (day_of_weak <=7)):
--------"[dayer[day_of_weak - 1][1]]" # Отображение дня.
--------"[dayer[day_of_weak - 1][0]]" # Рабочий ли.
----else:
--------$ day_of_weak = 0
----$ day_of_weak +=1
----if (day_of_weak > 7):
--------$ day_of_weak = 1
----jump days
===3.2:

init:
----$ dayer = ["Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота", "Воскресенье"]
label days:
----if ((day_of_weak >= 1) and (day_of_weak <=7)):
--------"[dayer[day_of_weak - 1]]"
--------if ((day_of_weak == 6) or (day_of_weak == 7)):
------------"Выходной :("
--------else:
------------"Рабочий!"
----else:
--------$ day_of_weak = 0
----$ day_of_weak +=1
----if (day_of_weak > 7):
--------$ day_of_weak = 1
----jump days

===
Если не заработало, можно попробовать так:

label start:
----call days
----jump start

label days:
----if ((day_of_weak >= 1) and (day_of_weak <=5)):
--------"working"
----elif ((day_of_weak == 6) or (day_of_weak ==7)):
--------"Yeeah"
----else:
--------$ day_of_weak = 0
----$ day_of_weak +=1
----if (day_of_weak > 7):
--------$ day_of_weak = 1
----return
Сообщение отредактировал Tester - Вторник, 26/Июн/2018, 13:07
Тестировать, тестировать и ещё раз тестировать.

partizein

#5
Tester, запустил твой код 3.2:
init:
----$ dayer = ["Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота", "Воскресенье"]
label days:
----if ((day_of_weak >= 1) and (day_of_weak <=7)):
--------"[dayer[day_of_weak - 1]]"
--------if ((day_of_weak == 6) or (day_of_weak == 7)):
------------"Выходной :("
--------else:
------------"Рабочий!"
----else:
--------$ day_of_weak = 0
----$ day_of_weak +=1
----if (day_of_weak > 7):
--------$ day_of_weak = 1
----jump days
Ошибка:

While running game code:
File "game/script.rpy", line 38, in script
"[dayer[day_of_weak -= 1]]"
TypeError: list indices must be integers, not unicode

вообще нихера не понял,к чему здесь юникод?
Сообщение отредактировал partizein - Вторник, 26/Июн/2018, 17:58
Пользуйтесь ребята

Tester

#6
Во-первый, мат. операция внутри списка может не пройти, тогда придётся фиксить через $ renpy.say(). Аргумент там зависит от того, кто говорит и проч., так что настраивать то отдельно.

В-вторых. проблема вот в чём:
day_of_weak -= 1.
-= 1!!!
В варианте 3.2 сего нет, но в трейсе есть. Значит, неверно переписан код.
Таким образом, day_of_weak -= 1, где -= не является мат. операцией (= -- присваивание, -= возможно лишь при изменении значения переменной и его присваивании), благодаря динамической типизации строкой "day_of_weak -= 1" в Юникоде. Вот, откуда взялся юникод.

===

Можете попробовать исправить на "[dayer[day_of_weak - 1]]" в строке 38 (уже вне приведённого вами кода). Ежели не будет работать, попробуйте другой вариант: $ renpy.say(char, "[dayer[day_of_weak - 1]]". char -- Имя того, кто говорит. Можно вовсе не вводить.
Ежели и это не сработает, тогда попробуйте ещё варианты, допустим:
===
$ renpy.say(char, "[dayer[%d - 1]]" % day_of_weak)
===
$ renpy.say(char, "[dayer[%d]]" % (day_of_weak - 1))
===
$ AllahAkbar = day_of_weak - 1 #И дописать в ините как число.
$ renpy.say(char, [dayer[%d]] % AllahAkbar)
===
$ AllahBabah = dayer[day_of_weak - 1] # И прописать в ините как строку.
"[AllahBabah]"
=== Можете даже такое (но зачем?!)
$ AllahBabah = dayer[day_of_weak - 1] # И прописать в ините как строку.
$ renpy.say(char, "%s" % AllahBabah)
Сообщение отредактировал Tester - Вторник, 26/Июн/2018, 19:54
Тестировать, тестировать и ещё раз тестировать.

partizein

#7
Вообщем,насчет [dayer[day_of_weak - 1]] Тут вся проблема была в day_of_weak - 1 питон тупо не разрешает вставлять сюда что либо,кроме цифр,а зря было бы намного удобнее.
Долго мучился как бы сделать код покомпактнее д еще и со списком($ dayer = ["Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота", "Воскресенье"])
Долго думал.
Забил,помиксовал с официальным уроком


Получился такой код:

funny Пользуйтесь ребята love
Сообщение отредактировал partizein - Вторник, 26/Июн/2018, 22:19
Пользуйтесь ребята
Форум о визуальных новеллах » Для разработчиков » Ren'Py » Базовый календарь,ошибка (Не робит()
  • Страница 1 из 1
  • 1
Поиск: