Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
Олимпиада High Five
#1
В этих хрониках появилась такое нововведение ,как подбор противников по очкам. Т.е. если у игрока 1 очко то и попадется от с тем у кого 1 очко (ну или где-то рядом).

Подумал над этим вопросом, и прише к выводу, что можно реализовать вот так:
protected static final Participant[] createListOfParticipants(List<Integer> list)
{
if (list == null || list.isEmpty() || list.size() < 2)
return null;

int playerOneObjectId = 0;
L2PcInstance playerOne = null;
L2PcInstance playerTwo = null;
//first to sort the list
int buff[];
buff = new int[list.size()];
int i = 0;
while (i > 0)
{
buff[i] = Olympiad.getInstance().getNoblePoints(list.get(i));
i++;
}
Arrays.sort(buff);
i = 0;
while (i > 0)
{
//TODO convert points to objectsID
}
i = 0;
while (list.size() > 1)
{
playerOneObjectId = list.remove(i++);
playerOne = L2World.getInstance().getPlayer(playerOneObjectId);
if (playerOne == null || !playerOne.isOnline())
continue;

playerTwo = L2World.getInstance().getPlayer(list.remove(i++));
if (playerTwo == null || !playerTwo.isOnline())
{
list.add(playerOneObjectId);
continue;
}

Participant[] result = new Participant[2];
result[0] = new Participant(playerOne, 1);
result[1] = new Participant(playerTwo, 2);

return result;
}
return null;
}

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

Кстати ,надеюсь остальной код правильный, если нет хотелось бы услышать конструктивную критику...

P.S. l2j
Ответ
#2
Вход в мир High Five сам делал ?
Ответ
#3
Цитата:система Олимпиады стала абсолютно объективной - теперь соперниками будут ставиться персонажи с похожим количеством очков Олимпиады
https://forum.4game.ru/showthread.php?t=195267

Цитата:Вход в мир High Five сам делал ?
Не вполне понял о чем вы.
Ответ
#4
AmdAmdFtuk Написал:Не вполне понял о чем вы.
Да чувак уже месяц бегает по разработчикам и просит помочь реализовать вход в мир (пакетный уровень сервера) по High Five. XD

Вашей сортировкой вы ничего не добьетесь, стоит использовать "Сортировку Компаратором", создать свой класс, основывающийся на интерфейсе компаратора.. гуглим в общем.

А вообще при подборе соперника можно найти минимальное значение очков, которое ему и подходит и на втором круге ближайшего игрока с нужным кол-во очков сделать соперником. :+25 Duals:

Но, возможно гуру предложат более изощренный способ. :_smile_:
Ответ
#5
Цитата:Да чувак уже месяц бегает по разработчикам и просит помочь реализовать вход в мир (пакетный уровень сервера) по High Five.
Smile
Однако, это всё оффтоп, хотелось бы по теме услшать чего-нибудь Smile
Ответ
#6
AmdAmdFtuk Написал:Smile
Однако, это всё оффтоп, хотелось бы по теме услшать чего-нибудь Smile

А я отписал Smile, просто не успел дописать пост.
Ответ
#7
Цитата:А вообще при подборе соперника можно найти минимальное значение очков, которое ему и подходит и на втором круге ближайшего игрока с нужным кол-во очков сделать соперником.
Хм, тогда для каждого возможного значения очков, которое может проиграть игрок, а их 10, нужно будет изобретать способ нахождения подходящего кол-ва очков у оппонента, тем более ,что такого оппонента может не быть вовсе - допустим игрок с 20 очками а с ним в одном круге выступают 9 игроков 100-500 очков, тогда его не телепортнет, т.к. нет противника.

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

Цитата:Вашей сортировкой вы ничего не добьетесь, стоит использовать "Сортировку Компаратором", создать свой класс, основывающийся на интерфейсе компаратора.. гуглим в общем.
Сейчас посмотрим что за зверь такой "компаратор" Big Grin
Ответ
#8
AmdAmdFtuk Написал:Хм, тогда для каждого возможного значения очков, которое может проиграть игрок, а их 10, нужно будет изобретать способ нахождения подходящего кол-ва очков у оппонента, тем более ,что такого оппонента может не быть вовсе - допустим игрок с 20 очками а с ним в одном круге выступают 9 игроков 100-500 очков, тогда его не телепортнет, т.к. нет противника.
самых оптимальных методов сортировки придумано много лет назад и под разные случаи конечно да можно по изврашаться и сделать свой ну или готовые подобрать или чуть подправить, а по поводу нет соперника такого не будет так как осуществялеться методом наименьшего из всех ну или ближайщего те если у нас есть 3 игрока с очками 100 110 120 и один игрок с очками 10 то он попадет с игроком наиболее близким те с тем у кого 100 так в во всех случая даже если у тех 1000 а у него 1 да и кажеться минимальное колво очков для участия = 3 не зря же (хотя мб путаюSmile)
Ответ
#9
есть вариант использования TreeMultimap из google collections.
На идеальность не претендую, написал с тем, что первое попалось) какие именно условия должны соблюдаться не в курсе, знаю только то, что написано в этой теме.

Код:
public static final Comparator<Integer> KEY_COMPARATOR = new Comparator<Integer>()
{
    @Override
    public int compare(final Integer point1, final Integer point2)
    {
        if(point1 == null || point2 == null)
            return 0;
        return point1.compareTo(point2);
    }
};

public static final Comparator<Integer> VALUE_COMPARATOR = new Comparator<Integer>()
{
    @Override
    public int compare(final Integer objId1, final Integer objId2)
    {
        return objId1.compareTo(objId2);
    }
};

/**
* Список всех зарегистрированных, где ключ это количество очков.
*/
private static final TreeMultimap<Integer, Integer> registers = TreeMultimap.create(KEY_COMPARATOR, VALUE_COMPARATOR);

Вставить куда нить:
Пример

Результат

P.S.
objId от балды.

оффтом
[Изображение: l2nextgen.gif]
Ответ
#10
Big Grin и все же никто не понял как рассчитывает разрыв XD

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


[Изображение: shot00092z.png]

На тот момент было 280 зарегистрировавшихся.
Ответ


Возможно похожие темы ...
Тема Автор Ответы Просмотры Последний пост
  Олимпиада GoodYear15 10 2,360 02-08-2015, 03:48 PM
Последний пост: KID
  L2jServer 6670 high five DrooK 8 3,238 11-09-2014, 11:14 PM
Последний пост: Daan Raven
  Новая олимпиада (Interlude) smy55 37 7,973 01-13-2013, 08:24 PM
Последний пост: smy55
  Олимпиада Time of Gods 17 2,874 01-05-2013, 09:44 AM
Последний пост: L2CCCP
  Олимпиада JeweLs 2 3,178 09-15-2009, 01:46 PM
Последний пост: glGizma
  Не работающая олимпиада Иллидан 2 2,785 11-26-2008, 10:18 PM
Последний пост: [STIGMATED]

Перейти к форуму:


Пользователи, просматривающие эту тему: 1 Гость(ей)