Forum.iFiction.Ru

iFiction.Ru · ifHub · FAQ · IFWiki · QSP · URQ · INSTEAD · AXMA

форум об interactive fiction, текстовых приключенческих играх и всём таком...

Вы не зашли.

0    0    #1
24.08.2014 01:34

Sasha Makovsky
Участник (+2)
Зарегистрирован: 23.08.2014
Сообщений: 7

Разработка игры «Похождения юного барда»

Привет друзья. Знаком с AXMA несколько дней, пытаюсь склепать свою первую историю и вот незадача,
я не совсем понимаю, как работают обновления. Почему-то нажимая на кнопку Ждать первый раз время не перемещается на 1 час
вперёд как запланировано, а действие Искать не отнимает час, но работает как обновление, если после этого нажать
на неё. Какое-то странное опоздание, как сделать так, чтобы при нажатии Ждать, час сразу же обновлялся?

Код:

:: StoryTitle

Прилючения барда.

:: Смена погоды



:: Start

# переменные окружения

<<set $time = 12>>

<<set $плюсЧас = 0>>

<<set $day = 1>>

<<set $weather = 'чистое небо'>>

<<set $location = 'Таверна'>>

<<set $action= 0>>

<<set $streetTemp = -1>>

<<br>><<br>>

===[[Игра|Игра]]===

:: Таверна

Таверна была просторна и уютна.

За окном <<print $weather>>.

:: Действия

<<if $action eq 1>>

    <<set $плюсЧас = 1>>

    Прошёл один час.

<<elseif $action eq 2>>

    <<set $плюсЧас = 0>>

    Вы ничего не нашли.

<<elseif $action eq 3>>

    <<set $плюсЧас = 1>>

    Игра на лютне удалась.

<<endif>>

<<if $action neq 0>>

<<display 'Смена времени'>>

----

<<set $action = 0>>

<<endif>>

:: Смена времени

<<loop $плюсЧас>>

    <<set $time++>>

    <<if $time >= 23>>

        <<set $time = 0>>

        <<set $day++>>

        <<display 'Смена погоды'>>

    <<endif>>

<<endloop>>

<<set $плюсЧас = 0>>

:: Игра

<<clrscr>>

<<display 'Герой'>>

<<display 'Действия'>>

<<display '$location'>>

:: Герой

===[[Ждать|Игра {$action = 1}]] | [[Искать|Игра {$action = 2}]] | [[Играть на лютне|Игра {$action = 3}]]===

===Время: <<print $time>> | День: <<print $day>>===

----

Отредактировано Sasha Makovsky (24.08.2014 02:42)

Неактивен

0    0    #2
24.08.2014 01:41

Sasha Makovsky
Участник (+2)
Зарегистрирован: 23.08.2014
Сообщений: 7

Re: Разработка игры «Похождения юного барда»

Как у меня работает игра?!
Ядро параграф - Игра

отсюда запускаются другие параграфы

Код:

<<clrscr>>
<<display 'Герой'>>
<<display 'Действия'>>
<<display '$location'>>

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

в параграфе Действия происходят обновления после нажатия на кнопки действия в параграфе Герой

дальше от Действия есть переход при изменениях в параграф Смена времени, тут и должно поменяться время,
но оно работает с опозданием

Неактивен

1    0    #3
24.08.2014 09:15

Aruny
Участник (+2)
Зарегистрирован: 30.07.2014
Сообщений: 18

Re: Разработка игры «Похождения юного барда»

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


Варианты исправления:
вариант 1.

Совсем убрать переменную $плюсЧас, весь файл будет вида:

Код:

128[::]0[::]0
:: StoryTitle[::]8-8-3
Приключения барда.

:: Смена погоды[::]344-8-1

:: Таверна[::]520-8-6

Таверна была просторна и уютна.
За окном <<print $weather>>.

:: Смена времени[::]160-8-0
 <<if $time >= 23>>
      <<set $time = 0>>
      <<set $day++>>
      <<display 'Смена погоды'>>
  <<endif>>
<<set $плюсЧас = 0>>


:: Start[::]672-8-1
# переменные окружения
<<set $time = 12>>
<<set $day = 1>>
<<set $weather = 'чистое небо'>>
<<set $location = 'Таверна'>>
<<set $action= 0>>
<<set $streetTemp = -1>>
<<br>><<br>>

===[[Игра|Игра]]===

:: Действия[::]8-176-0
<<if $action eq 1>>
    Прошёл один час.
<<elseif $action eq 2>>
    Вы ничего не нашли.
