moonfork, спасибо за столь обширный комментарий, где вы указали мои недочеты. Данная новелла - мой первый опыт в этом деле. Возможно, я многого не учла. У меня есть планы по написанию новой новеллы, в которой обязательно будет учтены все возможные ошибки и недочеты, выявленные в данной работе.
Сообщение отредактировал Siel - Вторник, 27/Сен/2016, 19:06
# настройки игры: # максимальное значение шкалы max_points = 100 # название картинки (без нумерации кадров) img_name = "n" # первый и последний кадры анимации minN = 1 maxN = 14 # значение, на которое прибавляется шкала при клике # (т.е. сложность игры. 2.0 - очень сложно, 3.0 - легко) points_plus = 2.5
# переменные по умолчанию # при желании можно поменять и это значение, # чтобы точнее подобрать баланс игры points_minus = 1.0 # допустимое время между кликами или # скорость анимации (время между сменой кадров) ani_time = .1 # текущий кадр number = 0 # инкремент кадра (+1/-1) plus = 1 # шкала, которую нужно заполнить points = 0 # недавно был клик clicked = True # смена кадров анимации, если клик был недавно # и перерисовка экрана, чтобы увидеть изменения def NextFrameF(): global points, number, plus, clicked # если клик был недавно, то продолжаем анимацию, # иначе следующего кадра не будет. пауза if clicked: # следующий/предыдущий кадр number += plus # если за пределы числа кадров, то анимация в обратную сторону if number > maxN: number = maxN - 1 plus = -plus if number < minN: number = minN + 1 plus = -plus # уменьшение шкалы, если давно не было клика points -= points_minus if points < 0: points = 0 clicked = False # перерисовка экрана renpy.restart_interaction() # функция → action NextFrame = renpy.curry(NextFrameF)
# экран игры screen clicker: # это чтобы игра не продолжилась по клику мышкой modal True # сбрасываем настройки игры при появлении экрана on "show" action [SetVariable("number", 0), SetVariable("plus", 1), SetVariable("clicked", True)] # меняем кадр, если клик был недавно, # и проверяем на проигрыш timer ani_time repeat True action [NextFrame(), If(points <= 0, true=Return(False), false=NullAction())] # картинка с анимацией add img_name + str(number) # отображаем невидимую кнопку для кликов # по нажатию прибавляем шкалу и устанавливаем флаг клика button: text _(" ") xfill True yfill True background "#00000001" # если шкала полная, то конец игры, победа action [SetVariable("points", points + points_plus), SetVariable("clicked", True), If(points >= max_points, true=Return(True), false=NullAction())] # альтернативное нажатие с клавиатуры key "K_SPACE" action [SetVariable("points", points + points_plus), SetVariable("clicked", True), If(points >= max_points, true=Return(True), false=NullAction())] # индикатор vbar value StaticValue(points, max_points): align (0, 0) # положение на экране maximum (150, 150) # размеры left_bar "heartempty" # пустое сердце right_bar "heart" # полное сердце thumb None # тут можно поставить разделитель thumb_shadow None # и тень
label start: # всякие ненужные штуки для оформления scene expression (img_name + "0") pause .5 show expression Text("Приготовились!") at truecenter as txt with dissolve pause hide txt # начать с 10 очков, чтобы не проиграть сразу же $ points = 10
# дальше снова пошли всякие ненужные вещи: # показываем результаты игры if _return: # перематываем анимацию до последнего кадра while number < maxN: $ number += 1 scene expression (img_name + str(number)) $ renpy.pause(ani_time, hard=True) scene expression (img_name + str(maxN)) with flash show expression Text("Победа!") at truecenter as txt else: # перематываем анимацию до первого кадра while number > 1: $ number -= 1 scene expression (img_name + str(number)) $ renpy.pause(ani_time, hard=True) scene expression (img_name + "0") with flash2 show expression Text("Проигрыш.") at truecenter as txt # жесткая пауза на случай, если игрок всё еще лупит по кнопке $ renpy.pause(1.0, hard=True) hide txt with dissolve return
Ну, раз такая пьянка, то и я добавлю несколько слов.
Полностью согласна с комментариями выше, но кое-что добавить можно. А именно про судей. Они постоянно говорили, что почти все новеллы плохие: ужасный сценарий, рисовка и т.д. А вы сами в своей жизни хоть что-то сделали? Создать собственную игру это уже невероятно круто, а успеть сделать ее за несколько месяцев полностью с нуля можно считать героизмом. Но, вместо того что бы похвалить участвующих, вы плюете им, говоря, что их работы просто отвратительны и даже толком не объяснив, в чем причина. Ну ладно на стриме, но некоторые судьи поленились написать хотя бы несколько слов о новеллах в файле с таблицей оценивания. Ну действительно, не уж то так сложно это сделать? Плюс, если учитывать, что оценивание новелл длилось гораздо дольше их создания, можно сделать вывод, что судьям в принципе плевать на участников и их работы. Да, не все были идеальны и хороши, но никто не говорит, что их делали профессионалы. Многие в принципе никогда не занимались созданием новелл и этот конкурс стал стимулом для того, что бы работать над собственным проектом. А потом жюри удивляется: почему никто не делает новеллы, почему никто не продолжает? А кому после такого захочется хоть что-то делать? У меня на этом все. Всего хорошего.
LaCost, хalign, уalign и хpos, уpos - координаты для кнопок (в основном). Когда ты делаешь свои кнопки через imagebutton нужно указывать их месторасположение.
Код
imagebutton auto "путь к изображению/название_%s.формат" xpos 260 ypos 510 action ShowMenu("название меню")
Цвет текста или цвет имени можно вводить так:
Код
$ p = Character(u"Персонаж", color="#51ea63") - цвет имени; $ p = Character(u"Персонаж", what_color="#51ea63") - цвет текста.
Сообщение отредактировал Siel - Понедельник, 27/Мар/2017, 11:21
GREY, может это поможет: попробуйте написать код через переменные: пока количество переменных не достигнет пяти (к примеру), то игрок будет возвращаться обратно и обратно пять раз. Вот пример такого кода: