Эта игра про короля холмов - стратегическая игра, в которой вы должны разбрасывать шарики с водой и избегать попадания брызг воды. Цель состоит в том, чтобы получить как можно больше очков. Вам будет предоставлена карта поля и расположение водяного шара. Вы можете либо вернуть то, что хотите ударить по водяному шару (если вы достаточно близко) в определенном направлении, либо что вы хотите двигаться в определенном направлении.
В частности: воздушный шар начнется с (0, 0)
высоты 30 единиц и упадет. Если водный шар падает на землю, игрок случайным образом будет выбран, чтобы потерять 4 очка, при этом больший вес будет отдан тем, кто находится ближе к воздушному шару. Кроме того, игрок, который последний раз ударил по воздушному шару, заработает 3 очка. Поэтому, если вы ударите по воздушному шару прямо вниз, вы, скорее всего, потеряете 1 очко.
Вы напишите класс, который расширяется Player
. Вы обязаны реализовать конструктор. Конструктор будет выглядеть так:
public Player1() {
super(/* Some numbers */ 3, 3, 4)
}
Эти цифры double
с. Первое число представляет скорость игрока, второе представляет силу, а третье представляет удачу. Числа должны составлять до 10 или менее, и ни одно число не может быть меньше или равно нулю.
Во-вторых, вы должны реализовать move
метод. Это пример move
метода:
@Override
protected Action move(Map<Player, Point2D> map, Balloon b) {
// Get my own location
Point2D myself = map.get(this);
// If I'm close enough to the balloon
// then hit the balloon
if (myself.distanceSq(b.getLocation()) <= 16) {
double d = (r.nextDouble() - 0.5) * 3;
// Random y direction, z direction is what's left
return new Hit(0, d, Math.sqrt(9 - d*d));
} else {
double diffX = b.getLocation().getX() - myself.getX(),
diffY = b.getLocation().getY() - myself.getY();
// Move towards the balloon
return new Movement(Math.signum(diffX)*3/Math.sqrt(2), Math.signum(diffY)*3/Math.sqrt(2));
}
}
Здесь есть много важных вещей. Во-первых, обратите внимание, что поле передается как Map<Player, Point2D>
. Поле бесконечно - нет предела тому, как далеко вы можете пройти. Это не двумерный массив или что-то в этом роде. Кроме того, это означает, что в качестве вашего местоположения у вас будут нецелые координаты. Это совершенно нормально.
Другое следствие - игроки и воздушный шар могут перекрываться. На самом деле, два игрока могут быть в одном месте!
Воздушный шар имеет определенную скорость и направление. Как правило, он будет падать со скоростью 3 единицы / шаг. Он также движется в x
направлении и y
направлении. Когда вы возвращаете a Hit
, вы передаете направления x, y и z, которые нажимаете на шарик. Вы не можете нажать на воздушном шаре, высота которого превышает 10 или, расстояние от вас (только в двух измерениях) больше 4. Кроме того, если это правда , что , x^2 + y^2 + z^2 > s^2
когда s
ваша сила, и x
, y
и z
те направления , которые вы пострадали , ваше действие отбрасывается. Сила вашего удара усиливается случайным числом между 0
и luck
(что означает, что оно может уменьшиться, если ваша удача невелика).
Кроме того , вы можете вернуть Movement
с x
и y
координатами , которые вы движущимися (обратите внимание , что вы не можете прыгать в воздухе). Если x^2 + y^2 > s^2
где s
ваша скорость, ваши действия отменяются.
Если водяной шар падает на землю, то выбирается случайный игрок, причем больший вес отдается тем, кто ближе всего, но меньший вес тем, у кого больше удачи. Выбранный игрок теряет 4 очка.
Контроллер: https://github.com/prakol16/water-balloon-wars/tree/master
Игра длится 1000 шагов. В конце будет файл с именем log.out
. Скопируйте и вставьте данные в эту скрипку для просмотра игры: https://jsfiddle.net/prankol57/s2x776dt/embedded/result/
Или, что еще лучше, просмотрите его в 3D: http://www.brianmacintosh.com/waterballoonwars (благодаря BMac)
Игрок с наибольшим количеством очков после 100 (может быть больше, но не меньше) игр выигрывает.
Если вы хотите отправить решение, вы можете прочитать действительно конкретные детали по адресу https://github.com/prakol16/water-balloon-wars/tree/master .
Изменить 3/8 :
На данный момент это окончательные результаты (1000 итераций, без учета игроков 1 и 2). Если вы отредактируете свой пост, вы можете оставить комментарий, а я переделаю оценки:
{
class players.BackAndForth=-75.343,
class players.Hydrophobe=-0.800,
class players.KeepAway=-53.064,
class players.Weakling=39.432,
class players.Repeller=21.238,
class players.LuckyLoser=-30.055,
class players.AngryPenguin=-49.310
}
Победитель получил Weakling
в среднем 39 баллов. 2 место было Repeller
с 21 очком.
источник
speed
иstrength
в конструкторе Player.dirX
,dirY
иdirZ
(усиливается вашей удачи) просто добавляются к скорости воздушного шара. Если его ударило несколько человек (что-то маловероятное), то игрок, который может получить три очка, решается на удачу (см. Конкретные подробности)Ответы:
имитатор
Я надеюсь, что это нормально, так как на самом деле это не запись. Мне очень понравилась идея визуального симулятора, и я хотел создать свой собственный, который бы немного облегчил одновременный просмотр всего (полное 3D).
2/28 9:06 PST : обновление с последующими элементами управления, цвета
3/4 8:47 PST : обновление с помощью ползунка для скорости симуляции и запуск новой игры на самом деле работает без обновления страницы (используйте Ctrl-F5 для перезагрузки кэшированного скрипта)
Онлайн ThreeJS визуализатор
источник
Назад и вперед
Этот бот пытается приблизиться и ударить по воздушному шару, пока его высота не станет слишком низкой, и он попытается уйти.
источник
AngryPenguin
Этот пингвин злится, потому что он не может взлететь на воздушный шар, поэтому он пытается ударить воздушный шар в лицо людей, стоящих вокруг него.
источник
слабовольный человек
Этот бот может касаться только воздушного шара, так как он очень слаб, вместо этого он просто полагается на свою удачу. Поэтому он работает так же, как LuckyLoser (из которого этот бот вдохновлен).
Он, кажется, превзошел всех текущих ботов, включая Repeller.
РЕДАКТИРОВАТЬ: уменьшена скорость в пользу удачи
источник
гидрофобное вещество
Это один из самых простых возможных ботов, но, поскольку он конкурентоспособен, я опубликую его.
Стратегия: хорошо ... эти боты ненавидят воду, поэтому она просто уходит.
Поскольку бот будет выплескиваться очень редко, в среднем он наберет чуть менее 0 баллов. Сумма баллов всех ботов равна -1 * [удар по шару], поэтому у Гидрофоба, вероятно, будет балл выше среднего.
источник
KeepAway
Этот игрок преследует воздушный шар, пока его высота> 2. Как только он может ударить воздушный шар, он ударяет воздушный шар от ближайшего игрока. Когда высота воздушного шара <2, этот игрок убегает.
Изменить: я играл с Player1 и Player2 включены. Этот игрок выигрывает в этом случае, но проигрывает, когда я их вынимаю. Booooo.
источник
Счастливый неудачник
Этот бот полагается на свою высокую оценку удачи. Если это не около воздушного шара, это бежит к воздушному шару. Оказавшись рядом с воздушным шаром, если в зоне действия воздушного шара есть по крайней мере 2 других игрока, он подбросит его на землю. В противном случае, он выбьет это прямо.
РЕДАКТИРОВАТЬ: Исправлена ошибка движения, из-за которой я убегал не к воздушному шару> _ <Теперь я бегу прямо к воздушному шару, если не могу его ударить.
источник
отражатель
У этого бота есть только один реальный ход, который состоит в том, чтобы продолжать отталкивать воздушный шар от себя. т.е. отталкивает шар.
Похоже, что он хорошо справляется с текущей культурой ботов (LuckyLoser, AngryPenguin, Hydrophobe, BackAndForth) почти всегда побеждает. Однако Гидрофоб по бездействию всегда готов победить, если всем остальным ботам удастся получить отрицательный счет: P
источник