<<elseif $action eq 3>>
    Игра на лютне удалась.
<<endif>>

<<if $action neq 0>>
<<display 'Смена времени'>>
----
<<set $action = 0>>
<<endif>>

:: Игра[::]160-176-5
<<clrscr>>
<<display 'Герой'>>
<<display 'Действия'>>
<<display '$location'>>


:: Герой[::]312-176-5
===[[Ждать|Игра {$action = 1}{$time = $time + 1}]] | [[Искать|Игра {$action = 2}{$time = $time + 0}]] | [[Играть на лютне|Игра {$action = 3}{$time = $time + 1}]]===
===Время: <<print $time>> | День: <<print $day>>===
---

Вариант 2, добавить ещё один параграф для пересчёта времени до вывода на экран:

Код:

128[::]0[::]0
:: StoryTitle[::]8-8-3
Приключения барда.


:: Таверна[::]520-8-6

Таверна была просторна и уютна.
За окном <<print $weather>>.


:: Start[::]672-8-1

# переменные окружения
<<set $time = 12>>
<<set $плюсЧас = 0>>
<<set $day = 1>>
<<set $weather = 'чистое небо'>>
<<set $location = 'Таверна'>>
<<set $action= 0>>
<<set $streetTemp = -1>>
<<br>><<br>>
===[[Игра|Игра]]===


:: Смена погоды[::]344-8-1
день закончился


:: Герой[::]312-176-5
===[[Ждать|Игра {$action = 1}]] | [[Искать|Игра {$action = 2}]] | [[Играть на лютне|Игра {$action = 3}]]===
===Время: <<print $time>> | День: <<print $day>>===
----


:: Игра[::]160-176-5
<<clrscr>>
<<display 'пересчёт хода'>>
<<display 'смена времени'>>

<<display 'Герой'>>
<<display 'Действия'>>
<<display '$location'>>
<<if $сменаДня == true>>
        <<display 'Смена погоды'>>
<<endif>>
<<set $сменаДня = false>>


:: пересчёт хода[::]160-328-0
<<if $action eq 1>>
    <<set $плюсЧас = 1>>

<<elseif $action eq 2>>
    <<set $плюсЧас = 0>>

<<elseif $action eq 3>>
    <<set $плюсЧас = 1>>

<<endif>>


:: Действия[::]8-176-0
<<if $action eq 1>>
    Прошёл один час.

<<elseif $action eq 2>>
    Вы ничего не нашли.

<<elseif $action eq 3>>
    Игра на лютне удалась.

<<endif>>

<<if $action neq 0>>
    <<display 'Смена времени'>>
----
<<endif>>
<<set $action = 0>>


:: Смена времени[::]160-8-0
<<loop $плюсЧас>>
    <<set $time++>>
    <<if $time > 23>>
        <<set $time = 0>>
        <<set $day++>>
        <<set $сменаДня = true>>
    <<endif>>
<<endloop>>
<<set $плюсЧас = 0>>

Кстати, у вас опечатка в слове "приключения" в названии игры ;-)
И при пересчёте времени надо проверку не $time >= 23, а либо $time >= 24, либо $time > 23, иначе у вас новый день начинается в 23 часа.

Отредактировано Aruny (24.08.2014 09:52)

Неактивен

0    0    #4
24.08.2014 22:26

Sasha Makovsky
Участник (+2)
Зарегистрирован: 23.08.2014
Сообщений: 7

Re: Разработка игры «Похождения юного барда»

Aruny Спасибо большое!
вот что у меня потихой получается уже, это мой первый опыт:

Код:

:: StorySubtitle

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

Единственное чему он научился - игре на лютне, поэтому пока временно застрял в местной таверне, музицируя и развлекая гостей, чтобы заработать небольшое состояние и на эти деньги вернуться  домой к родителям

:: Смена времени

<<loop $плюсЧас>>

    <<display 'Состояние героя'>>

    <<set $time++>>

    <<if $time == 12>>

        <<display 'Смена погоды'>>

    <<endif>>

    <<if $time > 23>>

        <<set $time = 0>>

        <<set $day++>>

        <<display 'Смена погоды'>>

    <<endif>>

    #<<break>>

    #<<continue>>

<<endloop>>

<<set $плюсЧас = 0>>

:: StoryTitle

Похождения юного барда.

:: Герой

<<if $health eq 10>>

    <<set $здоровье = 'лучшее'>>

<<elseif $health >= 8>>

    <<set $здоровье = 'хорошее'>>

