บอทจรวด
ปีนี้คือปี 3024 ผู้คนขาดแคลนทรัพยากรที่จะเสี่ยงต่อสงครามมากเกินไปดังนั้นการต่อสู้จึงเปลี่ยนไปเป็นหุ่นยนต์ งานของคุณคือการสร้างบอทที่ไม่เหมือนใครจรวดของคุณจะถูกทำลายจากศัตรูของคุณและยิงการคุกคามที่เข้ามาทั้งหมด
เพลย์
บอท
การเล่นเกมเกิดขึ้นบนกริด 10x15 บอทของคุณอยู่นอกขอบด้านล่างและมีช่องสามช่องที่จุด 6,7 และ 8 ของตาราง คู่ต่อสู้ของคุณตั้งอยู่ที่ด้านบนของตารางโดยมีสามช่องตรงข้ามกับคุณ
จรวด
จากช่องเหล่านี้คุณสามารถยิงจรวดได้โดยสมมติว่าช่องนั้นไม่ถูกทำลาย จรวดประกอบด้วยรายการเส้นทางที่กำหนดให้เมื่อสร้างขึ้นและเมื่อยิงไปในทิศทางเหล่านี้จะไม่สามารถเปลี่ยนแปลงได้ จรวดจะหมุนไปด้านบนสุดของรายการและเคลื่อนที่ไปในทิศทางนั้น จรวดเคลื่อนที่พร้อมกัน หากจรวดทั้งสองจบลงในกระเบื้องเดียวกันพวกเขาทั้งสองจะระเบิด ถ้าจรวดหมดคำสั่งมันจะระเบิด หากจรวดหมดเชื้อเพลิงหลังจากผ่านไป 100 ครั้งมันจะระเบิด เมื่อจรวดระเบิดมันจะยังคงอยู่ในไทล์ 5 รอบทำให้เกิดจรวดอื่น ๆ ที่เคลื่อนที่ไปที่นั่นเพื่อระเบิดเช่นกัน
หมายเหตุ: เนื่องจากการเคลื่อนที่พร้อมกันทำให้จรวดสองลูกสามารถผ่านซึ่งกันและกันได้โดยไม่เกิดการระเบิดตราบใดที่พวกมันยังไม่จบเทิร์นในไทล์เดียวกัน
เป้าหมาย
เป้าหมายของการแข่งขันแต่ละครั้งคือการทำลายช่องของคู่ต่อสู้ในขณะที่รักษาชีวิตของคุณไว้ จรวดสามารถยิงได้จากช่องสดที่คุณมีและได้รับเส้นทางที่คุณกำหนดก่อนที่มันจะถูกยิง คุณยิงจรวดทุก ๆ เทิร์นที่ 2 หมายถึงจรวดจะเคลื่อนที่สองครั้งก่อนที่คุณจะยิงได้อีกหนึ่งครั้ง การดวลเป็นเวลา 200 รอบหรือจนกว่าจะหมดหนึ่งบ็อตสล็อตทั้งหมดจะถูกทำลาย
เกณฑ์การให้คะแนน
ในตอนท้ายของการแข่งขันคุณจะได้รับหนึ่งคะแนนสำหรับแต่ละสล็อตที่คุณมีอยู่และหนึ่งจุดสำหรับแต่ละคู่ต่อสู้ที่คุณทำลาย นี่หมายความว่ามันเป็นเกมที่ไม่มีผลรวมและจะมีการให้คะแนน 6 คะแนนในแต่ละนัด
โรบินกลมจะถูกเรียกใช้เพื่อให้บอทแต่ละคนหันหน้าไปทางบอทอีกครั้ง หากบอทใดใช้ RNG การแข่งขันแต่ละครั้งจะเป็น 1000 ดวลแทน
การดำเนินงาน
รหัสสำหรับการแข่งขันสามารถพบได้ที่นี่: https://github.com/Cain93/RocketBots
การส่งแต่ละครั้งควรขยายBot
ชั้นเรียน คุณต้องแทนที่fireRocket
วิธีการ วิธีนี้จะได้รับชุดข้อมูลแบบตารางของจรวดRocket[][]
ซึ่งแสดงถึงเกมบอร์ด คุณอยู่เสมอที่ด้านล่างของตารางที่มีช่องเสียบที่จุด[-1][6]
, ,[-1][7]
ในตารางจุดว่างจะถูกแทนด้วย[-1][8]
null
หากมีจรวดอยู่ในแผ่นกระเบื้องคุณสามารถระบุได้ว่าใครเป็นเจ้าของจรวดด้วยการเข้าถึงdis
ฟิลด์ "^" เป็นจรวดของคุณและ "v" เป็นคู่ต่อสู้ของคุณ
คุณต้องส่งคืน LinkedList ของจำนวนเต็มที่ให้คำแนะนำสำหรับจรวดของคุณ หากต้องการเลื่อนขึ้นให้ใช้ 0 หากต้องการเลื่อนขึ้นและไปทางขวาให้ใช้ 1 ขวาใช้ 2 และอื่น ๆ จนถึง 7 สำหรับด้านบนและซ้าย จรวดจะเคลื่อนที่ตามลำดับที่คุณกดจำนวนเต็ม ตัวอย่างเช่นรหัสต่อไปนี้จะทำให้จรวดเคลื่อนที่ขึ้นไปสองสามรอบ, zig-zag เลี้ยวสองสามรอบแล้วจึงทำให้เกิดการระเบิด
LinkedList<Integer> moves = new LinkedList<Integer>();
moves.push(0);
moves.push(0);
moves.push(0);
moves.push(1);
moves.push(7);
moves.push(1);
moves.push(7);
หากต้องการเปลี่ยนช่องที่จะยิงจรวดให้เปลี่ยนcurSlot
ช่อง 0 คือช่องซ้ายสุดของคุณและ 2 คือขวาสุดของคุณ getSlot(int slotNumber)
เพื่อตรวจสอบว่าช่องถูกทำลายใช้
ถ้าจรวดจบเทิร์นของสล็อตสล็อตนั้นจะถูกทำลาย คุณไม่จำเป็นต้องทำให้จรวดระเบิดด้วยตนเอง
หมายเหตุ:จรวดวางไข่ในตำแหน่งของช่องที่ยิงออกมา แต่จะเคลื่อนที่หนึ่งครั้งก่อนที่จะมีการชน ดังนั้นหากคุณยิงจรวดออกจากช่อง 0 และการเคลื่อนที่ครั้งแรกนั้นถูกต้อง (2) คุณจะทำลายช่องกลางของคุณเอง อย่างไรก็ตามการขึ้นและลง (1) เป็นการเคลื่อนที่ที่ปลอดภัย
หากคุณต้องการตั้งชื่อบอตของคุณให้แทนที่name()
เมธอด
บอตจะถูกสร้างขึ้นใหม่สำหรับการต่อสู้แต่ละครั้งดังนั้นตัวแปรแบบคงที่ใด ๆ จะถูกรีเซ็ต
โชคดี!
ขอให้จรวดของคุณบินได้จริงและฝ่ายตรงข้ามของคุณจะเป็นเพียงเศษเหล็ก
คำแนะนำ:
การจุดระเบิดจรวดเพื่อสร้างการระเบิดเป็นวิธีที่ง่ายกว่าในการป้องกันมากกว่าการพยายามยิงจรวดของฝ่ายตรงข้าม
บอทตัวอย่าง
package bots;
import java.util.LinkedList;
import mechanics.*;
public class SimpleBot extends Bot {
public String name(){
return "Simple";
}
public LinkedList<Integer> fireRocket(Rocket[][] g){
LinkedList<Integer> l = new LinkedList<Integer>();
for(int i = 0; i < 12; i++){
l.push(0);
}
return l;
}
}
คะแนน
คะแนนจาก 6-24
Simple: 900
Zigzagoon: 3654
Wall-E: 3606
Tortoise: 2248
3 Shot: 2334
HatTrickBot: 4287
Sniper: 2973
SideShooter: 2491
Terminator: 4835
StraightShot: 3378
Defender: 4570
MoreDakka: 4324