Как сделать?
…
а, это я пропустил, что тебе нужен был обратный порядок сортировки
для изменения направления нужно в 2 местах заменить сравнение на обратное
строку
IF tmparr[I]>tmparr[I+1]:
заменить на
IF tmparr[I]<tmparr[I+1]:
а строку
IF tmparr[I]<tmparr[M]: M=I
на
IF tmparr[I]>tmparr[M]: M=I
Огромное спасибо. Это было даже не обязательно, я же мог в статистике изменить расположение массивов. Но теперь хотя бы буду знать.
Бился бился, нет, мне такой способ сортировки не подходит.
$name[0]='Имя Игрока'
$name[1]='Михаил Петров'
$name[2]='Петр Сидоров'
id[0]=1
id[1]=2
id[2]=3
reit[0]=RAND(1,100)
reit[1]=RAND(1,100)
reit[2]=RAND(1,100)
win[0]=RAND(0,30)
win[1]=RAND(0,30)
win[2]=RAND(0,30)
loss[0]=RAND(0,5)
loss[1]=RAND(0,15)
loss[2]=RAND(0,30)
draw[0]=RAND(0,1)
draw[1]=RAND(0,3)
draw[2]=RAND(0,10)
wko[0]=(win[0]*75)/100
wko[1]=(win[1]*60)/100
wko[2]=(win[2]*50)/100
fig[0]=win[0]+loss[0]+draw[0]
fig[1]=win[1]+loss[1]+draw[1]
fig[2]=win[2]+loss[2]+draw[2]
mesto[0]=0
mesto[1]=0
mesto[2]=0
$text[0]=mesto[0]+" место "+$name[0]+" рейтинг "+reit[0]+" провел "+fig[0]+" боев, из ниx победил "+win[0]+" проиграл "+loss[0]+" ничьих "+draw[0]+" побед Нокаутом "+wko[0]+" ID бойца "+id[0]
$text[1]=mesto[1]+" место "+$name[1]+" рейтинг "+reit[1]+" провел "+fig[1]+" боев, из ниx победил "+win[1]+" проиграл "+loss[1]+" ничьих "+draw[1]+" побед Нокаутом "+wko[1]+" ID бойца "+id[1]
$text[2]=mesto[2]+" место "+$name[2]+" рейтинг "+reit[2]+" провел "+fig[2]+" боев, из ниx победил "+win[2]+" проиграл "+loss[2]+" ничьих "+draw[2]+" побед Нокаутом "+wko[2]+" ID бойца "+id[2]
И в итоге надо получить что бы бойцы сортировались по рейтингу и им присваивались в массив места и все это отображалось как то так.
'<<$itext[0]>>'
'<<$itext[1]>>'
'<<$itext[2]>>'
где $itext[0]= массиву $text с самым большим рейтингом то есть массивом reit
Что бы я мог сделать в описании ссылку, в которой будут присвоены бойцу параметры. Но предыдущий метод просто создает еще один массив с распределенными значениями не затрагивая массив из которого эти значения были взяты.
Мне же нужно хранить данные массива в текстовом массиве и распределять эти массивы между собой по величине параметра рейтинг. Иначе я не смогу ни статистику вести бойцов, не вызывать нужные параметры.
Общий смысл всей этой затеи в том, что бы создать энное количество бойцов, например 100, с параметрами. Они автоматом бились бы друг с другом по очереди и распределялись по рейтингу. Игрок тоже мог участвовать в этом и вести своего бойца к титулу. С боевкой и прочим я справлюсь, но совсем застрял на этом вот распределении по рейтингу. Мне нужно что бы на экране были строчки в которых написаны бойцы, от чемпиона и далее. Строчки сделать через хтмл с возможностью вызова меню, когда выбираешь противника, то боевке присваивались параметры противника, дальше бой и новое перераспределение. Поэтому мне кровь из носу нужно не терять значения из массива $text, а отслеживать его от и до.
Хм… Не знаю, может быть это тебе предлагали, но я бы использовал такой способ:
1. Просто “вставляешь” (копируешь значение массива) всех бойцов в так сказать свою “таблицу” рейтинга:
$itext[1]= $text[1]
$itext[2]= $text[2]...
...и так далее
Можешь циклом воспользоваться
2. Потом тоже самое можешь сделать и с рейтингом, скопируя его в массив например reit_result (это нужно для того чтобы каждый боец потом имел действительно свой рейтинг)
3. Дальше вставляешь вот такой вот непонятный код:
i=1
:cycle2
j=i
:cycle3
if reit_result[i]<reit_result[j]:
$a=$itext[i]
b=reit_result[i]
$itext[i]=$itext[j]
reit_result[i]=reit_result[j]
$itext[j]=$a
reit_result[j]=b
end
if j<10:
j=j+1
jump'cycle3'
end
*pl'<<$itext[i]>> - его рейтинг: <<reit_result[i]>>'
if i<10:
i=i+1
jump'cycle2'
end
Я не очень могу объяснить что как тут работает, но принцип в том, чтобы сравнивать каждого последующего бойца с другими, находить самого “крутого” из них и ставить его на первое (и последующие) место в самой таблице, путем присваивания (где же я таких слов понабрался :) ) другим случайным переменным его значение (имя и рейтинг). Ну короче, я сам запутался пока объяснял, но если будут вопросы, постараюсь помочь :=D.
Можно ли в Аэре разместить текст (ну или картинку) по центру, по вертикальной оси? Пробовал через html (делал таблицу со значением style=“vertical-align: middle;”), однако ничего не получилось. Может я что-нибудь не так делаю? И еще прошу не предлагать смещать основное окно описания, так как у меня есть заголовок на верху. Заранее спасибки
AKA,
AeroQSP не поддерживает некоторые свойства CSS. К сожалению выравнивание по вертикали - одна из самых проблемных тем в вёрстке даже там где все свойства поддерживаются. Нормальных способов сделать это нет, везде используются костыли разной степени сложности. Понятно, что в AeroQSP они не работают.
AKA AeroQSP должен поддерживать вертикальное выравнивание.
“vertical-align: middle;” нужно прописывать для ячейки таблицы, при этом высоту ячейки можно указать принудительно (в случае, если в других ячейках строки таблицы нет элементов).
Byte, может быть мои руки не достаточно прямые, или я просто не совсем тебя понял, но код *pl ‘<table width=“100%” height=“100%”><tr width=“100%” height=“100%” style=“vertical-align: middle;”><td width=“100%” height=“100%” style=“vertical-align: middle;”>Тут должен быть текст</td></tr></table>’ приводит к появлению текста вверху :(
Farfignugen:
И в итоге надо получить что бы бойцы сортировались по рейтингу и им присваивались в массив места и все это отображалось как то так.
Мне же нужно хранить данные массива в текстовом массиве и распределять эти массивы между собой по величине параметра рейтинг. Иначе я не смогу ни статистику вести бойцов, не вызывать нужные параметры.
Возможно тебе поможет модуль работы с таблицами данных. Я обновил версию, там как раз есть команда сортировки таблицы по нескольким колонкам.
AKA, высоту таблицы/ячейки нужно указывать явно, в пикселях. По идее, достаточно так:
<table><tr><td height=“300” style=“vertical-align: middle;”>Тут должен быть текст</td></tr></table>
Если не заработает, то можно попробовать указать ширину ячейки в процентах: добавить к стилю “width:100%;”.
UPD: Кстати, height лучше указывать также стилем, а не отдельным атрибутом.
Byte,
Спасибо, все получилось (указал высоту и ширину стилем)
Выручайте: у меня тут вопрос встал:
IF astraluck = 1:
astraloot = rand (1, 25)
IF astraloot = 13:
msg "В результате Ваших действий ..."
mistloot = mistloot + 1
END
IF mistloot > 0 and no obj "Материя мироздания":
ADDOBJ "Материя мироздания"
END
По задумке я решил добавить предмет с вероятностью 1:25 в зависимости от выбранного действия.
Надеюсь я нигде не накосярякал? :)
THE FIEND,
шанс на выпадение считается правильно.
Но переменная mistloot не обнуляется, это приведёт к тому, что второй и все последующие разы выпадение будет с вероятностью 100%. Так как судя по коду эта переменная вообще лишняя, предлагаю сделать так:
IF astraluck = 1:
astraloot = rand(1, 25)
IF astraloot = 13:
MSG "В результате Ваших действий ..."
IF NO OBJ "Материя мироздания":
ADDOBJ "Материя мироздания"
END
END
END
Farfignugen:
И в итоге надо получить что бы бойцы сортировались по рейтингу и им присваивались в массив места и все это отображалось как то так.
Как я понял, тебе нужно отсортировать один массив, а позже перетасовать другие массивы соответственно первому. Для этого я специально писал две функции:
Spoiler
! array.sort
$args[0] = $args[0] & ! название сортируемого массива. Может сортировать как текстовые значения, так и числовые
$args[1] = $args[1] & ! параметр, который указывает в какую сторону сортируется массив. 'up' или '' - значения будут располагаться от большего к меньшему 'down' - значения будут располагаться от меньшего к большему.
$args[2] = $replace($args[2],'$') & ! имя массива, в который будут помещены номера элементов исходного массива в порядке сортировки
if $args[3]='': $args[3] = $args[0] & ! имя массива, в который будут помещены результаты сортировки. Т.е. отсортированные значения можно поместить в другой массив, не трогая исходный. Если не указать, результат сортировки будет помещён в исходный массив.
killvar 'easy_math_sort_array'
killvar 'easy_math_copy_array'
if instr($args[0],'$')=1: $args['$']='$' else $args['$']=''
copyarr $args['$']+'easy_math_copy_array',$args[0]
if $args[2]!'':
args['i']=0
:for
if args['i']<arrsize($args['$']+'easy_math_copy_array'):
easy_math_sort_array[args['i']]=args['i']
args['i']+=1
jump 'for'
end
end
args['i'] = 0
:prohody
if args['i']<arrsize($args['$']+'easy_math_copy_array'):
args['j']=args['i']
:sorting
if args['j']<arrsize($args['$']+'easy_math_copy_array'):
dynamic "if (<<$args['$']>>easy_math_copy_array[args[0]] < <<$args['$']>>easy_math_copy_array[args[1]] and ($args[2]='' or $args[2]='up')) or (<<$args['$']>>easy_math_copy_array[args[0]] > <<$args['$']>>easy_math_copy_array[args[1]] and $args[2]='down'):
<<$args['$']>>args['tmp'] = <<$args['$']>>easy_math_copy_array[args[0]]
<<$args['$']>>easy_math_copy_array[args[0]] = <<$args['$']>>easy_math_copy_array[args[1]]
<<$args['$']>>easy_math_copy_array[args[1]] = <<$args['$']>>args['tmp']
if $args[3]!'':
args['temp'] = easy_math_sort_array[args[0]]
easy_math_sort_array[args[0]] = easy_math_sort_array[args[1]]
easy_math_sort_array[args[1]] = args['temp']
end
end",args['i'],args['j'],$args[1],$args[2]
args['j']+=1
jump 'sorting'
end
args['i']+=1
jump 'prohody'
end
if $args[2]!'': copyarr $args[2],'easy_math_sort_array'
copyarr $args[3],$args['$']+'easy_math_copy_array'
killvar 'easy_math_sort_array'
killvar $args['$']+'easy_math_copy_array'
Не смотри, что громоздко, это только на первый взгляд. На самом деле код, выполняющий сортировку не такой уж и большой. В основном, перед ним, и после, находятся разные проверки и защита от дурака. Следующая программа, используя результаты из первой, переставит элементы других массивов на новые “правильные” места:
Spoiler
! array.retape
$args[0] = $args[0] & ! массив, элементы которого нужно перетасовать
$args[1] = $replace($args[1],'$') & ! массив, в который внесены номера элементов отсортированного массива (в его изначальном варианте) в порядке сортировки.
if $args[2] = '': $args[2] = $args[0] & ! имя массива, в который можно сохранить результат перетасовки. Можно не указывать, тогда результаты сохранятся в исходный массив.
killvar 'easy_math_sort_array'
killvar $args['$']+'easy_math_copy_array'
if instr($args[0],'$')=1: $args['$']='$' else $args['$']=''
copyarr 'easy_math_sort_array',$args[1]
args['i']=0
:for
if args['i'] < arrsize('easy_math_sort_array'):
dynamic $args['$']+"easy_math_copy_array[args[0]] = "+$args[0]+"[args[1]]",args['i'],easy_math_sort_array[args['i']]
args['i']+=1
jump 'for'
end
copyarr $args[2],$args['$']+"easy_math_copy_array"
Теперь для наглядности, пример:
Spoiler
reit[0]=15
reit[1]=10
reit[2]=25
$arm[0]='might'
$arm[1]='sparrow'
$arm[2]='hand'
pow[0]=333
pow[1]=444
pow[2]=55
gs 'array.sort','reit','down','res_array'
! {результат получится такой:
reit[0]=10
reit[1]=15
reit[2]=25
res_array[0]=1
res_array[1]=0
res_array[2]=2
! переставляем элементы в других массивах:}
gs 'array.retape','$arm','res_array'
gs 'array.retape','pow','res_array'
! {результат:
$arm[0]='sparrow'
$arm[1]='might'
$arm[2]='hand'
pow[0]=444
pow[1]=333
pow[2]=55
! res_array теперь можно уничтожить}
killvar 'res_array'
Т.е. был у нас герой с рейтингом 10, и стоял он на второй строчке хитпарада, владел оружием ‘sparrow’ и силой 444, мы переместили его на верхнюю строчку и он сохранил за собой и “оружие” и “силу”. :)
Nex,
Спасибо, я попробую так сделать…
А переменная мне нужна была, что бы сделать предмет численным, как тут быть тогда?
В запасе имеется <<mistloot>> шт.