RU 📌 Pinned

Как сделать?

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

Знаю, что уже спрашивал про похожее зацикливание, но уж простите гуманитария :rolleyes: - как зациклить одну песню?

Aleks Versus Moderator 26.05.2016 17:51 (9 years ago)

Совёнок,
В начале игры:

$counter = 'COUNTER'

На локации COUNTER:

play 'одна_песня.mp3'

здравствуйте уважаемые гуру!
Думаю стоит как нибудь набраться терпения и прочесть всю тему с самого начала. много интересного узнаю.

А пока пара вопросов.
1) Уже задавался недавно, как реализовать нахождение НПС на локации.
В голову приходить только идея в локации времени прописать флажки НПС для каждой локации для определенного времени, а при входе на локацию проверять 1 или 0 т.е есть НПС на локации или нет. Тут в локации времени можно реализовать какую нибудь рандомность.
Либо на каждой локации в зависимости от времени прописать нахождения НПС, тут уже все будет жестко привязано.

Как это делается правильно? есть ли примеры игр где это хорошо реализовано?

2) И еще в одной из игр видел интересную реализацию кнопок. При выполнение действия, кнопка меняет цвет и уже повторно нажать не удается. Не до конца понял механизм, как это устроено, т.к примера кода нет.

Aleks Versus Moderator 27.05.2016 00:58 (9 years ago)

Bup0H:

Уже задавался недавно, как реализовать нахождение НПС на локации.

Я напротив завожу для каждого npc переменную, где прописываю, на какой локации они находятся. Типа

$npc[0] = 'дом'
$npc[1] = 'Улица'

!или

$npc['Петя'] = 'дом'
$npc['Вася'] = 'улица'

Со временем нахождения немного сложнее. Но если в кратце, то “локации” в qsp можно использовать не только как Локации, но и как области кода, где можно описать все… эм… действия npc.

Bup0H:

И еще в одной из игр видел интересную реализацию кнопок.

используется ДЕЙСТВИЕ ПО УСЛОВИЮ (ищи поиском), где активное действие выводится при одном значении флага, а заблокированное при другом. Цвет делается с помощью html.

Не так задал вопрос :rolleyes: Скажу по другому: в игре есть несколько отдельных локаций. Для каждой локации нужно зациклить одну определённую аудиозапись. Как это можно сделать?

Aleks Versus Moderator 27.05.2016 10:55 (9 years ago)

Совёнок,
На локации COUNTER:

if $curloc = 'дом':
      play 'музыка для дома.mp3'
elseif $curloc = 'улица':
      play 'музыка для улицы.mp3'
elseif ....

Или на каждой локации, где мелодия должна смениться, присваиваешь отдельной переменной путь до файла музыки, например:

!дом
$music = 'музыка для дома.mp3'

А на локации COUNTER пишешь:

play $music

Aleks Versus,
Спасибо, попробую :)

font color = blue
я так понимаю это уже HTML. Какие цвета по умолчанию можно вписать (Red, Green и т.п) есть ли весь список?

Bup0H:

font color = blue
я так понимаю это уже HTML. Какие цвета по умолчанию можно вписать (Red, Green и т.п) есть ли весь список?

Лучше используй цветовые коды.
Вот тут например можешь себе подобрать: http://html-color-codes.info/
(Используй HTML Color Picker)
<font color = #0000FF> </font> - как результат: синий цвет.

Как растянуть фон на всё окно? То есть как только по высоте или ширине изображение упирается об край то при изменении размеров окна образуется лишенное фона пространство.

Aleks Versus Moderator 01.06.2016 05:47 (9 years ago)

Genryzz:

Как растянуть фон на всё окно?

в классическом плеере при задании фона через $backimage - никак.

Genryzz,
Возьми тёмную, светлую картинку, и с верху наложи BCOLOR под стать цвету картинки, тогда будет казаться что она на весь экран.

Aleks Versus и Oliver спасибо.

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

Пример. Сумма равна 9. Случайные числа выбираются из 2,3,5 и 9. Итого у нас группы 2,2,5 ; 2,2,2,3 ; 3,3,3 ; и 9.

Как создать такую функцию?

Aleks Versus Moderator 01.06.2016 21:54 (9 years ago)

Genryzz,
Это своего рода частный случай разложения на слагаемые. Примитивный вариант:

Spoiler
! заполняем массив числами (они определены) - исходный массив
mass[0]=2
mass[1]=3
mass[2]=5
mass[3]=9
! задаём "сумму" выброшенных чисел = 9
summ = 9
! далее начинается цикл. Метка:
:for
! выкидываем число
	! получаем индекс
	index = rand(0,arrsize('mass')-1)
	! фиксируем число
	number=mass[index]
	
! проверяем, возможно ли вычитание
if summ - number = 0:
! если при вычитании числа из summ получается 0, значит мы нашли последнее число
	! записываем его
	search[]=number
elseif summ - number < min('mass'):
! если разность summ и числа - меньше минимального значения в массиве, значит
	! число, которое мы вытянули, нам не подходит
	! и не подойдёт, его можно убрать из исходного массива
	killvar 'mass',index
	! записывать его не нужно, просто возвращаемся и повторяем цикл
	jump 'for'
elseif summ - (number + min('mass')) < 0:
! если разность между summ и суммой выпавшего и минимального чисел в массиве
! меньше нуля, это число так же нам не подходит и не подойдёт
	killvar 'mass',index
	jump 'for'
	! можно объединить с предыдущим условием через оператор OR
else
! во всех остальных случаях число нам подходит:
	! запоминаем его в конечный массив
	search[]=number
	! уменьшаем summ на это число
	summ -= number
	! повторяем цикл
	jump 'for'
end

Для проверки достаточно

i=0
:print
if i<arrsize('search'):
	*pl 'search[<<i>>] = <<search[i]>>'
	i+=1
	jump 'print'
end

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

P.S.: Хотя я вот сейчас подумал, может быть неправильно понимаю задачу?
1. Случайным образом выкидывается сумма = 9
2. Случайным образом выкидываются числа в пределах суммы? Т.е. 2, 3, 5, 9 - выпали случайно?
3. Потом функция находит группу чисел из этих случайно выпавших, которые дадут в итоге искомую сумму?
Задача так стоит? Или всё таки числа определены заранее.

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

Пример

Заранее заданные параметры
Группа1 = 10(сумма всех очков монстров в группе)
Группа2 = 16

Монстры
Имп_цена = 2
Демон_цена = 4
Дьявол_цена = 8
/Заранее заданные параметры

Один из возможных результатов.
Итого Группа1 состоит из монстр[1] = Имп ; монстр[2] = Имп ; монстр[3] = Имп ; монстр[4] = Демон
Итого Группа2 состоит из монстр[1] = Дьявол ; монстр[2] = Дьявол

P.S. Меня заботит возможность ситуации когда сумма цен всех элементов меньше суммы группы и разница меньше цены самого дешевого ‘монстра’
Сумма группы = 7 Цены монстров 2 и 3 Может ли получиться такой вариант 2,2,2 с остатком 1 который некуда пристроить?

P.S. После нахождения мы получаем массив.

Log in or Register to post comments.