이 King-of-the-hill 게임은 물 풍선을 던져 물이 튀지 않도록해야하는 전략 게임입니다. 목표는 가장 많은 점수를 얻는 것입니다. 필드의지도와 물 풍선의 위치가 제공됩니다. 물 풍선을 (충분한 경우) 특정 방향으로 치고 싶거나 특정 방향으로 움직이고 싶을 때 돌아올 수 있습니다.
구체적으로 : 물 풍선은 (0, 0)
높이 30 단위로 시작하여 떨어집니다. 물 풍선이 땅에 닿으면 무작위로 4 점을 잃게됩니다. 또한, 마지막으로 풍선을 치는 플레이어는 3 점을 얻습니다. 따라서 풍선을 똑바로 누르면 1 포인트가 손실 될 수 있습니다.
당신은 확장하는 클래스를 작성합니다 Player
. 생성자를 구현해야합니다. 생성자는 다음과 같습니다.
public Player1() {
super(/* Some numbers */ 3, 3, 4)
}
이 숫자는 double
s입니다. 첫 번째 숫자는 플레이어의 속도를 나타내고, 두 번째 숫자는 힘을, 세 번째 숫자는 운을 나타냅니다. 숫자는 최대 10 이하이어야하며 숫자는 0 보다 작 거나 같을 수 없습니다.
둘째, 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>
. 필드는 무한합니다-얼마나 멀리 갈 수 있는지에 대한 제한은 없습니다. 2 차원 배열이 아닙니다. 또한 이는 정수가 아닌 좌표를 위치로 사용함을 의미합니다. 이것은 완벽하게 괜찮습니다.
또 다른 결과는 플레이어와 풍선이 겹칠 수 있다는 것입니다. 사실, 두 명의 플레이어가 정확히 같은 위치에있을 수 있습니다!
풍선에는 특정 속도와 방향이 있습니다. 일반적으로 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
좌표를 사용하여 a 를 반환 할 수 있습니다 (공중으로 점프 할 수 없음). 당신의 속도가 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 편집 :
현재 최종 점수입니다 (1 번과 2 번 선수는 포함하지 않고 1000 회 반복). 게시물을 수정하면 댓글을 달 수 있으며 점수를 다시 작성합니다.
{
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
플레이어 생성자에 있습니다.
dirX
, dirY
그리고 dirZ
(행운에 의해 증폭) 단순히 풍선의 속도에 추가됩니다. 여러 사람이 그것을 칠 경우 (