ในเกม Yahtzee ผู้เล่นผลัดกันกลิ้งลูกเต๋า 6 ด้าน 5 ข้างได้ถึงสามครั้งต่อรอบอาจช่วยลูกเต๋าระหว่างม้วนจากนั้นเลือกหมวดหมู่ที่พวกเขาต้องการใช้สำหรับการหมุนของพวกเขา สิ่งนี้จะดำเนินต่อไปจนกว่าจะไม่มีหมวดหมู่เพิ่มเติม (ซึ่งเกิดขึ้นหลังจาก 13 รอบ) จากนั้นคะแนนของผู้เล่นจะถูกนับและผู้เล่นที่มีคะแนนสูงสุดจะเป็นผู้ชนะ
หมวดหมู่มีดังนี้ ("ผลรวมของลูกเต๋า" หมายถึงการเพิ่มจำนวนของลูกเต๋าบนลูกเต๋าที่ระบุ):
- ส่วนบน
- Aces : ผลรวมของลูกเต๋าที่แสดง 1 pip
- Twos : ผลรวมของลูกเต๋าที่แสดง 2 pips
- Threes : ผลรวมของลูกเต๋าที่แสดง 3 pips
- Fours : ผลรวมของลูกเต๋าที่แสดง 4 pips
- Fives : ผลรวมของลูกเต๋าที่แสดง 5 pips
- Sixes : ผลรวมของลูกเต๋าที่แสดง 6 pips
- ส่วนล่าง
- Three of a Kind : 3 ลูกเต๋าที่มีค่าเท่ากันคะแนนคือผลรวมของลูกเต๋าทั้งหมด
- สี่ชนิด : 4 ลูกเต๋าที่มีค่าเท่ากันคะแนนคือผลรวมของลูกเต๋าทั้งหมด
- Full House : 3 ลูกเต๋าโดยมีหนึ่งค่าและอีก 2 แต้มมีคะแนนเท่ากับ 25
- เส้นตรงเล็ก : 4 ลูกเต๋าเรียงตามลำดับคะแนนคือ 30
- Large Straight : 5 ลูกเต๋าเรียงตามลำดับ, คะแนนคือ 40
- Yahtzee : ลูกเต๋าทั้ง 5 ลูกที่มีค่าเท่ากันให้คะแนน 50
- โอกาส : การรวมกันของลูกเต๋าใด ๆ คะแนนคือผลรวมของลูกเต๋าทั้งหมด
มีกฎบางอย่างเกี่ยวกับตัวเลือกหมวดหมู่:
- หากผู้เล่นเลือกหมวดหมู่ที่ไม่ตรงกับม้วนของพวกเขาพวกเขาได้รับคะแนน 0 สำหรับหมวดหมู่นั้น
- หากผู้เล่นได้รับคะแนนอย่างน้อย 63 ในส่วนบนพวกเขาจะได้รับ 35 คะแนนโบนัส
- หากผู้เล่นได้โยน Yahtzee แต่หมวด Yahtzee ถูกนำไปแล้ว (โดย Yahtzee อื่น - การกรอก 0 เพื่อพลาดไม่นับ) พวกเขาจะได้รับโบนัส 100 คะแนน โบนัสนี้จะมอบให้กับทุก Yahtzee หลังจากครั้งแรก
- นอกจากนี้ผู้เล่นจะต้องเลือกที่จะกรอกหมวดหมู่ พวกเขาจะต้องเลือกหมวดส่วนบนที่สอดคล้องกับม้วนของพวกเขา (เช่นต้องวางม้วน 5 6 ในหมวด Sixes) หากหมวดหมู่ส่วนบนที่สอดคล้องกันได้ถูกใช้ไปแล้ว Yahtzee อาจถูกใช้สำหรับหมวดหมู่ส่วนล่าง (ในกรณีนี้เลือก Full House, Small Straight หรือ Large Straight ให้คะแนนปกติมากกว่า 0) หากหมวดหมู่ส่วนล่างทั้งหมดถูกนำมาใช้ Yahtzee อาจถูกนำไปใช้กับหมวดส่วนบนที่ไม่ได้ใช้ด้วยคะแนน 0
ความท้าทาย
ในการท้าทายนี้คู่แข่งจะเล่นเกมของ Yahtzee 1,000 เกม ในตอนท้ายของแต่ละเกมการส่งที่ทำคะแนนสูงสุดจะได้รับ 1 คะแนน หลังจากเกมทั้งหมดเสร็จสิ้นการส่งคะแนนมากที่สุดจะเป็นฝ่ายชนะ หากมีการเสมอกันจะมีการเล่นเกมเพิ่มเติมโดยมีการส่งผลเสมอเท่านั้นจนกว่าการแข่งขันจะยุติลง
ตัวควบคุม
รหัสคอนโทรลเลอร์ที่สมบูรณ์สามารถพบได้ในที่เก็บ GitHubนี้ นี่คือส่วนต่อประสานสาธารณะที่ผู้เล่นจะโต้ตอบ:
public interface ScorecardInterface {
// returns an array of unused categories
Category[] getFreeCategories();
// returns the current total score
int getScore();
// returns the current Yahtzee bonus
int getYahtzeeBonus();
// returns the current Upper Section bonus
int getUpperBonus();
// returns the current Upper Section total
int getUpperScore();
}
public interface ControllerInterface {
// returns the player's scorecard (cloned copy, so don't try any funny business)
ScorecardInterface getScoreCard(Player p);
// returns the current scores for all players, in no particular order
// this allows players to compare themselves with the competition,
// without allowing them to know exactly who has what score (besides their own score),
// which (hopefully) eliminates any avenues for collusion or sabotage
int[] getScores();
}
public enum Category {
ACES,
TWOS,
THREES,
FOURS,
FIVES,
SIXES,
THREE_OF_A_KIND,
FOUR_OF_A_KIND,
FULL_HOUSE,
SMALL_STRAIGHT,
LARGE_STRAIGHT,
YAHTZEE,
CHANCE;
// determines if the category is part of the upper section
public boolean isUpper() {
// implementation
}
// determines if the category is part of the lower section
public boolean isLower() {
// implementation
}
// determines if a given set of dice fits for the category
public boolean matches(int[] dice) {
// implementation
}
// calculates the score of a set of dice for the category
public int getScore(int[] dice) {
// implementation
}
// returns all categories that fit the given dice
public static Category[] getMatchingCategories(int[] dice) {
// implementation
}
}
public class TurnChoice {
// save the dice with the specified indexes (0-4 inclusive)
public TurnChoice(int[] diceIndexes) {
// implementation
}
// use the current dice for specified category
public TurnChoice(Category categoryChosen) {
// implementation
}
}
public abstract class Player {
protected ControllerInterface game;
public Player(ControllerInterface game) {
this.game = game;
}
public String getName() {
return this.getClass().getSimpleName();
}
// to be implemented by players
// dice is the current roll (an array of 5 integers in 1-6 inclusive)
// stage is the current roll stage in the turn (0-2 inclusive)
public abstract TurnChoice turn(int[] dice, int stage);
}
Util.java
นอกจากนี้ยังมีบางวิธีการสาธารณูปโภคใน พวกเขาส่วนใหญ่อยู่ที่นั่นเพื่อทำให้รหัสควบคุมง่ายขึ้น แต่ผู้เล่นสามารถใช้งานได้หากต้องการ
กฎระเบียบ
- ผู้เล่นไม่ได้รับอนุญาตให้มีปฏิสัมพันธ์ใด ๆ ยกเว้นการใช้
Scorecard.getScores
วิธีการเพื่อดูคะแนนปัจจุบันของผู้เล่นทุกคน ซึ่งรวมถึงการสมรู้ร่วมคิดกับผู้เล่นคนอื่นหรือก่อวินาศกรรมผู้เล่นอื่น ๆ ผ่านการจัดการส่วนต่างๆของระบบที่ไม่ได้เป็นส่วนหนึ่งของส่วนต่อประสานสาธารณะ - หากผู้เล่นทำการย้ายที่ผิดกฎหมายพวกเขาจะไม่ได้รับอนุญาตให้แข่งขันในทัวร์นาเมนต์ ปัญหาใด ๆ ที่ทำให้เกิดการเคลื่อนไหวที่ผิดกฎหมายจะต้องได้รับการแก้ไขก่อนที่จะมีการแข่งขัน
- หากมีการส่งข้อมูลเพิ่มเติมหลังจากดำเนินการทัวร์นาเมนต์แล้วการแข่งขันใหม่จะดำเนินการโดยมีการส่งใหม่และการส่งที่ชนะจะได้รับการอัปเดตตามนั้น ฉันไม่รับประกันความรวดเร็วในการเข้าร่วมทัวร์นาเมนต์ใหม่อย่างไรก็ตาม
- การส่งไม่สามารถใช้ประโยชน์จากข้อบกพร่องใด ๆ ในรหัสควบคุมที่ทำให้มันเบี่ยงเบนไปจากกฎของเกมจริง ชี้จุดบกพร่องให้ฉัน (ในความคิดเห็นและ / หรือในปัญหา GitHub) และฉันจะแก้ไขพวกเขา
- ห้ามใช้เครื่องมือสะท้อนของจาวา
- ภาษาใดก็ตามที่ทำงานบน JVM หรือสามารถรวบรวมเป็น Java หรือ JVM bytecode (เช่น Scala หรือ Jython) สามารถใช้ได้ตราบใดที่คุณระบุรหัสเพิ่มเติมใด ๆ ที่จำเป็นในการเชื่อมต่อกับ Java
ความคิดเห็นสุดท้าย
หากมีวิธียูทิลิตี้ใด ๆ ที่คุณต้องการให้ฉันเพิ่มไปยังตัวควบคุมเพียงแค่ถามในความคิดเห็นและ / หรือทำให้ปัญหาใน GitHub และฉันจะเพิ่มมันสมมติว่ามันไม่อนุญาตให้มีการทำลายกฎหรือเปิดเผยข้อมูล ผู้เล่นคนไหนไม่เป็นส่วนตัว ถ้าคุณต้องการเขียนด้วยตัวเองและสร้างคำขอดึงบน GitHub ยิ่งดีกว่า!
ACES
? คุณหมายถึงONES
อะไร นี่คือลูกเต๋าไม่ใช่ไพ่