воскресенье, 24 марта 2013 г.

Как создавать игры в QSP

Что бы создать что то не очень сложное, не обязательно быть программистом. Попробую в этой статье объяснить основные моменты.
1) Вам понадобится конструктор. http://qsp.su
Это сайт разрабов, там есть все что надо.
Или я залил на файлообменник конструктор.
http://www.fayloobmennik.net/2728179

2) Создаете новую игру. Создаете стартовую локацию, она должна быть в самом верху. Пишите там код. Весь код записываете в верхнее правое окошко с названием "Выполнить при посещении." Создание локаций F7 или зеленый крестик в меню.

KILLALL
USEHTML=1
SHOWSTAT 1
SHOWOBJS 1
$ONGLOAD='loadg'
$ONGSAVE='saveg'
$ONNEWLOC  = 'LOCA'
$onobjsel = 'onobjsel'
showinput 0
$counter = 'counter'
$USERCOM='ОбработкаВвода'
debug=1

потом создаете локации
loadg
saveg
LOCA
onobjsel
counter
ОбработкаВвода

Вот вход в игру готов.
Создадим квартиру с двумя комнатами. Делаем две локации, назовем к примеру bedroom и sitroom

В стартовой локации пишем

act 'ИГРАТЬ':gt'bedroom'


!В локации bedroom пишем такой код.
'<center><B>Спальная</B></center>'
'Ваша спальная комната.'
act 'Идти в гостинную':gt'sitroom'

!В локации sitroom пишем такой код.
'<center><B>Гостинная</B></center>'
'Это гостинная комната, тут стоит диван, телевизор и стол.'
act 'Идти в спальную':gt'bedroom'

Вуаля. У вас есть игра с двумя комнатами между которыми можно перемещатся.

Если кому то будет интересно буду и дальше учить как из кирпичиков создать игру.

Если хотите что бы у вас отображалось и считалось время. То в локации комнат вставте такой код.
minut = minut + 1
clr
gs'stat'

Создайте новую локацию stat
и в нее вставте следующий код.

if minut >= 60:
:loopmin
set hour = hour + 1
set minut = minut - 60
     if minut >= 60:
     jump 'loopmin'
     end
end

if hour >= 24:
:loop
set day = day + 1
set week = week + 1
set hour = hour - 24
     if hour >= 24:
     jump 'loop'
     end
end

if minut < 10:set $nilmin = '0'
if minut >= 10:set $nilmin = ''
pl'Время <B><<hour>></B> часов <B><<$nilmin>><<minut>></B> минут'


Теперь у вас будет считатся и показыватся в окне дополнительного описания время. Стартовое время не заданно поэтому отсчет пойдет с 0 часов с 0 минут. Из подобных кирпичей можно собрать полноценную игру даже не задумываясь что делаешь.
Поймите, не надо сидеть вычесывать методы из головы, все уже есть. Берите кирпичи и сторойте, я подскажу. 

Характеристики ГГ. Это вещь очень тонкая и щекотливая. Нельзя просто вставить какой нибудь параметр просто так. Параметры должны быть связаны между собой. И они должны заставлять игрока удовлетворять потребности, а не сидеть на месте.
Например здоровье, сон и голод. Если сон равен нулю то будет падать здоровье, если голод равен нулю то опять же будет падать здоровье. Если здоровье дойдет до нуля то конец игры.
Сделать все это не сложно.

Перепишите этот код в локации stat
if hour >= 24:
:loop
set day = day + 1
set week = week + 1
set hour = hour - 24
     if hour >= 24:
     jump 'loop'
     end
end

следующим образом.
if hour >= 24:
:loop
set day = day + 1
set week = week + 1
set hour = hour - 24
son = son - 1
golod = golod - 1
     if hour >= 24:
     jump 'loop'
     end
end
if son <0:set health = health - 1&set son = 0
if golod <0:set health = health - 1&set golod = 0

if health <= 0:
gt'GAMEOVER'
exit
end

