บทนำ
ในเกมนี้ผู้เล่นใช้กองทัพเพื่อต่อสู้กับกองทัพของผู้เล่นอื่นยึดครองดินแดนและกลายเป็นผู้ชายคนสุดท้ายที่ยืน ทุกเทิร์นผู้เล่นจะได้รับกองทัพจำนวนหนึ่งเพื่อใช้ในการจัดการ อย่างไรก็ตามในการจับภาพดินแดนในบางภูมิภาคผู้เล่นสามารถเพิ่มจำนวนนี้เพื่อให้ได้เปรียบในภายหลังในเกม (นี่เป็นหลักเหมือนกับWarlight )
บอตทั้งหมดควรเขียนใน Java, C หรือ C ++ (ฉันจะรวมภาษาอื่น แต่ไม่มีซอฟต์แวร์หรือประสบการณ์สำหรับพวกเขา) มันไม่ได้เป็นสิ่งที่จำเป็นสำหรับการส่งของคุณจะขยายชั้นเรียนและคุณอาจสร้างฟังก์ชั่น, เรียน, อินเตอร์เฟซหรือสิ่งอื่นเป็นสิ่งที่จำเป็นและใช้แพคเกจหรือระดับใด ๆ ในมาตรฐาน APIs หากคุณวางแผนที่จะสร้างคลาสหรืออินเทอร์เฟซโปรดพิจารณาใช้คลาสภายในหรืออินเทอร์เฟซภายใน
โปรดอย่าพยายามแก้ไขตัวควบคุมหรือการส่งอื่น ๆ โดยทางโปรแกรมในการแข่งขันครั้งนี้
เพลย์
ภาพรวม
อาร์เรย์สองมิติขนาด 10x10 จะจำลองบอร์ดซึ่งแต่ละองค์ประกอบ / เซลล์แสดงถึง "อาณาเขต" จะมี 20 รอบและสูงถึง 1,000 รอบต่อรอบ ผู้เล่นแต่ละคนจะปรับกองทัพที่พวกเขามีให้กับดินแดนใด ๆ ที่พวกเขาเป็นเจ้าของและจากนั้นจะได้รับโอกาสในการส่งกองทัพของพวกเขาไปยังดินแดนใกล้เคียงในความพยายามที่จะยึดครองดินแดนของฝ่ายตรงข้าม ผู้เล่นจะต้องปรับใช้กองทัพทั้งหมดของพวกเขา แต่พวกเขาไม่จำเป็นต้องย้ายพวกเขาหากต้องการ
โจมตี / ถ่ายโอนกองทัพ
หากผู้เล่นต้องการเขา / เธอสามารถส่งกองทัพจากดินแดนหนึ่งไปยังอีกแปดที่อยู่ติดกัน กระดาน "ล้อมรอบ" เช่นถ้าอาณาเขตของผู้เล่นอยู่ฝั่งหนึ่งกองทัพจากนั้นสามารถย้ายไปยังดินแดนที่อยู่ติดกันในอีกด้านหนึ่ง เมื่อมีการเคลื่อนย้ายกองทัพจากดินแดนอย่างน้อยก็ควรมีกองทัพเหลืออีกหนึ่งกองทัพในอาณาเขตนั้น ตัวอย่างเช่นหากดินแดนที่มีกองทัพห้ากองทัพไม่สามารถย้ายได้มากกว่าสี่แห่งไปยังดินแดนอื่น หากดินแดนมีอาณาเขตหนึ่งกองทัพนั้นจะไม่สามารถเคลื่อนที่ได้
หากผู้เล่นส่งn
กองทัพจากดินแดนหนึ่งไปยังอีกดินแดนที่พวกเขาเป็นเจ้าของดินแดนนั้นจะได้รับn
กองทัพ
สมมติว่าผู้เล่นส่งn
กองทัพจากดินแดนของเขา / เธอไปยังดินแดนฝ่ายตรงข้ามโดยมีo
กองทัพอยู่ในนั้น o
จะลดลงโดยn * .6
ปัดเศษเป็นจำนวนเต็มที่ใกล้ที่สุด อย่างไรก็ตามในเวลาเดียวกันn
จะลดลงโดยo * .7
ปัดเป็นจำนวนเต็มที่ใกล้ที่สุด กฎต่อไปนี้เกี่ยวข้องกับการยึดครองดินแดนฝ่ายตรงข้ามหรือไม่:
- หาก
o
ถึงศูนย์และn
มากกว่า 0 ผู้เล่นจะเข้ายึดครองดินแดนซึ่งจะมีn
กองทัพอยู่ในนั้น - หากทั้งสอง
n
และo
กลายเป็นศูนย์o
จะถูกตั้งค่าเป็น 1 โดยอัตโนมัติและอาณาเขตจะไม่ถูกยึด - หาก
o
ยังคงมีค่ามากกว่า 0 จำนวนกองทัพในดินแดนของผู้เล่นจะเพิ่มขึ้นn
และดินแดนฝ่ายตรงข้ามจะไม่ถูกยึด
โบนัส
กลุ่มของดินแดนจะถูกเลือกให้แสดงโบนัส; หากผู้เล่นคนหนึ่งครอบครองดินแดนทั้งหมดที่เป็นส่วนหนึ่งของกลุ่มผู้เล่นนั้นจะได้รับจำนวนกองทัพเพิ่มต่อเทิร์น
โบนัสมีหมายเลขประจำตัวเพื่อแสดงจำนวนและค่าต่าง ๆ ที่แสดงถึงจำนวนกองทัพพิเศษที่ผู้เล่นสามารถรับได้ ในแต่ละรอบค่าโบนัสจะเป็นตัวเลขสุ่มระหว่าง 5 ถึง 10 รวมและสิบโบนัสจะมีให้ในสนามซึ่งแต่ละพื้นที่จะมีสิบดินแดนรวมอยู่ในโบนัส
ตัวอย่างเช่นหากผู้เล่นที่ได้รับ 5 กองทัพต่อเทิร์นเป็นเจ้าของพื้นที่ทั้งหมดที่สร้างโบนัสด้วยค่า 8 ผู้เล่นจะได้รับ 13 กองทัพในเทิร์นถัดไปและเทิร์นถัดไป อย่างไรก็ตามหากผู้เล่นเสียพื้นที่หนึ่งครั้งหรือมากกว่านั้นซึ่งรวมกันเป็นโบนัสเขาหรือเธอจะได้รับเพียง 5 กองทัพต่อเทิร์น
Input / Output
โปรแกรมของคุณควรรับอินพุตผ่านอาร์กิวเมนต์บรรทัดคำสั่งซึ่งจะมีรูปแบบต่อไปนี้:
[id] [armies] [territories (yours and all adjacent ones)] [bonuses] ["X" (if first turn)]
id
และarmies
เป็นตัวเลขทั้งจำนวนid
คือรหัสของคุณและarmies
เป็นจำนวนกองทัพที่คุณต้องนำไปใช้กับดินแดนของคุณ คุณต้องปรับใช้กองทัพทั้งหมดที่มอบให้คุณ - ไม่มากและไม่น้อยterritories
เป็นชุดของสตริงที่แสดงถึงอาณาเขตที่คุณเป็นเจ้าของและอาณาเขตที่คุณไม่ได้เป็นเจ้าของที่อยู่ติดกับคุณ สตริงอยู่ในรูปแบบนี้:[row],[col],[bonus id],[player id],[armies]
row
และcol
ระบุแถวและคอลัมน์ของคณะกรรมการที่เป็นดินแดนเป็นbonus id
รหัสของโบนัสที่ดินแดนนี้เป็นส่วนหนึ่งplayer id
เป็นรหัสของผู้เล่นที่เป็นเจ้าของดินแดนและarmies
เป็นจำนวนกองทัพที่มีอยู่ในดินแดน นี่คือตัวเลขทั้งหมดbonuses
เป็นชุดของสตริงที่แสดงถึงโบนัสบนกระดานที่คุณสามารถใช้ประโยชน์ได้ สตริงอยู่ในรูปแบบนี้:[id],[armies],[territories left]
id
คือรหัสของโบนัสarmies
คือจำนวนกองทัพพิเศษที่คุณสามารถรับได้โดยการเป็นเจ้าของพื้นที่ทั้งหมดในโบนัสนี้และterritories left
เป็นจำนวนพื้นที่ในโบนัสที่คุณต้องจับเพื่อรับกองทัพพิเศษ
โปรดทราบว่าอาร์กิวเมนต์ที่ห้าคือ "X" จะปรากฏขึ้นหากเป็นการหมุนรอบแรกและสามารถใช้เพื่อความสะดวก
ตัวอย่างของการป้อนข้อมูลในเทิร์นแรก:
0 5 "7,6,7,-1,2 8,7,7,-1,2 7,7,7,0,5 6,6,7,-1,2 8,8,9,-1,2 6,7,7,-1,2 7,8,9,-1,2 6,8,9,-1,2 8,6,7,-1,2" "0,5,10 1,5,10 2,9,10 3,9,10 4,9,10 5,5,10 6,5,10 7,6,9 8,7,10 9,7,10" X
โปรแกรมของคุณจะต้องแสดงผลสองสายโดยคั่นด้วยบรรทัดใหม่รายการแรกจะแสดงแถวและคอลัมน์ของดินแดนที่คุณต้องการเพิ่มกองทัพและจำนวนกองทัพที่คุณต้องการเพิ่มเข้าไปและแถวที่สองจะแสดงแถว และคอลัมน์ของดินแดนที่คุณต้องการส่งกองทัพไปและจำนวนกองทัพที่คุณต้องการส่ง ผลลัพธ์อาจมีช่องว่างต่อท้าย
หากต้องการระบุอาณาเขตที่คุณต้องการเพิ่มกองทัพเอาท์พุทของคุณควรเป็นไปตามรูปแบบนี้:
[row],[col],[armies]
row
และcol
เป็นแถวและคอลัมน์ของกระดานที่อาณาเขตที่คุณต้องการเพิ่มกองทัพเป็นและarmies
เป็นจำนวนกองทัพที่คุณต้องการเพิ่มลงในดินแดน
หากต้องการระบุว่าคุณต้องการส่งกองทัพไปพื้นที่ใดเอาท์พุทของคุณควรเป็นไปตามรูปแบบนี้:
[srow],[scol],[drow],[dcol],[armies]
srow
และscol
เป็นแถวและคอลัมน์ของกระดานที่อาณาเขตที่คุณต้องการส่งกองทัพคือdrow
และdcol
เป็นแถวและคอลัมน์ของกระดานที่อาณาเขตที่คุณต้องการส่งกองทัพไปคือและarmies
จำนวนกองทัพที่คุณต้องการส่ง . โปรดทราบว่าหากคุณไม่ต้องการย้ายกองทัพใด ๆ โปรแกรมของคุณควรพิมพ์เว้นวรรค
ผลลัพธ์ตัวอย่างอาจเป็นดังนี้:
0,0,5
0,0,0,1,3 0,0,1,0,3 0,0,1,1,3
ในกรณีนี้ผู้เล่นปรับใช้ห้ากองทัพไปยังดินแดนที่ 0,0 และย้ายสามกองทัพจาก 0,0 ถึง 0,1; สามจาก 0,0 ถึง 1,0; และสามจาก 0,0 ถึง 1,1
รอบและรอบ
ในช่วงเริ่มต้นของแต่ละรอบผู้เล่นทุกคนจะได้รับหนึ่งดินแดนที่ตั้งอยู่ในจุดสุ่มบนกระดาน (เป็นไปได้ที่ผู้เล่นสองคนขึ้นไปจะเริ่มติดกัน) ดินแดนที่รวมกันเป็นโบนัสอาจมีการเปลี่ยนแปลง
ในเทิร์นแรกผู้เล่นแต่ละคนจะมีหนึ่งดินแดนที่มีห้ากองทัพและพวกเขาจะได้รับห้ากองทัพที่พวกเขาสามารถใช้ได้ ดินแดนอื่น ๆ ทั้งหมดจะเป็นเจ้าของโดย NPCs ที่ไม่ได้โจมตี -1
แต่ละเหล่านี้ประกอบด้วยกองทัพทั้งสองฝ่ายและมีรหัสของ
แต่ละเทิร์นโปรแกรมของคุณจะถูกเรียกใช้และเอาต์พุตทั้งสองชิ้นจะถูกรวบรวม ตัวควบคุมจะใช้ชิ้นส่วนแรกของการส่งออกเพิ่มกองทัพไปยังดินแดนทันที; อย่างไรก็ตามผู้ควบคุมจะรอจนกว่าผู้เล่นทุกคนจะได้รับชิ้นส่วนที่สองของพวกเขาออกคำสั่งโจมตี / โอน เมื่อสิ่งนี้เสร็จสมบูรณ์คำสั่งจะถูกสับแบบสุ่มและดำเนินการ โปรแกรมของคุณจะต้องให้ผลลัพธ์และยุติในหนึ่งวินาทีหรือน้อยกว่าเพื่อเข้าร่วมในเทิร์น
การให้คะแนนและการชนะ
สำหรับรอบใดก็ตามหากผู้เล่นคนใดคนหนึ่งยังคงอยู่ผู้เล่นนั้นจะได้รับ 100 คะแนน มิฉะนั้นหาก 1,000 รอบผ่านไปและยังคงมีผู้เล่นหลายคนคะแนน 100 คะแนนจะถูกแบ่งเท่า ๆ กันระหว่างผู้เล่นที่เหลือ ผู้เล่นคนใดที่มีคะแนนมากที่สุดในตอนท้ายของรอบ 20 จะเป็นผู้ชนะ
การส่ง
โพสต์ของคุณควรมีชื่อบอตภาษาที่เขียนคำอธิบายโดยย่อและรหัสที่ใช้เรียกใช้ บอทตัวอย่างจะโพสต์ที่นี่เป็นตัวอย่างและจะใช้ในการแข่งขัน คุณสามารถส่งได้มากเท่าที่คุณต้องการ
อื่น ๆ
โปรแกรมของคุณอาจสร้างเขียนและอ่านจากไฟล์ตราบใดที่ชื่อไฟล์นั้นเหมือนกับชื่อที่คุณใช้ในการส่ง ไฟล์เหล่านี้จะถูกลบก่อนการเริ่มต้นทัวร์นาเมนต์ แต่จะไม่อยู่ในระหว่างรอบ
ตาคุณจะถูกข้ามถ้า:
- คุณถูกกำจัด (ไม่มีดินแดน);
- โปรแกรมของคุณไม่พิมพ์อะไรเลย
- โปรแกรมของคุณจะไม่สิ้นสุดภายในหนึ่งวินาที
- คุณปรับใช้กองทัพน้อยเกินไปในพื้นที่ของคุณ (การปรับใช้กองทัพไปยังดินแดนที่คุณไม่ได้เป็นเจ้าของจะนับรวมในเรื่องนี้) หรือกองทัพมากเกินไป หรือ
- เอาท์พุทของคุณทำให้ตัวควบคุมเพื่อโยนข้อยกเว้น
คำสั่งโจมตี / ถ่ายโอนของคุณจะไม่ถูกดำเนินการหาก:
- โปรแกรมของคุณให้ผลลัพธ์ไม่ถูกต้อง
- คุณเลือกดินแดนที่จะย้ายกองทัพจากที่ไม่ใช่ของคุณ;
- คุณย้ายกองทัพออกจากศูนย์หรือจำนวนลบ
- คุณย้ายกองทัพมากเกินไปจากดินแดนของคุณ หรือ
- คุณเลือกอาณาเขตเพื่อส่งกองทัพไปยังที่ไม่ได้อยู่ติดกับดินแดนที่คุณเลือกที่จะย้ายกองทัพจาก
คุณสามารถค้นหาตัวควบคุมและบอตัวอย่างที่นี่ บอทจะเข้าร่วมในเกม แต่มันอาจจะไม่ชนะรอบใด ๆ (เว้นแต่จะโชคดีจริงๆ )
ผล
เรียกใช้ตัวควบคุมหลังจากกดแก้ไขข้อผิดพลาด WeSwarm ยังคงเป็นแรงที่จะคาดคิดด้วย มันจะใช้บอทที่มีกลยุทธ์ที่ยอดเยี่ยมที่จะมีโอกาสต่อสู้
As of 25-08-15, 04:40 UTC
1: WeSwarm 1420
2: java Player 120
java LandGrab 120
java Hermit 120
java Castler 120
6: java RandomHalver 80
แจ้งให้ทราบ!
ข้อผิดพลาดที่ค้นพบโดย Zsw ทำให้พื้นที่ซึ่งติดตั้งกองทัพหลังจากผู้อื่นมีข้อได้เปรียบในเกมได้รับการแก้ไขแล้ว มีการส่งการแก้ไขไปยังคอนโทรลเลอร์ดังนั้นโปรดใช้เวอร์ชันที่มีอยู่ซึ่งพบโดยใช้ลิงก์ด้านบน