Liar's Diceเป็นเกมลูกเต๋าที่ค่อนข้างง่าย ฉันเห็นกฎที่แตกต่างกันไปเล็กน้อย แต่นี่เป็นรุ่นที่ฉันคุ้นเคยมากที่สุด:
- ผู้เล่นแต่ละคนเริ่มต้นด้วย 5d6
- ยกเว้นเมื่อทำการทอยลูกเต๋าในตอนท้ายของรอบผู้เล่นแต่ละคนอาจเห็นลูกเต๋าของตัวเอง แต่ไม่ใช่ของฝ่ายตรงข้ามใด ๆ
- ในช่วงเริ่มต้นของรอบใด ๆ ผู้เล่นทุกคนหมุนลูกเต๋าอะไรก็ตามที่พวกเขามีอยู่ในปัจจุบัน
- จากนั้นผู้เล่นหนึ่งคน (โดยปกตินี่คือทั้งผู้ชนะในรอบก่อนหน้าหรือผู้เล่นทางด้านซ้ายของผู้เล่นที่เริ่มต้นครั้งที่แล้วเราจะใช้อดีตสำหรับ KotH นี้ด้วยผู้เล่นสุ่มเริ่มรอบแรก) ทำให้เดาได้ว่ามีหมายเลขใดจำนวนหนึ่งอยู่บนโต๊ะ(อยู่ที่ป่า)
- การเสนอราคาจะดำเนินต่อไปทางขวาจะสูงขึ้นในแต่ละครั้ง (ตัวอย่างเช่น 3 fives, 3 sixes และ 4 twos ทั้งหมดสูงกว่า 3 fours แต่ 3 threes ไม่ 3; 4 อันสูงกว่าเช่นกัน แต่การเสนอราคาอาจทำให้คุณ ข้อเสีย); จนกว่าผู้เล่นคนใดเรียกผู้เล่นก่อนหน้าพวกเขาว่าเป็นคนโกหก
- ณ จุดนี้ผู้เล่นทุกคนเปิดเผยลูกเต๋าของพวกเขาและนับจำนวนของการเสนอราคาจำนวนสุดท้ายบนโต๊ะทั้งหมด
- หากยอดรวมต่ำกว่าการประมูลผู้เล่นที่ทำการประมูลต้องให้ตายแก่ผู้เล่นที่เรียกพวกเขาว่าเป็นคนโกหกมิฉะนั้นผู้เล่นที่เรียกผู้ชนะการประมูลจะต้องให้ตายกับผู้ประมูล (ดังนั้นผู้ชนะจึงชนะ หากอย่างน้อยพวกเขาก็มีจำนวนมากเท่าที่เขามีการเสนอราคาไม่จำเป็นต้องมีจำนวนที่แน่นอน)
- เมื่อคุณหมดลูกเต๋าคุณก็แพ้
- ผู้เล่นคนสุดท้ายยืนชนะ
ตัวอย่างเช่น:
ผู้เล่นคนหนึ่งมี 1,1,2,4,6 ผู้เล่นสองมี 1,2,2,3,5 ผู้เล่นที่สามมี 1,3,3,4,6 ผู้เล่นคนที่หนึ่ง: สามแต้ม ผู้เล่นที่สอง: สี่ twos ผู้เล่นที่สาม: สี่สิบสาม ผู้เล่นคนที่หนึ่ง: ห้าครั้ง ผู้เล่นที่สอง: หก twos ผู้เล่นที่สาม: หกสิบ ผู้เล่นคนที่หนึ่ง: หกสี่คน ผู้เล่นที่สอง: โกหก! พวกเขาเปิดเผยลูกเต๋าของพวกเขาและนับคน (เพราะคนที่เป็นป่า) และสี่ ปรากฎว่าในความเป็นจริงมีแค่หกสี่เท่าเท่านั้น ดังนั้นผู้เล่นสองให้ผู้เล่นหนึ่งตาย พวกเขาเล่นใหม่และผู้เล่นคนหนึ่งเริ่มรอบต่อไป
คุณต้องเขียนบอทเพื่อเล่นเกมนี้ จะต้องใช้คลาส java นามธรรมต่อไปนี้:
public abstract class Player {
public Player() {}
public String toString() {
return this.getClass().getSimpleName();
}
public abstract String bid(int yourId, int[] diceEachPlayerHas, int[] yourDice, String[] bids);
}
- คุณต้องใช้วิธีการเสนอราคา
- อาร์กิวเมนต์แรกคือตำแหน่งปัจจุบันของบอทของคุณในลำดับเทิร์นที่สองคืออาร์เรย์แสดงจำนวนลูกเต๋าที่ผู้เล่นแต่ละคน (รวมถึงตัวคุณเอง) มีอยู่ในขณะนี้ที่สามคืออาร์เรย์ที่แสดงค่าที่แสดงบนลูกเต๋าของคุณในปัจจุบัน อาร์เรย์ของการเสนอราคาทั้งหมดที่ทำตั้งแต่เริ่มต้นรอบปัจจุบัน - จะมีความยาว 0 ถ้าคุณทำการประมูลครั้งแรกของรอบ
- เอาต์พุตควรเป็นสตริงของฟอร์ม "number face" หรือสตริง "Liar!" เพื่อเรียกร้องให้ผู้เสนอราคาก่อนหน้าเป็นคนโกหก
- หากผลลัพธ์ของคุณถูกฟอร์แมตอย่างผิดกฎหมายคุณจะถูกกำจัด
- คุณสามารถแทนที่เมธอด toString แต่ไม่จำเป็นต้อง อย่างไรก็ตามคุณไม่สามารถแก้ไขได้ในลักษณะที่รบกวนความสามารถในการอ่านเอาต์พุตของคอนโทรลเลอร์
- คุณได้รับอนุญาตให้เรียกวิธีการสาธารณะอื่น ๆ ของคอนโทรลเลอร์ แต่ไม่ใช่วิธีหลัก
- คุณสามารถอ่านและแก้ไขเฉพาะไฟล์ในไดเรกทอรีที่ทำงานอยู่ซึ่งมีคำนำหน้าชื่อบอทของคุณ
- คุณไม่ได้รับอนุญาตให้รับข้อมูลจากแหล่งอื่น
- ตัวแปรอินสแตนซ์จะถูกรีเซ็ตในช่วงเริ่มต้นของแต่ละเกมใหม่ แต่ตัวแปรแบบสแตติกไม่ใช่
เกณฑ์การให้คะแนน
- หนึ่งชุดของเกม 1,000 เกมที่มีผู้เล่น 3-5 คนในแต่ละครั้งจะถูกจำลองในแต่ละครั้งที่มีการเพิ่มบอท (ทันทีที่มีบอทสามตัวหรือมากกว่าถูกส่ง) คะแนนที่แสดงในแหล่งตัวควบคุม (ในเกมใดก็ตาม รับ 1 ในช่วงเริ่มต้นของแต่ละตาของคุณ 10 ครั้งในแต่ละครั้งที่คุณตายและ 1,000 โบนัสถ้าคุณชนะ) บังคับใช้ขีด จำกัด 5,000 TURNS (ไม่ใช่รอบ) ในแต่ละเกม
- บอทของคุณจะได้คะแนนจากคะแนนจากเกมล่าสุด บวกสิบเท่าของคะแนนการลงคะแนนหากไม่เป็นลบ (หลังไม่น่าจะมีผลกระทบอย่างมีนัยสำคัญกับคะแนน)
แหล่งที่มาของตัวควบคุมสามารถพบได้ที่นี่
คะแนน ณ วันที่ 2015-06-19:
Badnomial: 434,924 + 6x10 = 424,984
Nobody: 282,329 + 6x10 = 282,389
StraightShooter: 265,205 + 5x10 = 265,255
MostlyHonestAbe: 158,958 + 4x10 = 158,998
The Pirate: 157,005 + 1x10 = 157,015
Statistician: 144,012 + 2x10 = 144,032
Fidelio: 49,973 + 2x10 = 49,993
Absurd Bot: 6,831
DrHouse: 2,638 + 3x10 = 2,668
diceEachPlayerHas[yourId]
= จำนวนลูกเต๋าของคุณและbids[yourId]
เป็นการเสนอราคาครั้งแรกของคุณ ถูกต้องหรือไม่