Форум переехал на новый адрес: http://qsp.su



АвторСообщение
moderator


ссылка на сообщение  Отправлено: 23.03.08 23:35. Заголовок: Примеры кода


В этой теме будут примеры работающего кода для QSP.

Спасибо: 0 
Профиль Цитата Ответить
Ответов - 84 , стр: 1 2 3 4 5 All [только новые]


администратор




ссылка на сообщение  Отправлено: 29.03.08 15:19. Заголовок: noname пишет: вот, ..


noname пишет:

 цитата:
вот, этого-то QSP и нехватает.


этого не было и не будет, так как приводит к проблемам.


 цитата:
при отладке "в строке 43 ошибка" - как её найти?


там указано имя локации, на ней в "выполнить при посещении" ищешь 43ю строку..
QGen 3 - старый, один из минусов - не показывает номера строк :( сейчас (пока нет более нового QGen'а) вариант - писать в текстовом редакторе, там проще с номерами строк.


 цитата:
по-моему rand(1,2) в 75% случаях даёт '1' - буду сделать спец-прогу для проверки рандома.


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

PS: у меня, честно говоря, нет никакого желания что-то писать про урку и её подстановках. повторю, что это фактически 2 разных языка, с разными принципами исполнения кода. насчёт строк - тоже не хочу объяснять то, что кажется мне очевидным.

Спасибо: 0 
Профиль Цитата Ответить





ссылка на сообщение  Отправлено: 29.03.08 16:05. Заголовок: есть ли возможность ..


есть ли возможность сделать переход на метку другой локации?
т е войти не в начало локации, а куда-нибудь в середину или конец.

это нужно для реализации ожидания нажатия игроком баттонов, если
баттоны вызываются из локации 'ход_игрока', на которую переходили
по gosub. после обработки ACT-а нужно вернуться в конец локации
'ход_игрока', которая передаст управление вызвавшей её локации.

пользуюсь gosub так как ход_игрока вызывается в цикле, который перебирает
всех персонажей (один из которых- игрок), и после обработки ход_игрока
нужно продолжитьь обработку цикла.


Спасибо: 0 
Профиль Цитата Ответить
администратор




ссылка на сообщение  Отправлено: 29.03.08 16:32. Заголовок: именно в том виде, ч..


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

 
if $ret!'':jump $ret
...код...

:lab1
..код.. (продолжение от какого-то действия)
exit
:lab2
..код..
exit

при вызове из act - $ret='lab1' & gt $prevloc
ну или $ret='lab2' & gt $prevloc

Спасибо: 0 
Профиль Цитата Ответить
moderator


ссылка на сообщение  Отправлено: 29.03.08 16:37. Заголовок: noname очень странн..


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

перед вызовом gosub 'ход_игрока' запоминай имя текущей локации в переменную, вместо gosub пиши goto:
$вернуться=$CURLOC & goto 'ход_игрока'
При добавлении действия делай так:
ACT 'Действие такое-то': оператор & оператор & choice_taken=1 & goto 'ход_игрока'

В локации 'ход_игрока', в самом начале пишем
if choice_taken:choice_taken=0 & jump 'after_choice'

Спасибо: 0 
Профиль Цитата Ответить
администратор




ссылка на сообщение  Отправлено: 29.03.08 16:45. Заголовок: Одно и то же написал..


Одно и то же написали :)

Спасибо: 0 
Профиль Цитата Ответить





ссылка на сообщение  Отправлено: 29.03.08 17:01. Заголовок: Nex пишет: noname ..


Nex пишет:

 цитата:
noname
очень странная реализация - наверняка можно было бы сделать гораздо проще, без таких извращений, ну ладно.



что, вызов процедуры через gosub так странно,
или то, что процедура может кнопочки-ACTы делать?
или то, что мне хотелось бы, чтоб игрок успевал на них нажать?

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

ещё скажите, что я пример придумал специально под урку.

Спасибо: 0 
Профиль Цитата Ответить
администратор




ссылка на сообщение  Отправлено: 29.03.08 17:20. Заголовок: "странно" то..


"странно" то, что ты хочешь весь цикл на одной локации уместить (все итерации). вообще что приходило в голову - на одной локации делать выбор, после него переходить на ещё одну, в которой реализовано "тело цикла"..

тогда никаких jump'ов не нужно.

noname пишет:

 цитата:
начинает проявляться неуниверсальность языка и всякие неувязки.


о какой "универсальности" идёт речь? на мой взгляд кусп более универсален (возможности языка), чем урка.
взять хотя бы то, что ты в урк-стиле пишешь на куспе. возможно ли обратное? :)

