Trò chơi vua đồi này là một trò chơi chiến lược, trong đó bạn phải ném xung quanh một quả bóng nước và tránh bị nước bắn tung tóe. Mục tiêu là để có được nhiều điểm nhất. Bạn sẽ được cung cấp một bản đồ của lĩnh vực và vị trí của quả bóng nước. Bạn có thể quay lại rằng bạn muốn đánh bóng nước (nếu bạn đủ gần) theo một hướng nhất định hoặc bạn muốn di chuyển theo một hướng nhất định.
Cụ thể: Bong bóng nước sẽ bắt đầu ở (0, 0)
mức cao 30 đơn vị và thả. Nếu quả bóng nước chạm đất, người chơi sẽ được chọn ngẫu nhiên để mất 4 điểm, với trọng lượng lớn hơn dành cho những người ở gần quả bóng hơn. Ngoài ra, người chơi đánh bóng cuối cùng sẽ kiếm được 3 điểm. Do đó, nếu bạn đánh bóng bay thẳng xuống, rất có thể bạn sẽ mất 1 điểm.
Bạn sẽ viết một lớp học mở rộng Player
. Bạn được yêu cầu thực hiện các hàm tạo. Hàm tạo sẽ như sau:
public Player1() {
super(/* Some numbers */ 3, 3, 4)
}
Những số này là double
s. Số đầu tiên đại diện cho tốc độ của người chơi, số thứ hai đại diện cho sức mạnh và số thứ ba đại diện cho may mắn. Các số phải thêm tối đa 10 hoặc ít hơn và không có số nào có thể nhỏ hơn hoặc bằng 0.
Thứ hai, bạn phải thực hiện move
phương pháp. Đây là một move
phương pháp ví dụ :
@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));
}
}
Có một số điều quan trọng ở đây. Đầu tiên, lưu ý rằng trường được thông qua là a Map<Player, Point2D>
. Trường là vô hạn - không có giới hạn về việc bạn có thể đi bao xa. Nó không phải là một mảng 2 chiều hay bất cứ thứ gì tương tự. Ngoài ra, điều này có nghĩa là bạn sẽ có tọa độ không nguyên làm vị trí của mình. Điều này là hoàn toàn ổn.
Một hậu quả khác là người chơi và khinh khí cầu có thể chồng lên nhau. Trong thực tế, hai người chơi có thể ở cùng một vị trí!
Bong bóng có vận tốc và hướng nhất định. Nói chung, nó sẽ giảm với tốc độ 3 đơn vị / bước. Nó cũng di chuyển theo một x
hướng và y
hướng. Khi bạn quay lại a Hit
, bạn chuyển các hướng x, y và z mà bạn đang đẩy bóng bay. Bạn không thể đánh một quả bóng có chiều cao lớn hơn 10 hoặc có khoảng cách từ bạn (chỉ trên hai chiều) lớn hơn 4. Ngoài ra, nếu đúng là x^2 + y^2 + z^2 > s^2
nơi s
là sức mạnh của bạn, và x
, y
và z
là hướng mà bạn nhấn , hành động của bạn bị loại bỏ. Lực đánh của bạn được khuếch đại bởi một số ngẫu nhiên giữa 0
và luck
(có nghĩa là nó có thể đi xuống nếu vận may của bạn thấp).
Tương tự, bạn có thể trả về a Movement
với x
và y
tọa độ mà bạn đang di chuyển (lưu ý rằng bạn không thể nhảy lên không trung). Nếu tốc độ của bạn x^2 + y^2 > s^2
ở đâu s
, hành động của bạn sẽ bị loại bỏ.
Nếu quả bóng nước chạm đất thì một người chơi ngẫu nhiên được chọn, với trọng lượng lớn hơn được trao cho những người gần nhất - nhưng ít trọng lượng hơn cho những người gặp nhiều may mắn hơn. Người chơi được chọn mất 4 điểm.
Trình điều khiển: https://github.com/prakol16/water-balloon-wars/tree/master
Trò chơi kéo dài 1000 bước. Cuối cùng, sẽ có một tập tin được gọi là log.out
. Sao chép và dán dữ liệu vào fiddle này để xem trò chơi: https://jsfiddle.net/prankol57/s2x776dt/embedded/result/
Hoặc thậm chí tốt hơn, xem nó dưới dạng 3D: http : //www.brianmacffy.com/waterballoonwars (nhờ BMac)
Người chơi có tổng điểm cao nhất sau 100 (có thể nhiều hơn, nhưng không ít hơn) các trò chơi sẽ thắng.
Nếu bạn muốn gửi giải pháp, bạn có thể muốn đọc các chi tiết thực sự cụ thể tại https://github.com/prakol16/water-balloon-wars/tree/master .
Chỉnh sửa 3/8 :
Đây là những điểm số cuối cùng cho đến bây giờ (1000 lần lặp, không bao gồm người chơi 1 và 2). Nếu bạn chỉnh sửa bài đăng của mình, bạn có thể nhận xét và tôi sẽ làm lại điểm số:
{
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
}
Người chiến thắng Weakling
với trung bình 39 điểm. Vị trí thứ 2 là Repeller
với 21 điểm.
speed
và strength
trong trình xây dựng Player.
dirX
, dirY
và dirZ
(khuếch đại bởi vận may của mình) chỉ đơn giản là thêm vào vận tốc của quả bóng. Nếu nhiều người trúng nó (hơi khó xảy ra) thì người chơi có thể nhận được ba điểm sẽ được quyết định may mắn (xem chi tiết cụ thể)