Как сделать?
…
Genryzz:
Сумма группы = 7 Цены монстров 2 и 3 Может ли получиться такой вариант 2,2,2 с остатком 1 который некуда пристроить?
в моём примере такой случай исключён. Условие
summ - (number + min('mass')) < 0
должно предотвращать такие варианты. Но цены монстров всегда должны предполагать, что может быть хотя бы один случай с монстром наименьшей стоимости. Тебе нужна функция, ОК, можно сделать универсальную вот так:
Spoiler
!#enemy_search
args[0] = args[0] & ! стоимость всех монстров (то, что было summ)
$args[1] = $args[1]+',' & ! цены всех монстров через запятую
! первое, что делаем, вытаскиваем цены за монстров из аргумента
:price
if len($args[1])>0:
! запоминаем число
mass[]=val($mid($args[1],1,instr($args[1],",")-1))
! удаляем его из строки
if instr($args[1],",")<>len($args[1]):
$args[1]=$mid($args[1],instr($args[1],",")+1)
else
$args[1]=''
end
jump 'price'
end
! Теперь выполняем тот же алгоритм, что мы уже писали,
! только исключая лишние глобальные переменные (используем args)
! начинается цикл. Метка:
:for
! выкидываем число (стоимость монстра) из массива
! получаем индекс
args['index'] = rand(0,arrsize('mass')-1)
! фиксируем число
args['number']=mass[args['index']]
! проверяем, возможно ли вычитание
if args[0] - args['number'] = 0:
! если при вычитании числа из args[0] получается 0, значит мы нашли последнее число
! записываем его
search[]=args['number']
elseif args[0] - args['number'] < min('mass'):
! если разность args[0] и числа - меньше минимального значения в массиве, значит
! число, которое мы вытянули, нам не подходит
! и не подойдёт, его можно убрать из исходного массива
killvar 'mass',args['index']
! записывать его не нужно, просто возвращаемся и повторяем цикл
jump 'for'
elseif args[0] - (args['number'] + min('mass')) < 0:
! если разность между args[0] и суммой выпавшего и минимального чисел в массиве
! меньше нуля, это число так же нам не подходит и не подойдёт
killvar 'mass',args['index']
jump 'for'
! можно объединить с предыдущим условием через оператор OR
elseif arrsize('mass')<1:
! защита от дурака. Если размер массива mass упал до нуля, значит мы перебрали все
! возможные варианты и значит изначальное условие задано неверно или
! решение, которое начал подбирать алгоритм изначально неверно подбиралось
! *pl 'неверное решение'
! $result = 'false'
jump 'endandexit'
else
! во всех остальных случаях число нам подходит:
! запоминаем его в конечный массив
search[]=args['number']
! уменьшаем args[0] на это число
args[0] -= args['number']
! повторяем цикл
jump 'for'
end
! результат прописывается в массив search
! массив mass удаляем, он был временным
:endandexit
killvar 'mass'
exit
Пример вызова:
gosub 'enemy_search',9,'2,3,5,9'
Как вставить изображение в окно описания перед текстом? И как изменить его размер?
Совёнок,
используй html. Включение html в QSP:
usehtml = 1
Вывод изображения с указанием ширины в пикселях:
*pl '<img src="путь к файлу изображения/картинка.png" width=250> какой-то текст, какой-то текст, какой-то текст'
*pl 'ещё какой-то текст'
Здравствуйте Гуру!
Нужна следующая функция:
Пример:
Если Если Если
яблоко = 1 груша = 1 слива = 1
То То То
груша =0 яблоко = 0 яблоко = 0
слива = 0 слива = 0 груша =0
апельсин = 0 апельсин = 0 апельсин = 0
Ну и т.д только чтоб для каждого случая отдельно не писать все условие
Aleks Versus Ваш алгоритм я не понял, но нашел другое решение.
P.S.
price_enemy_loc_current[war] - текущая цена локации №war
price_enemy_loc[war] - номинальная цена локации №war
price_graveyard_archer и price_graveyard_warrior - цена монстров
P.S.S. Удалил сообщение из-за бага в цикле(так как не знал сколько времени займет поиск причины). После решения проблемы восстановил.
Spoiler
enemy = 0
:Убей_ИХ_всех
if enemy => 1:
KILLVAR 'enemyXP',enemy
KILLVAR '$enemy_name',enemy
KILLVAR 'enemyDM',enemy
KILLVAR 'enemyDM_DIS',enemy
KILLVAR 'enemyDIST',enemy
enemy -= 1
Jump 'Убей_ИХ_всех'
else
enemy = 0
price_enemy_loc_current[war] = 0
:Сотворение
if price_enemy_loc_current[war] = price_enemy_loc[war]:
Jump 'Последний_штрих'
elseif price_enemy_loc_current[war] > price_enemy_loc[war]:
Jump 'Убей_ИХ_всех'
elseif price_enemy_loc_current[war] < price_enemy_loc[war]:
enemy += 1
mob = rand(1,2)
if mob = 1:
$enemy_name[enemy] = $enemy_graveyard_warrior
enemyXP[enemy] = enemy_graveyard_warrior_XP
enemyDM[enemy] = enemy_graveyard_warrior_DM
enemyDM_DIS[enemy] = 0
enemyDIST[enemy] = 0
price_enemy_loc_current[war] += price_graveyard_warrior
Jump 'Сотворение'
end
if mob = 2:
$enemy_name[enemy] = $enemy_graveyard_archer
enemyXP[enemy] = enemy_graveyard_archer_XP
enemyDM[enemy] = enemy_graveyard_archer_DM
enemyDM_DIS[enemy] = enemy_graveyard_archer_DM_DIS
enemyDIST[enemy] = 0
price_enemy_loc_current[war] += price_graveyard_archer
Jump 'Сотворение'
end
end
end
Genryzz:
Aleks Versus Ваш алгоритм я не понял,
странно. Ведь там всё просто:
1. Задаём стоимости монстров (2,3,5,9) и Сумму, которую хотим получить (9)
2. Вытягиваем случайную стоимость и проверяем условия, единственное назначение которых - отсеять невозможные варианты.
3. Если выброшенная стоимость прошла по всем условиям - записываем её, если не подошла - не записываем (и убираем из списка заданных)
Genryzz:
но нашел другое решение.
вот твой алгоритм как раз таки выдран из контекста и потому тяжело воспринимается. Ну и, как я понимаю, ты не решил свою задачу, ты просто сделал сброс двух случайных монстров со стоимостями условно 1 и 2, которые обязательно впишутся в сумму (либо цикл будет повторён).
Bup0H,
не понятно, какие данные приходят к этой функции изначально? Т.е. что должно быть, если придёт яблоко = 1 и слива = 1? Приоритет у яблока? Или в этом случае должно всё сбрасываться в 0? Или вообще ничего не должно меняться?
И ещё. Пользуясь словом “функция”, ты имеешь ввиду действительно функцию ака FUNC, или просто алгоритм ака кусочек кода?
Bup0H:
Если Если Если
яблоко = 1 груша = 1 слива = 1
То То То
груша =0 яблоко = 0 яблоко = 0
слива = 0 слива = 0 груша =0
апельсин = 0 апельсин = 0 апельсин = 0Ну и т.д только чтоб для каждого случая отдельно не писать все условие
непонятно… а почему не сделать просто рандом на выпадение одного случайного фрукта, тогда будет только один из списка и остальные просто останутся в рандоме невыпавшими?
Aaaspavel:
а почему не сделать просто рандом на выпадение одного случайного фрукта?
Вот-вот. Непонятно, зачем нужна проверка и выставление остальных значений.
Aleks Versus,
Я думаю и за нехватки опыта, то бишь, не знание о такой вещицы как рандом, во.
Помогите решить проблему. Почему эта часть кода не работает? Что я сделал не так?
Spoiler
выше все как часики работает
elseif hour =17 and minute <5:
$нина=‘дом’
$нина_статус=‘направляется на кухню’
!именно вот эта часть
elseif hour =17 and minute >=5:
if готово[’еда’] =0:
$нина=‘кухня’
$нина_статус=‘готовит кушать’
elseif готово[’еда’] =1:
$нина=‘кухня’
$нина_статус=‘гадает кросворд’
end
end
end
все спс разобрался, забыл прописать на локации $loc=$curloc
Можно ли запустить одновременно 2 звуковых дорожки?
Например идет звук боя и после удара воспроизводится звук, в то же время пока проигрывается звук боя.
Genryzz,
можно.
Доброго времени суток. У меня тут вопрос появился. Может кто поможет мне с ним.
Собственно, я так и не смог придумать ничего путного для создания скрипта кротчайшего пути от точки к точке.
Суть такова:
Есть координатная сетка вида (x,y,z), есть npc который определяет свое местонахождение с помощью этих координат и отрисовывается на соответствующей клетке. Я могу заставить его бездумно бродить по локации и определять что находится вокруг него на расстоянии в 1 клетку. А вот как заставить npc анализировать координатную сетку и составлять адекватный, кротчайший путь к другой ячейке, я ну вот совершенно не могу понять.
Svartberg:
кротчайший путь к другой ячейке, я ну вот совершенно не могу понять
каждой ячейке присвоить числовое значение, движение будет представлять собой сумму пройденных клеток и по наименьшей сумме не вариант?
Как?
Вот есть список музыкальных тем, есть композиции.
Идет в течении боя тема $music_theme = ‘war’
Здоровье противника приблизилось к нулю и включается $music_theme = ‘death_time’ и в тоже время продолжает играть $music_theme = ‘war’. При этом $music_theme = ‘death_time’ играет пару секунд после подтверждения условия запуска композиции.