<<elseif $health >= 6>>

    <<set $здоровье = 'неплохое'>>

<<elseif $health eq 5>>

    <<set $здоровье = 'среднее'>>

<<elseif $health eq 4>>

    <<set $здоровье = 'ранен'>>

<<elseif $health eq 3>>

    <<set $здоровье = 'тяжело'>>

<<elseif $health eq 2>>

    <<set $здоровье = 'очень тяжело'>>

<<elseif $health eq 1>>

    <<set $здоровье = 'едва живой'>>

<<else>>

    <<set $здоровье = 'мёртв'>>

<<endif>>

<<if $food >= 10>>

    <<set $еда = 'наелся'>>

<<elseif $food >= 6>>

    <<set $еда = 'сытый'>>

<<elseif $food >= 4>>

    <<set $еда = 'лёгкий голод'>>

<<elseif $food >= 2>>

    <<set $еда = 'голод'>>

<<elseif $food < 2>>

    <<set $еда = 'тяжкий голод'>>

<<endif>>

<<if $sleep <= 0>>

    <<set $сон= 'свежее'>>

<<elseif $sleep <= 2>>

    <<set $сон= 'бодрое'>>

<<elseif $sleep <= 5>>

    <<set $сон= 'хорошее'>>

<<elseif $sleep <= 7>>

    <<set $сон= 'неплохое'>>

<<elseif $sleep <= 10>>

    <<set $сон= 'вполне'>>

<<elseif $sleep <= 14>>

    <<set $сон= 'уставшее'>>

<<elseif $sleep <= 18>>

    <<set $сон= 'сонное'>>

<<elseif $sleep <= 22>>

    <<set $сон= 'очень сонное'>>

<<elseif $sleep <= 30>>

    <<set $сон= 'падает с ног'>>

<<endif>>

<<if $cold <= -20>>

    <<set $холод= 'окоченел'>>

<<elseif $cold <= -15>>

    <<set $холод= 'оледенел'>>

<<elseif $cold <= -10>>

    <<set $холод= 'замерз'>>

<<elseif $cold <= -5>>

    <<set $холод= 'холодно'>>

<<elseif $cold <= 0>>

    <<set $холод= 'прохладно'>>

<<elseif $cold > 0>>

    <<set $холод= 'тепло'>>

<<endif>>

<<if $time == 0>>

    <<set $время = 'полночь'>>

<<elseif $time <= 5>>

    <<set $время = 'ночь'>>

<<elseif $time <= 6>>

    <<set $время = 'раннее утро'>>

<<elseif $time <= 11>>

    <<set $время = 'утро'>>

<<elseif $time <= 12>>

    <<set $время = 'полдень'>>

<<elseif $time <= 16>>

    <<set $время = 'день'>>

<<elseif $time <= 20>>

    <<set $время = 'вечер'>>

<<elseif $time <= 24>>

    <<set $время = 'поздний вечер'>>

<<endif>>

===[[Ждать|Действия{$action = 1}]] | [[Искать|Действия{$action = 2}]] | [[Играть на лютне|Действия{$action = 3}]]===

===Золото: <<print $gold>> | Время: <<print $время >>===

===Здоровье: <<print $здоровье>> | Голод: <<print $еда>> | Состояние: <<print $сон>> | Тело: <<print $холод>>===

----

:: Смена погоды

<<random $объект = 9>>

<<if $объект == 9>>

    <<set $weather = 'ледяной ураган'>>

    <<set $streetTemp = -5>>

<<elseif $объект == 8>>

    <<set $weather = 'непроглядная метель'>>

    <<set $streetTemp = -4>>

<<elseif $объект == 7>>

    <<set $weather = 'сильный снегопад'>>

    <<set $streetTemp = -3>>

<<elseif $объект == 6>>

    <<set $weather = 'завывает сильный ветер'>>

    <<set $streetTemp = -3>>

<<elseif $объект == 5>>

    <<set $weather = 'дует ветер'>>

    <<set $streetTemp = -2>>

<<elseif $объект == 4>>

    <<set $weather = 'лёгкий ветерок'>>

    <<set $streetTemp = -1>>

<<elseif $объект == 3>>

    <<set $weather = 'чистое небо'>>

    <<set $streetTemp = -1>>

<<elseif $объект == 2>>

    <<set $weather = 'пасмурно'>>

    <<set $streetTemp = -1>>

<<elseif $объект == 1>>

    <<set $weather = 'мягкий снежок'>>

    <<set $streetTemp = -1>>