Спасибо: 0 
Профиль Цитата Ответить





ссылка на сообщение  Отправлено: 29.03.08 17:39. Заголовок: Byte пишет: взять х..


Byte пишет:

 цитата:
взять хотя бы то, что ты в урк-стиле пишешь на куспе. возможно ли обратное? :)


на урк возможно делать мои задумки (они там выложены в отдельной теме).

я в урке года полтора назад написал два квеста не пользуясь почти ничем, кроме btn и pln
т е языка практически не знал (чтоб разобраться с массивами запросил qwerty-bench-vic)
потом забросил эту тему по личным причинам

сейчас, имея такую задумку я за пару часов освоился с языком и создал пример№1 на тему живого игрового мира, ну и далее- в той же теме. остановился только из-за того, что хочу сделать то же самое на qsp (ну ещё из-за пассивности ихнего форума)

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

Спасибо: 0 
Профиль Цитата Ответить
администратор




ссылка на сообщение  Отправлено: 29.03.08 17:51. Заголовок: имхо просто у тебя з..


имхо просто у тебя за спиной багаж "установок" от урки. потому тебе и кажется всё неудобным.

Спасибо: 0 
Профиль Цитата Ответить





ссылка на сообщение  Отправлено: 29.03.08 18:10. Заголовок: ну, буду осваиваться..


ну, буду осваиваться.
некоторые фичи на qsp просто подкупают:

у меня готов пример, где всё доступное игроку заносится в OBJ,
выбираешь объект (пока только направления: сзюв), к примеру, север:

видишь сразу в доп окне краткое описание северной локации и что там есть
в панели действий видишь: "идти на север"
(позже планирую вставить возможность "бросить кинжал в минотавра" - если он там
и действия с дверями/окнами северной стены локации).

выбираешь меч и видишь его описание в доп окне,
а в панели действий- что с ним можно сделать.

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

P.S.
для Зоны было бы полезно реализовать такое "подглядывание" в соседнюю локацию

Спасибо: 0 
Профиль Цитата Ответить
администратор




ссылка на сообщение  Отправлено: 30.03.08 07:25. Заголовок: Королева и конь (пор..


Королева и конь (порнофильм?)

noname, конь и ферзь ходят по-разному же :) и ещё - не понимаю, зачем тут массивы..

 
#Начало
showobjs 0 & showinput 0 & showstat 0
конь_x=2 & конь_y=1
ферзь_x=4 & ферзь_y=8
ход_коня=0
'Начало системы координат доски находится в её левом нижнем углу.'
act 'Начать':gt 'ход'
-

#ход
'Ваша позиция: <<конь_x>>,<<конь_y>>'
'Позиция ферзя: <<ферзь_x>>,<<ферзь_y>>'
'----------'
ход_коня=no ход_коня & xgt $iif(ход_коня, 'ход коня', 'ход ферзя')
-

