Перейти к содержанию
Решена проблема отправки писем ×
АнимеФорум

Визуальные новеллы своими руками.


000

Рекомендуемые сообщения

Алекс, не дезинформируй народ ))
Дык, написал же - "на сколько я знаю"...;)

 

Опять же, "use" - это хорошо, но для некоторых "извращенных" целей может не подойти...

 

По поводу Notify'я - в качестве аргумента для действия Notify надо задать некий текст, поэтому кавычки можно (а в случае с переменными, содержащими текстовое значение, не нужно) ставить (так же как и для названия текстовой кнопки).

Notify(j.name)
Notify(str(j.mpcost))

 

Вот еще немного другой, чем у Романа, пример форматирования строки

textbutton j.name hovered Notify("Не хватает энергии!") action Notify("На этот прием не хватает " + str(j.mpcost) + " энергии")
Ссылка на комментарий
Поделиться на другие сайты

  • Ответов 1 тыс
  • Создана
  • Последний ответ

Топ авторов темы

Топ авторов темы

Изображения в теме

Такой вопрос — вот есть, предположим, класс:

class test:
   def __init__(self, name, strenght, agility):
       self.name = name
       self.str = strenght
       self.agi = agility

 

далее следующий код:

$Dima = test("Dima", 5, 2)
$Katya = test("Katya", 2, 5)

$Actors = [Dima, Katya]

 

и, теперь главное, функция сортировки (да-да, я знаю, что «пузырьки» отстой :lol: ) в зависимости от параметра для сравнения,

нечто в таком духе:

def bubble_sort (inlist, param):
   for i in range (0, len(inlist)-1):
       for j in range (0, len(inlist)-1-i):
           if inlist[j].param > inlist[j+1].param:
               inlist[j], inlist[j+1] = inlist[j+1], inlist[j]
   return inlist

 

ну и дальше нужен результат, примерно так:

$champions_str = bubble_sort(Actors, str)
$champions_agi = bubble_sort(Actors, agi)

 

Этот код не работает, т.к. не получается таким способом в функцию bubble_sort передать нужный параметр для сравнения (param).

Собственно, вопрос, как переработать функцию так, чтобы она понимала нужный параметр?

 

Есть, конечно, извращенный вариант:

def bubble_sort (inlist, param):
   if param == "str":
       for i in range (0, len(inlist)-1):
           for j in range (0, len(inlist)-1-i):
               if inlist[j].str > inlist[j+1].str:
                   inlist[j], inlist[j+1] = inlist[j+1], inlist[j]
       return inlist

и далее:

$champions_str = bubble_sort(Actors, "str")

,но это именно что извращение и дикие костыли. :unsure:

Изменено пользователем Vielstern (смотреть историю редактирования)
Ссылка на комментарий
Поделиться на другие сайты

Питон - сортировка по ключу.

http://habrahabr.ru/post/138535/

http://habrahabr.ru/post/138625/

 

Для того чтобы не плодить лишнего кода можно использовать "безымянные функции" (lambda)

http://www.py-my.ru/post/4bfb3c691d41c846bc000030

Ссылка на комментарий
Поделиться на другие сайты

  • 3 недели спустя...

Хм, столкнулся тут то ли с багом (новой версии? Версия 6.18.2.729, если что) RenPy, то ли я в чем-то туплю (что тоже вполне может быть :D).

 

В общем, такой код:

init:
$ spisok = []

label start:
"bla-bla-bla"
"место, где мы сохраняемся"
"bla-bla-bla"	
$spisok.append("a")	
"место, где мы загружаемся на предыдущее сохранение"

 

сохраняемся до добавления элемента в список, после добавления загружаемся на это сохранение и видим... что элемент все равно уже добавлен.

 

При этом, если убрать объявление списка из init вот так:

 

label start:
$ spisok = []
"bla-bla-bla"
"место, где мы сохраняемся"
"bla-bla-bla"	
$spisok.append("a")	
"место, где мы загружаемся на предыдущее сохранение"

,то после загрузки получаем пустой список, как и должно быть. То же самое с remove и т.д.

 

А вот если прописать код вот так:

init:
$ spisok = []

label start:
"bla-bla-bla"
"место, где мы сохраняемся"
"bla-bla-bla"	
$spisok = ["a"]	
"место, где мы загружаемся на предыдущее сохранение"

, то после загрузки видим пустой список, несмотря на объявления списка в init.

 

В общем, вопрос — это баг и надо просто подождать, пока его исправят, или я что-то не понимаю, и так и должно быть?

Ссылка на комментарий
Поделиться на другие сайты

