เกม king-of-the-the-hill เกมนี้เป็นเกมวางแผนที่คุณจะต้องโยนลูกโป่งน้ำและหลีกเลี่ยงการโดนน้ำ เป้าหมายคือเพื่อให้ได้คะแนนมากที่สุด คุณจะได้รับแผนที่ของสนามและที่ตั้งของบอลลูนน้ำ คุณสามารถกลับมาว่าคุณต้องการที่จะตีลูกโป่งน้ำ (ถ้าคุณอยู่ใกล้พอ) ในทิศทางที่แน่นอนหรือว่าคุณต้องการที่จะย้ายไปในทิศทางที่แน่นอน
โดยเฉพาะ: บอลลูนน้ำจะเริ่มที่(0, 0)
30 หน่วยและลดลง หากบอลลูนน้ำกระแทกพื้นผู้เล่นจะถูกสุ่มเลือกให้ลด 4 คะแนนโดยให้น้ำหนักแก่ผู้ที่อยู่ใกล้บอลลูนมากขึ้น นอกจากนี้ผู้เล่นที่ตีบอลลูนครั้งสุดท้ายจะได้รับ 3 คะแนน ดังนั้นหากคุณกดลูกโป่งลงไปคุณจะเสียคะแนนมากที่สุด 1 แต้ม
Player
คุณจะเขียนคลาสที่ขยาย คุณจะต้องใช้ตัวสร้าง ตัวสร้างจะมีลักษณะ:
public Player1() {
super(/* Some numbers */ 3, 3, 4)
}
ตัวเลขเหล่านี้เป็นdouble
s หมายเลขแรกหมายถึงความเร็วของผู้เล่นที่สองหมายถึงความแข็งแกร่งและที่สามหมายถึงโชค ตัวเลขต้องรวมกันไม่เกิน 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
เกมใช้เวลา 1,000 ขั้นตอน log.out
ในตอนท้ายจะมีไฟล์ที่เรียกว่า คัดลอกและวางข้อมูลลงในซอนี้เพื่อดูเกม: https://jsfiddle.net/prankol57/s2x776dt/embedded/result/
หรือดียิ่งขึ้นดูในแบบ 3 มิติ: http://www.brianmacintosh.com/waterballoonwars (ขอบคุณ BMac)
ผู้เล่นที่มีคะแนนรวมสูงสุดหลังจากเกมที่ชนะ 100 (อาจมากกว่า แต่ไม่น้อยกว่า)
หากคุณต้องการที่จะส่งวิธีการแก้ปัญหาที่คุณอาจต้องการที่จะอ่านรายละเอียดเฉพาะจริงๆที่https://github.com/prakol16/water-balloon-wars/tree/master
แก้ไข 3/8 :
เหล่านี้เป็นคะแนนสุดท้ายในตอนนี้ (1,000 รอบโดยไม่รวมผู้เล่น 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
(ขยายโดยโชคของคุณ) จะถูกเพิ่มเข้าไปในความเร็วของบอลลูน หากมีหลายคนเข้าชม (ค่อนข้างไม่น่าเป็นไปได้) ผู้เล่นที่อาจได้รับสามคะแนนจะถูกตัดสินด้วยโชค (ดูรายละเอียดที่เฉพาะเจาะจง)