2013-09-23 6 views
-4

Мое задание - сделать игру «Яхтзее» на Java-программе. Я почти закончен, кроме метода малых прямых. (Невозможно это выяснить.)«Yahtzee» игра Java-программирование

Маленький прямой, когда кости получили 4 прямых номера. (. Ex 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 случайных чисел кубиков из основного метода (список кубиков) и поместить их в объект «copy». Поскольку мне нужно использовать 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 не может быть никакого изменения).

+9

Ввод _ASAP! _ На 'SO'-проводке, как магнит для downvotes – Reimeus

ответ

5

Поместите номера в TreeSet, чтобы избавиться от дубликатов и получить сортировку бесплатно.

У вас есть 4 прямые кости, если:

  1. Набор содержит ровно 4 числа
  2. Разница между наибольшим и наименьшим является 3
+0

Можете ли вы написать код, пожалуйста? Я не могу понять словами ... lol – user2805708

+0

Отличное решение! Я уверен, что вы можете найти несколько примеров TreeSet с номерами в Интернете. –

+0

TreeSet testCase1 = новый TreeSet (4); testCase1.add (1); testCase1.add (2); тестCase1.Добавить (3); testCase1.add (4); Вы об этом говорите? – user2805708

1

Метод, который я хотел бы использовать (большие и малые стриты, а также все остальные оценки) заключается в создании нового массива int из массива int, который содержит значения костей. Как это:

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

Это подсчитывает все ваши кости и ставит количество каждого из них, в порядке, в новом массиве. Например, если пять кубиков, которые вы прокатили, были 3, 4, 3, 1 и 6, ваш новый массив был бы {1, 0, 2, 1, 0, 1}, а yahtzee всех 4s превратился бы в { 0, 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; 
} 

Если вы хотите, чтобы вы могли использовать этот массив легко определить все действительные результаты в один короткий метод и хранить булевы в одном массиве.

Смежные вопросы