#ход коня
x = конь_x & y = конь_y
if x>2 and y<8:act 'Идти на (<<x-2>>,<<y+1>>)':конь_x=x-2 & конь_y=y+1 & xgt 'ход'
if x>1 and y<7:act 'Идти на (<<x-1>>,<<y+2>>)':конь_x=x-1 & конь_y=y+2 & xgt 'ход'
if x<8 and y<7:act 'Идти на (<<x+1>>,<<y+2>>)':конь_x=x+1 & конь_y=y+2 & xgt 'ход'
if x<7 and y<8:act 'Идти на (<<x+2>>,<<y+1>>)':конь_x=x+2 & конь_y=y+1 & xgt 'ход'
if x<7 and y>1:act 'Идти на (<<x+2>>,<<y-1>>)':конь_x=x+2 & конь_y=y-1 & xgt 'ход'
if x<8 and y>2:act 'Идти на (<<x+1>>,<<y-2>>)':конь_x=x+1 & конь_y=y-2 & xgt 'ход'
if x>1 and y>2:act 'Идти на (<<x-1>>,<<y-2>>)':конь_x=x-1 & конь_y=y-2 & xgt 'ход'
if x>2 and y>1:act 'Идти на (<<x-2>>,<<y-1>>)':конь_x=x-2 & конь_y=y-1 & xgt 'ход'
-

#ход ферзя
gs 'проверка для коня' & gs 'проверка для ферзя'
:выбор
x=ферзь_x & y=ферзь_y
d=rand(1,8) & l=rand(1,7)
if d=1:y=y-l
if d=2:x=x+l & y=y-l
if d=3:x=x+l
if d=4:x=x+l & y=y+l
if d=5:y=y+l
if d=6:x=x-l & y=y+l
if d=7:x=x-l
if d=8:x=x-l & y=y-l
if y>8 or x>8 or x<1 or y<1:jump 'выбор'
ферзь_x=x & ферзь_y=y
xgt 'ход'
-

#проверка для ферзя
if ферзь_x=конь_x or ферзь_y=конь_y:xgt 'победа ферзя'
разница_x=конь_x-ферзь_x
if ферзь_y+разница_x=конь_y or ферзь_y-разница_x=конь_y:xgt 'победа ферзя'
-

#проверка для коня
if конь_x=ферзь_x and конь_y=ферзь_y:xgt 'победа коня'
-

#победа ферзя
'Вы проиграли!'
-

#победа коня
'Вы победили!'
-


Спасибо: 1 
Профиль Цитата Ответить





ссылка на сообщение  Отправлено: 30.03.08 10:23. Заголовок: Byte, когда я выклад..


Byte, когда я выкладываю кусок кода- его легко копировать с экрана
когда ты выкладываешь- у тебя нет символов переноса строки.
ну что ж. буду править.

сделал без массивов- тем лучше,
хотя конструкция вида длинаXширинаY - уже массив

Спасибо: 0 
Профиль Цитата Ответить





ссылка на сообщение  Отправлено: 30.03.08 10:36. Заголовок: м-да, пошли по упрощ..


м-да, пошли по упрощениям:
1. без наглядного представления тяжело тестировать
(и получать удовольствие от реализации)
- но мне, в принципе, этого и не надо- мне для дела
хотя, когда на досурке был выложен qwerty-bench-vic
им многие заинтересовались
2. выбора за кого играть- нет?
ну и ладно. я в принципе, понял, как разобраться с
проблемой, возникавшей при отрисовке кнопок в процедуре,
вызываемой из цикла. пожалуй, разобью цикл по локациям.
не то, чтоб это было удобно, но всё же не так уродливо, как
искуственно монтировать jump в другую локацию.
p.s.
в-общем, спасибо и на этом.

Спасибо: 0 
Профиль Цитата Ответить
администратор




ссылка на сообщение  Отправлено: 31.03.08 01:33. Заголовок: Небольшая доработка:..


Небольшая доработка (рисуется поле и ход ферзя выбирается немного по-другому):

 
#Начало
usehtml=1 & fsize=14
showobjs 0 & showinput 0 & showstat 0
конь_x=2 & конь_y=1
ферзь_x=4 & ферзь_y=8
ход_коня=0
'Вы играете белым конём.'
act 'Начать':gt 'ход'
-

