RU 📌 Pinned

Как сделать?

Dark[Ol(U23)leneri] #34 18.04.2010 22:57 6408 comments 2425056 views

Andrik2219:

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

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

if hour>18 and hour<20:
'Федя сидит на лавочке'
act 'Привет, Федя! Отлично выглядишь':
repa_fedor+=1
*clr
'Федя приветливо машет вам рукой.
- Привет. Спасибо. Ты тоже ничего.'
end
act 'Ну ты, Федя, и козел':
repa_fedor-=1
*clr
'Федя поднимается с лавочки, подбирает с земли дубину и направляется в вашу сторону.
- А ну повтори, что ты там сейчас прогавкал?'
end
end

Для этого надо еще запустить течение времени.
Более сложный вариант, но более удобный - создавать массив для НПС.

De@th K!d:

Доброго времени суток) Подскажите, будьте добры, как превратить игру в парсер, где фигурировала бы только строка ввода? Например, чтобы при вводе со строки ввода цифр 1, 2 и 3 игра переходила на локации А, В и С соответственно. Сколько ни бился, не смог придумать ничего умнее диалогового окна, которое использовать в данном проекте мне бы не хотелось…))

$USERCOM='USERCOM'

А дальше в локации USERCOM любой код.

text=USRTXT
CMDCLEAR
if text=1:msg 'Заработало!!!'
Aleks Versus Moderator 02.12.2019 19:30 (6 years ago)

De@th K!d:

Доброго времени суток) Подскажите, будьте добры, как превратить игру в парсер, где фигурировала бы только строка ввода? Например, чтобы при вводе со строки ввода цифр 1, 2 и 3 игра переходила на локации А, В и С соответственно. Сколько ни бился, не смог придумать ничего умнее диалогового окна, которое использовать в данном проекте мне бы не хотелось…))

как раз сейчас готовлю видео по этому вопросу. Точно сказать, когда будет, не могу. Но ответ dmvikar, в целом, описывает всю инфу из этого видео :lol:

Нужна помощь.
Я делаю поле боя по типу HMM. Мне нужно отрисовать от юнита область доступную для перемещения. Каждой клетке заданы координаты. Юниту задано количество ходов.
Эту задачу я благополучно решил, но при условии, что в доступной области нет препятствий. Как учесть препятствия, я пока не допер. В мозгу только монструозные конструкции возникают.
Такая же ситуация обстоит и с поиском пути до цели. Если препятствий нет, то и проблемы нет. А с появление препятствий возникнет проблема определения кратчайшего расстояния. Проблема усугубится, если препятствие будет в виде буквы С, т.е. как ловушка и т.п.
Я уверен, что математечески где-то уже вывели формулы, но не могу грамотно сформулировать запрос для гугла.

Aleks Versus Moderator 07.12.2019 13:59 (6 years ago)

dmvikar,
тебе нужен алгоритм А* (а-звёздочка). Или алгоритм Дейкстры.
Есть прекрасная статья на хабре
https://habr.com/ru/post/331192/

Так же на форуме уже кто-то давал Алгоритм Дейкстры, попробуй поискать. нету.
http://qsp.su/index.php?option=com_agora&task=search&action=search_results&keywords=поиск+пути&author=&forum=-1&sort_by=5&sort_dir=DESC&show_as=posts&submit=Поиск

Edited at 07.12.2019 14:03 (6 years ago)

Спасибо, Aleks Versus.
Как я и думал, пришлось обрабатывать каждую точку).
За воскресенье я соорудил код, который даже работает). Доступная область рисуется, кратчайший путь находится.
Но есть одна проблема. Путь составляется следующим образом: сначала происходит движение по оси Y до выравнивания по значению X, а потом сближение по X. Путь то хоть и кратчайший, но не начинается со сближения, т.е. когда каждый ход должен попеременно менять координаты X и Y.
Происходит это из-за того, что клеток соседей я обсчитываю одинаково, т.е. первая соседняя клетка - северная, а дальше по часовой стрелке. А нужно обсчитывать по какому-то условию. В статье прямо об этом не говорится, а код прочесть я не осилил, не программист я.
Пока писал пост, зародилось пару мыслей, пойду проверять)

Aleks Versus Moderator 09.12.2019 16:07 (6 years ago)

dmvikar,
я брал условное направление. То есть если цель на севере, то в первую очередь обсчитываются северные, потом остальные. Если цель на северо-западе, то либо северная, либо западная в первую очередь. Как-то так.

Извини, пока больше ничем не могу помочь. Кажется Storm делал А* на QSP. Попробуй написать ему.

Aleks Versus,
Я немного не про то, я сейчас поиск в ширину осваиваю. Мне на поле нужно найти ближайшую цель, а не конкретную.
Так вот, если стартовать с вертикали, т.е. y+1, то и пути пойдут по вертикали, пока не сравняются по горизонтали с целью. Соответственно, если стартовать с горизонтали, то получим обратную картину. Как не крути, путь всегда будет из двух перпендикулярных отрезков и никогда лесенкой (это, если поле прямоугольник и нет препятствий).
Но, кажется, я нашел ответ у того парня с хабра:

