Tableaux multidimensionnels Java pour l'impression de cartes


Je pense que j'en ai fini avec les 3 premières étapes, alors essayez de m'aider sur les dernières, il semble que j'aie des problèmes avec les tableaux multidimensionnels où je dois imprimer les noms des parties et les cartes: Étapes pour faire le programme:

1)Utilisez les mathématiques.random () et l'opérateur restant pour générer 52 nombres distincts de 0 à 51. Ces numéros représenteront un jeu de cartes et appelons-le deckOfCard. (Vous avez maintenant un tableau unidimensionnel de taille 52.) Pour cette étape, vous devez écrire une méthode appelée generateCard qui ne renvoie rien mais accepte un argument qui est la variable de tableau qui représente le jeu de cartes (passer le tableau par référence).

2)Pour vous assurer que votre programme fonctionne, vous devez imprimer le numéro lorsque le tableau a été généré avant de passer à l'étape suivante. Écrivez une méthode appelée printCard qui ne renvoie rien mais accepte 3 arguments comme suit: (1) le tableau, (2) le nombre de sorties par ligne et (3) la largeur de chaque sortie. Vous allez appeler cette méthode pour imprimer le contenu du tableau au format de 13 numéros par ligne et 5 espaces par numéro.

3)Utilisez un tableau bidimensionnel de 4x13 représentant 4 mains de cartes. Appelons ça des mains. Écrivez une méthode appelée deal qui accepte deux arguments, l'un est la deckOfCard et l'autre est hands. Cette méthode distribue la carte aux quatre parties (supposons que l'ordre de distribution est Est, Nord, Ouest et Sud.)

Pour vous assurer que votre étape 4 fonctionne, vous devez appeler printCard avant de passer à l'étape suivante.

4)En supposant que Spade prendra les valeurs de 0 à 12, Heart de 13 à 25, Diamond de 26 à 38 et Club de 39 à 51. Vous allez écrire une méthode appelée printHands qui imprimera la main de chaque partie similaire à ce qui suit. NORD C: A Q J 10 9 2 H: J 8 2 D: K C: A J 9 Idem pour les autres directions Pour ce faire, un moyen simple consiste à configurer un tableau en 3 dimensions de 4x4x13 et appelons-le fourDecks. La première dimension représente un jeu de cartes et chacune des premières dimensions représente les cartes appartenant à chaque joueur. Initialement, toutes les valeurs sont toutes 0, indiquant qu'aucune n'appartient à aucun joueur. Les 2ème et 3ème dimensions représenteront une carte particulière. La valeur d'un emplacement particulier sera changée en " 1 " de " 0 " si cette carte est détenue par une certaine partie. Finalement, il y aura un total de 52 ’1 et chaque partie (ou chacune des 1ères dimensions) contiendra 13 ' 1 sans chevauchement

Voici le code que j'ai en ce moment:

public class DeckOfCard {
public static void main(String[] args) {
    int[] deckOfCard = new int[52];
    int[][] hands = new int[4][13];
    int[][][] fourDecks = new int[4][4][13];
    generateCard(deckOfCard);
    printCard(deckOfCard, 13, 5);
    deal(deckOfCard, hands);
    printHands(deckOfCard, 4, 13);

}
public static void generateCard( int[] deckOfCard) {

    //Initialize the cards
    for (int i = 0; i < deckOfCard.length; i++)
        deckOfCard[i] = i;


    //Shuffle the Cards
    for (int i = 0; i < deckOfCard.length; i++) {
        //Generate an index randomly
        int index = (int)(Math.random() * deckOfCard.length);
        int temp = deckOfCard[i];
        deckOfCard[i] = deckOfCard[index];
        deckOfCard[index] = temp;
    }
}

public static void printCard( int [] deckOfCard, int column, int  width) {       
    for (int i = 1; i <= deckOfCard.length; i++) {
        System.out.printf("%"+ width + "d" , deckOfCard[i-1] );

        if (i % column == 0 ) System.out.println();
    }
}

public static void deal(int[] deckOfCard, int[][] hands) {
    for(int i = 0; i < deckOfCard.length; i++) {
        for(int row = 0; row <= 3; row++) {
            for(int column = 0; column < 13; column++) {
                hands[row][column] = deckOfCard[i];
                i++;
                System.out.println(hands[row][column]);
            }
        }
    }
}

public static void printHands(int[] deckOfCard, int suit, int rank ) {
    String[] suits = {"Spades", "Hearts", "Diamonds", "Clubs"};
    String[] cases = {"EAST", "NORTH", "WEST", "SOUTH"};
    String[] ranks = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10",  "J", "Q", "K"}; 

    for (int i = 0; i < deckOfCard.length; i++) {
        String suit1 = suits[deckOfCard[i] / 13];
        String rank1 = ranks[deckOfCard[i] % 13];
        System.out.println(cases + " : " + deckOfCard[i]);
    }   
}

}

Author: Maljam, 2016-03-06

1 answers

Tout d'abord, votre méthode deal n'est pas tout à fait correcte. Vos instructions disent que vous devez distribuer les cartes de votre deck un joueur à la fois, vous devez donc imbriquer vos boucles différemment:

public static void deal(int[] deckOfCard, int[][] hands) {
    for(int i = 0; i < deckOfCard.length;) {
            for(int j = 0; j < 13; j++) {
                for(int p = 0; p < 4; p++) {
                hands[p][j] = deckOfCard[i];
                i++;
                System.out.println(hands[p][j]);
            }
        }
    }
}

Sinon, vous distribuez 13 cartes au premier joueur, puis 13 au second, et ainsi de suite.

Maintenant, vos instructions en 4, dites que vous devriez prendre le tableau int[][] hands, et le transformer en int[][][] dans votre méthode printHands, où la 1ère dimension représente quel joueur, la 2ème représente la suite de la carte, et 3ème la "valeur". En supposant que 0 est Ace et que 1-12 est de 2 à K, vous devriez commencer par quelque chose comme ça:

public static void printHands(int[][] hands) {
    String[] suits = {"Spades", "Hearts", "Diamonds", "Clubs"};
    String[] ranks = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10",  "J", "Q", "K"};
     String[] cases = {"EAST", "NORTH", "WEST", "SOUTH"};

    int[][][] fourDecks = new int[4][4][13];

    for(int i = 0 ; i < hands.length ; i++) {
        for(int j = 0 ; j < hands[i].length ; j++) {
            int card = hands[i][j], s = card/13;

            fourDecks[i][s][card%13] = 1;
        }
    }

    //print cards to console
    for(int i = 0 ; i < fourDecks.length ; i++) {
        System.out.print(cases[i]+" ");

        for(int j = 0 ; j < fourDecks[0].length ; j++) {
            System.out.print(suits[j] + ": ");

            for(int k = 0 ; k < fourDecks[0][0].length ; k++) {
                if(fourDecks[i][j][k] == 1) System.out.print(ranks[k] + " ");
            }
        }

        System.out.println();
    }
}
 1
Author: Maljam, 2016-03-06 23:47:29