2013-09-23 100 views
-4

我的任務是讓「的Yahtzee」遊戲Java程序。 除了Small Straight方法,我幾乎完成了。 (不能弄明白。)「的Yahtzee」遊戲Java編程

小直是當骰子有4直數量。 (出12334,23345,34556,和等)

這裏是我的isSmallStraight方法的代碼(此代碼沒有完成!):

public static boolean isSmallStraight(List<Die> dice) { 

     boolean result = false; 

     List<Die> copy = new ArrayList<Die>(dice); 
     Collections.sort(copy); 

     List<Die> testCase1 = new ArrayList<Die>(); 
     testCase1.add(new Die(1)); 
     testCase1.add(new Die(2)); 
     testCase1.add(new Die(3)); 

     if(copy.containsAll(testCase1)) { 
      result = true; 
      System.out.println(result); 
     } 

     return result; 

    } 

我想在這裏做的是我通過來自主要方法(列表骰子)的5個隨機數的骰子並將它們放入「複製」對象中。 由於我需要使用java.util.List.containsAll()方法(需求),我想我需要使另一個對象「testCase1」與「複製」進行比較。 (如果你有其他方法來解決這個問題,至少你可以使用java.util.containsAll()方法)

但是,我現在不知道的是如果我使用dice.add(新的Die(3)),它意味着程序從1,2和3中選取隨機數。(不是數字3) - 另外,它給我編譯時的錯誤。

所以,我想知道我怎麼可以存儲骰子具體數字1,2,3和4的「testCase1」,2,3,4,和5「testCase2」,和3,4,5,和6爲「testCase3」,並使用copy.containsAll(testCase1)成爲true。

請儘快幫我越好!

PS。 Die class已經由我的教授編程。 (所以,不能改變任何Die類)。

+9

把_ASAP!_上'SO'發佈就像是downvotes – Reimeus

回答

5

把數字填進TreeSet擺脫重複的,並得到排序是免費的。

您有4個直骰子,如果:

  1. 集正好包含4個數字
  2. 最大和最小之間的差爲3
+0

磁鐵,你可以在代碼中寫的嗎?我無法用言語理解......大聲笑 – user2805708

+0

偉大的解決方案!我相信你可以在Web上找到一些TreeSet的例子。 –

+0

TreeSet testCase1 = new TreeSet (4); testCase1.add(1); testCase1.add(2); testCase1。加(3); testCase1.add(4); 這是你在說什麼? – user2805708

1

我喜歡用的方法(大和小直道以及所有其他評分)是從int數組中創建一個新的int數組,該int數組包含骰子值。像這樣:

int[] numDice = new int[6]; 
for (int i: diceValues) 
    numDice[i-1] += 1; 

這樣可以計算出所有的骰子,並將每個骰子的數量按順序排列在一個新的數組中。例如,如果你擲出的5個骰子是3,4,3,1和6,你的新數組將是{1,0,2,1,0,1},並且所有4的yahtzee將變成{ 0,0,5,0,0}。從這個新陣列中確定所有的分數是相當簡單的。對於直道:

int straightCount = 0; 
for (int i: numDice) { 
    if (i > 0) 
     straightCount++; 
    else 
     straightCount = 0; 
    if (straightCount > 3) 
     smallStraight = true; 
    if (straightCount > 4) 
     largeStraight = true; 
} 

如果你想,你可以使用這個數組可以輕鬆地確定在一個短的方法中的所有合法分數,和布爾值存儲在單個陣列中。