<<else>>

    <<set $weather = 'спокойно'>>

    <<set $streetTemp = -1>>

<<endif>>

:: Игра

<<display 'Герой'>>

===<<print $location>>===

----

:: Действия

<<if $action eq 1>>

    <<set $плюсЧас = 1>>

    ===[[Прошёл один час.|$location]]===

<<elseif $action eq 2>>

    <<set $плюсЧас = 1>>

    ===[[Вы ничего не нашли.|$location]]===

<<elseif $action eq 3>>

    <<set $плюсЧас = 2>>

    <<random $объект = 100>>

    <<if $объект >= 50>>

        ===[[Вы сыграли хорошо.|$location]]===

    <<else>>

        ===[[Вы плохо сыграли на лютне.|$location]]===

    <<endif>>

<<endif>>

<<set $action = 0>>

<<display 'Смена времени'>>

:: Еда в таверне

Вы хорошо поели, голод отступил!

<<set $gold = $gold - $price>>

<<set $health = 10>>

<<set $food = 10>>

<<set $плюсЧас = 1>>

<<display 'Смена времени'>>

===[[Закончить трапезу|Таверна]]===

:: Пить в таверне

Вы нажрались в хлам!

<<set $gold = $gold - $price>>

<<set $плюсЧас = 1>>

<<display 'Смена времени'>>

===[[Закончить попойку|Таверна]]===

:: Состояние героя

# температура в комнате или на улице

<<if $Temp == 'n/a'>>

    <<set $объект = $streetTemp>>

<<else>>

    <<set $объект = $Temp>>

<<endif>>

<<random $объект2 = 1>>

<<set $cold = $cold + $объект + $объект2>>

<<if $cold > 20>>

    <<set $cold = 20>>

<<elseif $cold < -20>>

    <<set $cold = -20>>

<<endif>>

# голод

<<set $food = $food - 1>>

<<if $food > 75>>

    <<set $food = 75>>

<<elseif $food < -5>>

    <<set $food = -5>>

<<endif>>

# усталость

<<set $sleep = $sleep + 1>>

# уменьшения здоровья

<<if $cold <= -20>>

    <<set $health = $health - 1>>

    Жуткий мороз, нужно найти тепло срочно!

<<endif>>

<<if $food < 0 >>

    <<if $sleep > 25>>

        <<if $health > 5 >>

            Вы невероятно сильно устали и очень голодны.

            <<set $health = $health - 1>>

        <<endif>>

    <<endif>>

<<endif>>

:: Start

# Статусы героя

<<set $gold = 100>>

<<set $health = 10>>

<<set $food = 10>>

<<set $sleep = 0>>

<<set $cold = 0>>

<<set $fame = 0>>

<<set $magic = 0>>

# переменные окружения

<<set $time = 12>>

<<set $плюсЧас = 0>>

<<set $day = 1>>

<<set $Temp = 0>>

<<set $weather = 'чистое небо'>>

<<set $location = 'Таверна'>>

<<set $streetTemp = -1>>

# Важные переменные игры

<<set $buy = 0>>

<<set $action = 0>>

<<set $update = 0>>

<<set $mainQuest = 0>>

<<br>><<br>>

===[[Игра|Таверна]]===

:: Сон в таверне

Вы хорошо выспались! Прошло 7 часов.

<<set $gold = $gold - $price>>

<<set $health = 10>>

<<set $sleep = 0>>

<<set $плюсЧас = 7>>

<<display 'Смена времени'>>

===[[Вернуться в таверну|Таверна]]===

:: Услуги

<<if $buy == 1>>

    <<set $цена = 10>>

    <<if $gold >= $цена>>

        ===[[Вы можете поспать за 10 золотых монет.|Сон в таверне {$price = $цена}]]===

    <<else>>

        ===У вас нет 10 золотых монет для того, чтобы поспать в комнате!===

    <<endif>>

<<elseif $buy == 2>>

    <<set $цена = 5>>

    <<if $gold >= $цена>>

        ===[[Купить еды за 5 золотых монет.|Еда в таверне {$price = $цена}]]===

    <<else>>

        ===У вас нет 5 золотых монет для того, чтобы купить еды!===

    <<endif>>

    

<<elseif $buy == 3>>

    <<set $цена = 15>>

    <<if $gold >= $цена>>

        ===[[Купить крепкой выпивки за 15 золотых монет.|Пить в таверне {$price = $цена}]]===

    <<else>>

        ===У вас нет 15 золотых монет для того, чтобы напиться!===

    <<endif>>

