Хранение и чтение из ArrayList - PullRequest
       3

Хранение и чтение из ArrayList

0 голосов
/ 26 сентября 2018

Я принял предложение Берни, немного очистил свою программу и обновил

Я пытаюсь создать карточную игру Java, однако я нахожусь в точке, где мне нужно вычислить количество победкаждый игрок за все раунды.Мой код в настоящее время выглядит следующим образом:

import java.util.ArrayList;

public class Play {

public static void main(String[] args) {

 // initialize deck
 Cards CardsObject = new Cards();
 CardsObject.initializeDeck();
 String[] deck = CardsObject.getdeck();

 //shuffle
 Cards ShuffleObject = new Cards();
 ShuffleObject.shuffleDeck(deck);

 //distribute deck
 Cards distributeObject = new Cards();
 distributeObject.distributeDeck(deck);

 //print summary of rounds
 int numRounds=1;
 int hands=0;

 System.out.println("Status of all deals after 13:");

 while (numRounds<14){
   System.out.print("Deal Number "+numRounds+": ");
   printRounds(hands,deck);
   numRounds++;
   hands=hands+4;      
} 

//score


 }

public static void printRounds(int startIndex, String[] deck){
  System.out.print(deck[startIndex]);
  for (int l=startIndex+1;l<startIndex+4;l++){
      System.out.print(", "+deck[l]);
     }
     System.out.println();
 }

}

Мой другой класс выглядит следующим образом:

public class Cards {
String[] deck;

String[] suits = {"0","1","2","3"};

String[] ranks = {"2","3","4","5","6","7","8","9","10","11","12","13","14"};
int n = suits.length * ranks.length;

public void initializeDeck (){
deck = new String[n];
for (int i = 0; i < ranks.length; i++) {
 for (int j = 0; j < suits.length; j++) {
   deck[suits.length * i + j] = suits[j] + " " + ranks[i];
  }
 }
}
public void shuffleDeck(String[] deck){
for (int i = 0; i < n; i++) {
int r = i + (int)(Math.random() * (n - i));
String temp = deck[r];
deck[r] = deck[i];
deck[i] = temp;
}
}

public void distributeDeck(String[] deck){

   for (int i = 0; i < 4; i++) {
   System.out.println("Cards for Player " + (i + 1));

  for (int j = 0; j < 13; j++) {
  System.out.println(deck[i + j * 4] + " (Card " + (i + j * 4 + 1) + ")");
 }
 System.out.println();
 }
 }

 public String[] getdeck() {
   return deck.clone();
}
}

Я должен использовать arraylist, чтобы подсчитать количество раз, когда у игрока есть раунд, а затем также сможет объявить, кто выиграл игру.У меня все еще есть проблемы с обдумыванием того, как мне нужно заполнить список, чтобы иметь возможность определить, кто выиграл.

Способ выиграть раунд - определить, у какого игрока самый высокий результат.ранг лица, в случае, если есть ничья, тогда ранг масти определит победителя раунда (между двумя игроками).

Пример того, что завершенная программа должна вывести

Cards for Player 1
3 13(Card 1)
3 3(Card 5)
0 8(Card 9)
0 3(Card 13)
0 4(Card 17)
3 6(Card 21)
3 5(Card 25)
1 3(Card 29)
3 4(Card 33)
2 7(Card 37)
0 5(Card 41)
3 7(Card 45)
1 13(Card 49)

Cards for Player 2
2 6(Card 2)
1 2(Card 6)
2 14(Card 10)
1 10(Card 14)
1 14(Card 18)
2 3(Card 22)
1 8(Card 26)
1 11(Card 30)
0 9(Card 34)
0 14(Card 38)
0 11(Card 42)
0 7(Card 46)
1 12(Card 50)

Cards for Player 3
1 7(Card 3)
0 6(Card 7)
2 8(Card 11)
3 8(Card 15)
1 5(Card 19)
2 13(Card 23)
2 9(Card 27)
2 12(Card 31)
1 6(Card 35)
3 2(Card 39)
1 9(Card 43)
3 11(Card 47)
0 12(Card 51)

Cards for Player 4
2 5(Card 4)
1 4(Card 8)
3 14(Card 12)
2 11(Card 16)
2 10(Card 20)
3 12(Card 24)
2 2(Card 28)
0 13(Card 32)
0 10(Card 36)
3 10(Card 40)
0 2(Card 44)
3 9(Card 48)
2 4(Card 52)

Deal Number 01: 3 13, 2 6, 1 7, 2 5
Deal Number 02: 3 3, 1 2, 0 6, 1 4
Deal Number 03: 0 8, 2 14, 2 8, 3 14
Deal Number 04: 0 3, 1 10, 3 8, 2 11
... etc

Deal winners:
Player:   No. of Deal(s) Won
1:        1
2:        6
3:        2
4:        4
Overall winner(s): Player-2

1 Ответ

0 голосов
/ 26 сентября 2018

Есть много способов улучшить ваш код, но я постараюсь ответить на ваши конкретные вопросы:

1) Используйте метод, который занимает startIndex.Что-то вроде:

private void printDeal(int startIndex) {
    System.out.print(deck[startIndex]);
    for (int l = startIndex + 1; l < startIndex + 4; l++) {
        System.out.print(", " + deck[l]);
    }
    System.out.println();
}

Действительно, каждая сделка должна быть отдельным объектом или, как минимум, отдельными массивами.Вам просто будет все труднее хранить данные в одном массиве.

2) Я бы предложил написать класс для представления раунда, но если вы должны использовать ArrayList s,да, я бы посоветовал новый ArrayList для каждого раунда.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...