Доброго всем. Решил настругать для своего удовольствия новеллу. Ren`py вроде податлив но в то же время информации на русском недостаточно. А от обильного набивания головы туториалами по питону пучит в зрачках. У меня возникло несколько вопросов. Рассчитываю на вас.

По аналогии с накоплением очков за ответы, я сделал наличные. ( Например 1. Мама дай на интернет +200 2. Пап дай на кино +300 и тд тп)

Вопрос №1. Как например подобным образом реализовать оплату. Просто сменить + на -?

$ money +=100 #дали

$ money -=100 #отжали

Вопрос №2. Как вывести коинсы чтобы они всегда в процессе игры были перед глазами?

Вопрос №3. Если не ошибаюсь в игре можно сколько угодно копилок с баллами создавать лишь бы экрана хватало. И деньги и полоса отношений и здоровье... Можно

$ *** = "начальное значение" вынести в init а не писать после label start ибо такая кашица начинается.

Вопрос №4. Как осуществить автоматическое напоминание в игре если скажем для оплаты квартиры необходима определённая сумма которой у меня в данный момент нет. И как только я её насобираю, возможно игрок сам забудет что его ща выселят а игра сама напомнит "у вас достаточно денег для оплаты комнаты". Было бы идеально пустить уведомление бегущей строкой.

Ссылка на комментарий
Поделиться на другие сайты

1. Да, так.

2. Можно сделать экран, который будет отображать значение переменной "деньги" (важно: в версии 6.9.3 экранов еще нет, они появились в версии 6.11)

screen money_scr:
   text "На кармане [money] деревянных." size 35 align (0.05, 0.05) 

label start:
   $ money = 0
   scene black
   show screen money_scr
   "Мама, дай на интернет"
   $ money +=200
   "Пасиба ^-^"
   "Надо оплатить и-нет..."
   $ money -=200
   "... а то танчики без меня уедут"

http://www.renpy.org...ml/screens.html

http://www.renpy.org...en_actions.html

 

3. а) количество переменных не ограничено, если есть желание показать огромное количество данных - можете поместить их внутрь вьюпорт'а - http://www.renpy.org...s.html#viewport,

б) значения переменным лучше всего присваивать в самом начале метки start - для их правильного сохранения - http://www.renpy.org...d_rollback.html

 

4. Попробуйте сделать экран, который в случае не оплаты комнаты будет показывать надпись о достаточности денег.

screen oplata_scr:
   textbutton "Оплатить" action If((oplata and (money>tax)), [setVariable("money", money-tax), SetVariable("oplata", False)], None) align (0.95, 0.05)
   text "На кармане [money] деревянных." size 35 align (0.05, 0.05) 
   if oplata:
       if money < tax:
           text "Пора платить, а денег не хватает..." size 35 align (0.05, 0.15)
       else:
           text "У вас достаточно денег для оплаты комнаты" size 35 align (0.05, 0.15)

label start:
   $ money = 0
   $ tax = 400
   $ oplata = False
   scene black
   show screen oplata_scr
   "А не пора ли платить за квартиру?"
   $ oplata = True
   "Ой, пора..."
   "Мама, дай на интернет"
   $ money +=200
   "Пап, дай на кино"
   $ money +=300
   "Пасиба ^-^"
   "???"

Бегущую строку и прочие эффекты сможете сделать при помощи ATL - http://www.renpy.org/doc/html/atl.html

Ссылка на комментарий
Поделиться на другие сайты

  • 4 недели спустя...

Привет. Столкнулся с проблемой, когда у копий экземпляра класса меняются одновременно атрибуты по не очень понятному мне алгоритму.

Вот такой примерно код:

 

label start:

python:
   from copy import copy
   class test_cl:
       def __init__ (self, var, list):
           self.var = var
           self.list = list


$tester_base = test_cl(10, ["a", "b"])
$tester1 = copy(tester_base)
$tester2 = copy(tester_base)

$tester1.var -= 5
"1 этап. Всё в порядке, меняется значение только у tester1"
$tester1.list.append("x")
"2 этап. \"x\" добавляется и в tester1, и в tester2, и в tester_base"    
$tester1.list = ["x"]
"3 этап. меняется list только у tester1"

return

объясните, плз, почему на втором этапе происходит такое и как этого избежать.

Изменено пользователем Vielstern (смотреть историю редактирования)
Ссылка на комментарий
Поделиться на другие сайты

Потому что остаются ссылки на старые структуры данных.

 

1) попробуй deepcopy

2) измени код:

import copy as cp
$tester1 = cp.copy(tester_base)

- хотя хз, мб это то же самое будет.

3) Сделай собственную функцию копирования которая гарантированно не оставляет ссылок на старые структуры данных (если у тебя классы небольшие то норм, почитай про атрибут __dict__ )

Ссылка на комментарий
Поделиться на другие сайты

  • 1 месяц спустя...
Привет. Как можно сделать, чтобы viewport при каждом обновлении текста (или другого контента) в нем автоматически перематывался вниз до последней строчки?
Ссылка на комментарий
Поделиться на другие сайты

  • 4 недели спустя...
Добрый день. Столкнулся с проблемой использования $ renpy.movie_cutscene, а именно: видео идет, но оно исчезает при нажатии левой кнопки мыши. Можно ли как-нибудь заставить его идти, не реагируя на нажатия игрока? Как параметр interact=False в $ renpy.say, только для видео.
Ссылка на комментарий
Поделиться на другие сайты

Привет всем.

Перелистал весь форум, но так и не нашел ответ на вопрос :с

Собсна, сам вопрос: можно ли менять картинку в главном меню в соответствии с реальным временем? Например, если в реальном времени (на компьютере/телефоне) показывает вечернее время, то картинка в главном меню одна; если дневное время, то другая?

Ссылка на комментарий
Поделиться на другие сайты

post-256524-0-04128500-1421053255_thumb.png

 

С трудом, но удалось это сделать в самой игре (см. скрин).

Но всё так же не знаю, как это вставить в главное меню :(

Ссылка на комментарий
Поделиться на другие сайты

Можно ли сделать, чтобы при первом запуске игры, перед splashscreen показывался экран (imagemap), предлагающий выбор режима отображения игры?

Если да, то как это правильно реализовать?

Ссылка на комментарий
Поделиться на другие сайты

Можно ли сделать, чтобы при первом запуске игры, перед splashscreen показывался экран (imagemap), предлагающий выбор режима отображения игры?

Если да, то как это правильно реализовать?

Почему не сделать данный выбор частью splashscreen'а?

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...

Важная информация