!И в конце добавте строчки
pl'Здоровье <<health>>'
pl'Сон <<son>>'
pl'Голод <<golod>>'

Создайте локацию GAMEOVER в которой в скобочках напишите 'Кибздец котенку, вы щелнули ластами и вашу тушку закопали.'

Но теперь если вы войдете в игры вы сразу же откините копыта. Поэтому в начальной локации добавим код health = 100

Что бы повысить сон создайте кровать в локации bedroom вставив этот код.
'В небольшой комнате стоит ваша двухспальная <a href="exec:GT ''bed''">кровать</a>.'

Создайте саму кровать. Это будет локация bed

Вставте туда этот код.
clr
gs'stat'
'Вы лежите на кровати.'
     if son > 10:
     'Спать почему то не хочется.'
     end
     if son <= 10:
         act 'Раздется и лечь спать':gt'bed2'
     end
     act 'Встать с кровати':gt'bedroom'

Создайте локацию bed2 и вставте туда этот код.
set health = health + 5
'Вы спите и вам ничего не снится.'
:loopson
set minut = minut + 1
set stime = stime + 1
if stime = 60:set stime = 0&set son = son + 3
clr
gs'stat'
if son > 23:
'Вы выспались'
     act 'Встать с кровати':gt'bedroom'
else
jump 'loopson'
end

С голодом все гораздо проще.
Вставте эту кнопку в локацию sitroom
     act 'Есть (15 мин)':
     cla
     set minut = minut + 15
          if golod >= 20:
          'Вы объелись и глядеть не можете на еду'
          end
          if golod < 20:
           set golod = golod + 20
           'Вы положили щей в тарелку и лихо их навернули.'
           end
     act 'Встать из за стола и вымыть посуду':gt'sitroom'
     end

Пожалуйста, голод и сон готовы.
















