Эта игра про короля холмов - стратегическая игра, в которой вы должны разбрасывать шарики с водой и избегать попадания брызг воды. Цель состоит в том, чтобы получить как можно больше очков. Вам будет предоставлена карта поля и расположение водяного шара. Вы можете либо вернуть то, что хотите ударить по водяному шару (если вы достаточно близко) в определенном направлении, либо что вы хотите двигаться в определенном направлении.
В частности: воздушный шар начнется с (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
(усиливается вашей удачи) просто добавляются к скорости воздушного шара. Если его ударило несколько человек (что-то маловероятное), то игрок, который может получить три очка, решается на удачу (см. Конкретные подробности)