#ход
белая=-1
'<table border="1">'
i=8
:строки
*p '<tr height="30">'
j=0
:колонки
$поле=' '
белая=no белая
if i>0 and j>0:$цвет=$iif(белая, 'FFFFFF', 'DDDDDD') else $цвет='00FF00'
if j=0:$поле=$str(i)
if i=0:$поле=$str(j)
if ферзь_x=j and ферзь_y=i:$поле='Ф'
if конь_x=j and конь_y=i:$поле='К'
*p '<td width="30" bgcolor="#<<$цвет>>"><<$поле>></td>'
j=j+1
if j<=8:jump 'колонки'
*p '</tr>'
i=i-1
if i>=0:jump 'строки'
'</table>'
'Ваша позиция: <<конь_x>>,<<конь_y>>'
'Позиция ферзя: <<ферзь_x>>,<<ферзь_y>>'
ход_коня=no ход_коня & xgt $iif(ход_коня, 'ход коня', 'ход ферзя')
-

#ход коня
x = конь_x & y = конь_y
if x>2 and y<8:act 'Идти на (<<x-2>>,<<y+1>>)':конь_x=x-2 & конь_y=y+1 & gt 'ход'
if x>1 and y<7:act 'Идти на (<<x-1>>,<<y+2>>)':конь_x=x-1 & конь_y=y+2 & gt 'ход'
if x<8 and y<7:act 'Идти на (<<x+1>>,<<y+2>>)':конь_x=x+1 & конь_y=y+2 & gt 'ход'
if x<7 and y<8:act 'Идти на (<<x+2>>,<<y+1>>)':конь_x=x+2 & конь_y=y+1 & gt 'ход'
if x<7 and y>1:act 'Идти на (<<x+2>>,<<y-1>>)':конь_x=x+2 & конь_y=y-1 & gt 'ход'
if x<8 and y>2:act 'Идти на (<<x+1>>,<<y-2>>)':конь_x=x+1 & конь_y=y-2 & gt 'ход'
if x>1 and y>2:act 'Идти на (<<x-1>>,<<y-2>>)':конь_x=x-1 & конь_y=y-2 & gt 'ход'
if x>2 and y>1:act 'Идти на (<<x-2>>,<<y-1>>)':конь_x=x-2 & конь_y=y-1 & gt 'ход'
-

#ход ферзя
gs 'проверка для коня' & gs 'проверка для ферзя'
x=ферзь_x & y=ферзь_y
влево=x-1 & вправо=8-x & вверх=8-y & вниз=y-1
k=0
if вниз>0:ход[k]=1 & длина[k] = вниз & k=k+1
if вниз>0 and вправо>0:ход[k]=2 & длина[k] = min(вниз, вправо) & k=k+1
if вправо>0:ход[k]=3 & длина[k] = вправо & k=k+1
if вправо>0 and вверх>0:ход[k]=4 & длина[k] = min(вправо, вверх) & k=k+1
if вверх>0:ход[k]=5 & длина[k] = вверх & k=k+1
if вверх>0 and влево>0:ход[k]=6 & длина[k] = min(вверх, влево) & k=k+1
if влево>0:ход[k]=7 & длина[k] = влево & k=k+1
if влево>0 and вниз>0:ход[k]=8 & длина[k] = min(влево, вниз) & k=k+1
выбор=rand(0,k-1)
d=ход[выбор]
l=rand(1, длина[выбор])
if d=1:y=y-l
if d=2:x=x+l & y=y-l
if d=3:x=x+l
if d=4:x=x+l & y=y+l
if d=5:y=y+l
if d=6:x=x-l & y=y+l
if d=7:x=x-l
if d=8:x=x-l & y=y-l
ферзь_x=x & ферзь_y=y
gt 'ход'
-

#проверка для ферзя
if ферзь_x=конь_x or ферзь_y=конь_y:xgt 'победа ферзя'
разница_x=конь_x-ферзь_x
if ферзь_y+разница_x=конь_y or ферзь_y-разница_x=конь_y:xgt 'победа ферзя'
-