<<endif>>

:: Таверна

<<set $location = 'Таверна'>>

<<set $Temp = 10>>

<<display 'Игра'>>

Таверна была просторна и уютна. Даже в самую лютую погоду здесь можно было укрыться от вьюги и холода, и погреться у камина. За стойкой стоял [[трактирщик|трактирщик]] и протирал гигантские пивные кружки.

Дверь [[на улицу|Улица]] была сделана из крепкого резного дерева.

За окном <<print $weather>>.

:: Улица

<<set $location = 'Улица'>>

<<set $Temp = 'n/a'>>

<<display 'Игра'>>

На небольшой деревенской улочке расположилась [[таверна|Таверна]], чуть дальше стояли крепкие дома местных жителей. А над ними величественно возвышалась башня академии чароплётов.

Сейчас <<print $weather>>

:: Трактирщик

===Трактирщик===

----

- Чего желаете, господин? [[Поспать|Трактирщик {$buy = 1}]], [[поесть|Трактирщик {$buy = 2}]], али может вы ценитель [[крепкой выпивки|Трактирщик {$buy = 3}]]? - обратился к вам трактирщик.

<<display 'Услуги'>>

<<set $buy = 0>>

[[Уйти...|Таверна]]

Неактивен

0    0    #5
25.08.2014 13:22

Morych
Модератор (+67, -8)
Откуда: Гродно
Зарегистрирован: 05.07.2012
Сообщений: 523
Вебсайт

Re: Разработка игры «Похождения юного барда»

Очень хорошо для первого опыта smile Много параметров, смена дня и ночи, погода. Теперь нужно добавить больше возможностей. Предлагаю, к примеру, сделать несколько таверн и ввести в таверны публику. В зависимости от того, какие люди набились в таверну, гг нужно будет исполнять разные песни. Угадал с песней - получил одобрение публики и денег заработал или еду-выпивку. Не угадал - поколотили и вышвырнули на улицу. Результат игры на лютне не должен целиком зависеть от рандома. Чем чаще бард играет песню из своего репертуара, тем лучше она у него получается. Сытый бард играет гораздо лучше голодного и замёрзшего. Разные песни могут требовать разный уровень алкогольного опьянения... можно много чего ещё придумать smile

И ещё в названии истории точка не ставится.

Неактивен

0    0    #6
25.08.2014 16:47

Sasha Makovsky
Участник (+2)
Зарегистрирован: 23.08.2014
Сообщений: 7

Re: Разработка игры «Похождения юного барда»

Morych написал:

Очень хорошо для первого опыта smile Много параметров, смена дня и ночи, погода. Теперь нужно добавить больше возможностей. Предлагаю, к примеру, сделать несколько таверн и ввести в таверны публику. В зависимости от того, какие люди набились в таверну, гг нужно будет исполнять разные песни. Угадал с песней - получил одобрение публики и денег заработал или еду-выпивку. Не угадал - поколотили и вышвырнули на улицу. Результат игры на лютне не должен целиком зависеть от рандома. Чем чаще бард играет песню из своего репертуара, тем лучше она у него получается. Сытый бард играет гораздо лучше голодного и замёрзшего. Разные песни могут требовать разный уровень алкогольного опьянения... можно много чего ещё придумать smile

И ещё в названии истории точка не ставится.

Вот это шикарная идея! Спасибо большое, Morych! Я конечно, в первый раз столько всего не осилю! Но идея с песнями шикарная,
попробую, как смогу реализовать!)

Отредактировано Sasha Makovsky (25.08.2014 16:51)

Неактивен

0    0    #7
25.08.2014 17:49

Morych
Модератор (+67, -8)
Откуда: Гродно
Зарегистрирован: 05.07.2012
Сообщений: 523
Вебсайт

Re: Разработка игры «Похождения юного барда»

Постепенно всё можно осилить. А в случае чего поможем советом и кодом smile В продолжение идеи с песнями. Для начала у барда есть небольшой список доступных песен (пара штук). У каждой песни есть название и краткое описание, о чём там поётся, а также умение барда эту песню исполнять. Для хранения номеров известных песен можно использовать массив. В процессе игры список известных песен может увеличиваться (подслушал у другого барда, вычитал в книге, кто-то научил за умеренную плату). Более высокоуровненвые песни могут требовать большего мастерства владения лютней, более сильного голоса, но они и больше нравятся публике.

P. S. Поменял название темы.

Неактивен

Powered by PunBB
© copyright 2001–2024 iFiction.Ru