results = [(x+1, y), (x, y-1), (x-1, y), (x, y+1)]
if (x + y) % 2 == 0: results.reverse() # ради эстетики

Как я понял, он зеркально меняет порядок поиска соседних клеток если x+y четное.
Проверил на бумаге, вроде как все сходится.

Aleks Versus Moderator 09.12.2019 20:57 (6 years ago)

dmvikar,
нет, что-то не то. Заливка как раз и хороша тем, что обходит точки по кругу.
восток-юг-запад-север
потом берётся восточная точка — обходятся точки вокруг неё. южная — вокруг неё. Какая разница, по сути, в каком порядке? Ты не перебираешь сначала все северные, потом все восточные, потом все южные. Ты идёшь по одной по кругу. И как раз лесенка и должна получиться.
YouTube: YM6Swr6kcBw

Aleks Versus:

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

Вот в этом вся и суть. От того, как ты обойдешь эту точку зависит как построится твой путь. Если начнешь обходить с севера/юга, то все стрелки будут вверх/вниз, если начнешь с запада/востока, то влево/вправо, а лесенка не получится. Смена направления произойдет только после столкновения с препятствием.
Потому, чтоб появились лесенки, необходимо менять порядок обхода. Представь шахматную доску. Так вот, все черные клетки обходятся по (x+1, y), (x, y-1), (x-1, y), (x, y+1), а белые (x, y+1), (x-1, y), (x, y-1), (x+1, y). В этом случае должна появится лесенка. У меня пока не было времени проверить, но, скорее всего, так оно и есть. Как проверю, сообщу.

Кстати, получается на qsp можно писать пошаговую тактику или стратегию, да даже пошаговую веселую ферму!

Aleks Versus Moderator 13.12.2019 13:03 (6 years ago)

dmvikar,
ааа. Вон в чём дело. Извини, я так далеко ещё не вдавался. Думал, если обход делается по кругу, то направление стрелки указывается к точке, вокруг которой делается обход, и в моём воображении получалась лесенка. :=D

Все проверил - работает как надо!

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

1. Как именно задать фиксированный размер строк, чтобы не было изменения масштаба при сужении окна?
2. Как правильно вывести таблицу в окно дополнительного описания? Прописал “pl”, таблица перенеслась, но под ней появилось огромное пустое пространство, как его избежать?

Пришел вот к такому коду таблицы, как его поправить в соответствии с вопросами, озвученными выше?

Spoiler
pl'<table border=1>
	<thead>
		<tr>
		<th>Персонаж</th>
		<th>Локация</th>
		</tr>
	</thead>
	<tbody>
		<tr>
		<td><center>имя1</center></td><td><center><<$tracker1>></center></td></tr>
		<tr>
		<td><center>имя2</center></td><td><center><<$tracker2></center></td></tr>
		<tr>
		<td><center>имя3</center></td><td><center><<$tracker3></center></td></tr>
	</tbody>
	</tr>
</table>'

UPD: Решил первый вопрос, но второй не могу понять как решить…
UPD: Методом перебора решил и второй вопрос. Спасибо Aleks Versus, за, когда-то написанную им, таблицу в этой же теме

в итоге код получился такой

p"<table border=1 cellspacing=0>"
p	"<tbody>"
p		"<tr bgcolor=#cfcfcf>"
p		"<td width=100><center>Персонаж</center></td><td width=130><center>Локация</center></td></tr>"
p		"<tr>"
p		"<td><center>имя1</center></td><td><center><<$tracker1>></center></td></tr>"
p		"<tr>"
p		"<td><center>имя2</center></td><td><center><<$tracker2>></center></td></tr>"
p		"<tr>"
p		"<td><center>имя1</center></td><td><center><<$tracker3>></center></td></tr>"
p	"</tbody>"
p	"</tr>"
pl"</table>"
Aleks Versus Moderator 27.12.2019 13:15 (6 years ago)

qcezwsx,
молодец, что сам разобрался. Эти вопросы, к сожалению, задаются и задавались часто, и на них столь же часто давались ответы. В скором времени будет готова часть F.A.Q., где множество подобных вопросов будут освещены. Пока же на моём канале есть пара видео по основам HTML на QSP:
1 часть: https://www.youtube.com/watch?v=1KC_vgNKNgc
2 часть (твой вопрос): https://www.youtube.com/watch?v=KFZsJl2CjmE&t=1246s

Спасибо за более ранние ответы)) …хоть и не получилось то, чего хотел, поэтому решил вернуться ко вводу текста)
Следующий вопрос по идее простой, но разобраться не получилось. Имеем, допустим, такой вот код:

IF Текст = 1:
GOTO 'Локация-1'
END

IF Текст = 2:
GOTO 'Локация-2'
END

IF Текст = 3:
GOTO 'Локация-3'
END

Как сделать так, чтобы при вводе любого значения переменной “Текст”, не равной 1, 2 или 3, игра переводила на “Локацию-4”? Я пробовал использовать “!” и “<>”, однако почему-то каждый раз выдаёт ошибку синтаксиса :/

Log in or Register to post comments.