#проверка для коня
if конь_x=ферзь_x and конь_y=ферзь_y:xgt 'победа коня'
-

#победа ферзя
'Вы проиграли!'
-

#победа коня
'Вы победили!'
-


UPD: Выложил пример в каталоге, раздел "В помощь разработчикам игр / Примеры, заготовки игр".

Спасибо: 1 
Профиль Цитата Ответить





ссылка на сообщение  Отправлено: 01.04.08 19:33. Заголовок: спасибо! графика вдо..


спасибо!
графика вдохновляет.
даже не знаю за что больше
хочется взяться:
приделать буковки a..h
и картинки фигур к твоему примеру,
или свою прогу ковырять дальше.

наверное, буду ковырять свою...

Спасибо: 0 
Профиль Цитата Ответить
менеджер по рекламе




ссылка на сообщение  Отправлено: 13.05.09 19:18. Заголовок: Касательно РПГ. Для ..


Касательно РПГ. Для вычисления повреждений по системе AD&D бросаются кубики, сначала пробовал в коде локации "бой" указывать вычисление урона как damage=rand(weapon_min_dam,weapon_max_dam) первая и вторая переменные это соответственно минимальный и максимальный урон. Потом вспомнил одну особенность работы с костями.. При уроне 1d8 вполне подходит вычисление через rand(1,8) а вот при уроне 2d4 нет. Дело в том, что хотя диапазон примерно тот же, но вероятность выпадания значений другая. Грубо говоря, при 1d8 есть 1/8 вероятность любой цифры. А при 2d4 есть 1/16 вероятность выпадения 2 или 8, 2/16 выпадения 3 или 7, 3/16 выпадения 4 или 6, и 4/16 выпадения 5. Непринципиально, но мысль запала. Увеличивать и без того громоздкий код боёвки не стал, но набросал функцию)

 цитата:
result=0
:1
result=result+rand(1,args[1])
args[0]=args[0]-1
if args[0]>0: jump '1'


В функцию передаются два аргумента: первый это количество костей, второй - грани кости. То есть для броска 2d4 передаём 2 и 4. На мой взгляд, получилось довольно изящно) Первую строчку наверное можно убрать, это так, перестраховка

Спасибо: 0 
Профиль Цитата Ответить
демиург




ссылка на сообщение  Отправлено: 14.05.09 10:57. Заголовок: WladySpb Прикольно, ..


WladySpb Прикольно, надо будет посмотреть как оно в коде получится.

Спасибо: 0 
Профиль Цитата Ответить
менеджер по рекламе




ссылка на сообщение  Отправлено: 14.05.09 16:56. Заголовок: Ajenta В коде так и ..


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

Спасибо: 0 
Профиль Цитата Ответить
менеджер по рекламе




ссылка на сообщение  Отправлено: 01.06.09 23:16. Заголовок: Ещё, не сказал бы чт..


Ещё, не сказал бы что оригинальный ход, но мне он пришёл в голову случайно,и не факт что до него все додумались)
Часто нужно просто проверить посещалась ли локация, или - сколько раз посещалась. Для этого в локации-обработчике onnewloc прописываем либо:
vizited['<<$curloc>>']=1
либо:
vizited['<<$curloc>>']=vizited['<<$curloc>>']+1

и после этого там где надо просто проверяем:
if vizited['название_локации']=1:


Спасибо: 0 
Профиль Цитата Ответить
администратор




ссылка на сообщение  Отправлено: 01.06.09 23:50. Заголовок: '<<$curl..


'<<$curloc>>' это то же самое, что просто $curloc:

vizited[$curloc]=1

Вроде такой пример есть в стандартном хелпе.

Спасибо: 0 
Профиль Цитата Ответить
Ответов - 84 , стр: 1 2 3 4 5 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 1
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация вкл, правка нет



Создай свой форум на сервисе Borda.ru
Текстовая версия