26 комментариев:

  1. Спасибо за урок. Ждём следующий))

    ОтветитьУдалить
    Ответы
    1. Скажите что интересует. И я дам киричики для постройки. Все на базе ЭТО и Завоевания, принцип у них одинаковый, разобраться в них будет не сложно. Я сам делаю игры по кирпичам. Только кирпичи сам собираю, а тут готовые решения выкладываю.

      Удалить
  2. ну, если уж до конца голосования ещё неделя.. - будем проводить с пользой )
    Две комнаты у нас есть. Но нет ГГ!
    - создаём - ? с парой характеристик - сон и голод..

    ОтветитьУдалить
    Ответы
    1. Легко. Только вот что есть сон? И что есть голод? На что они влияют и что будет если сон и голод по нулям?

      Удалить
    2. аха. - как-то так.. пока )

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

      Удалить
    3. И в чем проблема? В локации стат пишите if hour = 11 and holodilnik = 0:set hokodilnik = 1&'в 11 часов раздался звонок в дверь. - это привезли холодильник, который мы заказали в интернет-магазине.
      грузчики поставят холодильник в комнату и возьмут деньги за покупку.
      в холодильнике будет храниться еда на ххх дней'
      В локации sitroom вставить код
      if hokodilnik = 1:'холодильник с запасом еды на ххх дней'

      Удалить
  3. Отлично расписано, может тоже что нибудь текстовое написать.
    Спасибо большое за "кирпичики".

    ОтветитьУдалить
  4. Небольшую базу данных на нем можно написать? Что по поводу лицензии на использование?

    ОтветитьУдалить
    Ответы
    1. Базы данных можно создавать массивами, я не умею пользоватся ими таким образом, делаю по другому. Просто храню данные в текстовых или числовых переменных. Лицензию даже не читал, но она есть на сайте разрабов. В посту самая первая ссылка.

      Удалить
  5. Это все понятно - уже по ходу ковыряния в игре разобралась и со временем и с голодом и с предметами(тоже, кстати, отдельная песня). Но пожалуйста, подскажи по поводу массивов, а то уже столько раз непонятно из-за чего программки работают не так как хочется или, что бывает гораздо чаще - приходится лицезреть "белый экран". Методом научного тыка (путем многократного переделывания кода) выяснилось, что трабла именно в массивах, переходах на них и переходов из них, (по началу частенько забывала ставить $ перед args, если значение строчное (тоже надо бы уточнить для начинающих) - от сюда было немало багов, но многие задумки все ещё работают некорректно) а потому хотелось бы услышать советы и пояснения маэтро.

    ОтветитьУдалить
    Ответы
    1. У меня тоже как раз с ними проблемы. Хотел сегодня задать, Этот вопрос, но ты опередила))

      Удалить
  6. Можно вопрос, а почему именно QSP?
    Только поймите правильно, я не хочу разводить холливар о функционале и удобстве движков, или в чем-то вас убеждать. Просто сам я начал писать игрушку и выбрал Ren’Py, как простой, но гибкий (при желании, можно что угодно на Python сделать) и быстрый. Вот мне и интересно теперь, ваш выбор - это просто дело вкуса, или я что-то упускаю.

    ОтветитьУдалить
    Ответы
    1. Почему, потому что он самый простой из всего что я видел, тот же инстед на питоне написанный по сравнению с куспом китайская грамота.

      Удалить
    2. Спасибо, понял. ) Удобство - вполне весомая причина.

      Удалить
  7. Вау. А вот это интересно. Реально. Только есть такой вопрос, что нужно сделать, чтобы посмотреть "исходник" завоевания (ну или ЭТО, все равно). Или они являются чем-то отдельным и их нужно отдельно передавать? Если так, то буду признателен. Конечно если ты не держишь их в страшной тайне).

    ОтветитьУдалить
    Ответы
    1. Качай QGen:
      http://qsp.su/index.php?option=com_content&task=view&id=46&Itemid=56
      И запускай через него игру (он на русском, так что проблем быть не должно) - увидишь весь код, как он есть. Паролей нет, все открыто - ползай хоть до посинения.

      Удалить
  8. А как сделать, чтобы при выборе вещей в 'предметах', некий текст выводился в окно дополнительного описания?

    ОтветитьУдалить
    Ответы
    1. Я делаю проще.
      В стартовом меню пишеш
      $onobjsel = 'onobj'
      создаешь локацию onobj
      в локации пишеш.
      if $selobj='Навыки':
      clr
      gs'локация_с_описанием'
      !или
      pl'текст с описанием'
      end
      unselect

      если текст с описанием вставил в предмет то локация с описанием не нужна. Или создаете локацию "локация_с_описанием" и туда вставляете pl'текст с описанием'
      pl обозначает что текст будет выводится в дополнительном окне.
      clr означает очистку дополнительного окна от всех описаний.

      Удалить
  9. в одной локации пишешь
    usehtml = 1
    addobj 'ч'
    $onobjsel = 'ч'

    другую называешь ч и пишешь внутри
    if $selobj = 'ч':
    unsel
    pl 'tekst'
    end

    ОтветитьУдалить
    Ответы
    1. Спасибо! И сразу новый вопрос: как очистить это самое окно и заставить его обновляться после каждого перехода через локацию?

      Удалить
    2. Я тупо в каждую локацию засовываю код с очисткой дополнительной локации и ссылку на дополнительную локацию в которой содержится описание.
      clr
      gs'Локация_с_описанием'

      Есть и другие способы, но по мне этот самый простой.

      Удалить
  10. вопрос.почему когда я сохранаю игру мне выдаёт ошибку Инфо:ошибка записи

    ОтветитьУдалить
  11. а можно у вас видео курс по созданию игры заказать?

    ОтветитьУдалить
  12. Этот комментарий был удален автором.

    ОтветитьУдалить
  13. Спасибо, за урок. Только скажи, пожалуйста, как добавлять картинки к тексту? К примеру, заходишь в спальню и там её изображение.

    ОтветитьУдалить
  14. как с тобой связатся в вк или еще где? просто есть пару идей которые я никак реализовать не могу. уже весь плеш себе проел.

    ОтветитьУдалить