Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    35

    metodo daicarta()...

    ciao a tutti..sto facendo un programma che simuli un gioco di carte...
    ho fatto le classi mazzo e carta e volevo chieder come faccio a selezionare una carta dal mazzo e poi mostrarla...

    qui vi posto le mie due classi:




    public class Carta {

    public final static int BASTONI = 0, // i 4 semi.
    COPPE = 1,
    DENARI = 2,
    SPADE = 3;

    public final static int ASSO = 1, //sono i valori non numerici a cui
    FANTE = 8, //andare ad attribuire il rispettivo valore numerico
    CAVALLO = 9, //dal 2 al 7 hanno i propri valori numerici
    RE = 10;

    private final int seme; // Il seme di questa carta è una delle costanti
    // BASTONI,COPPE,DENARI,SPADDE.

    private final int valore;

    //Costruttore il valore della carta e il seme devono essere inseriti

    public Carta(int ilValore, int ilSeme) {
    valore = ilValore;
    seme = ilSeme;
    }

    //Restituisce il valore intero attribuito al rispettivo seme

    public int getSeme() {
    return seme;
    }
    //Restituisce il valore intero attribuito alla carta

    public int getValore() {
    return valore;
    }

    //Restituisce la stringa che dice di che seme è la carta
    //se per sbaglio non c'è nessun seme alora stampa ??

    public String getSemeAsString() {
    switch ( seme ) {
    case BASTONI: return "Bastoni";
    case COPPE: return "Coppe";
    case DENARI: return "Denari";
    case SPADE: return "Spade";
    default: return "??";
    }
    }
    //Restituisce la stringa che dice il valore della carta
    //se per sbaglio il valore non è valido allora stampa ??

    public String getValoreAsString() {
    switch ( valore ) {
    case 1: return "Asso";
    case 2: return "2";
    case 3: return "3";
    case 4: return "4";
    case 5: return "5";
    case 6: return "6";
    case 7: return "7";
    case 8: return "Fante";
    case 9: return "Cavallo";
    case 10: return "Re";
    default: return "??";
    }
    }

    //Restituisce la stringa per dire la carta.
    //es.:"Asso di DENARI"....

    public String toString() {
    return getValoreAsString() + " di " + getSemeAsString();
    }


    //mi manca il metodo di prendere una carta
    //come dare la carta



    } // end Carta



    public class Mazzo {
    final static int TOTCARTE = 40;

    private Carta[] carte;
    private int N; // numero di carte




    public boolean isEmpty() { return (N == 0);}
    public int size() { return N; }


    // come mischiare le carte
    public void mescola() {
    for (int i = 0; i < N; i++) {
    int r = (int) (Math.random() * i);

    Carta scambia = carte[i];
    carte[i] = carte[r];
    carte[r] = scambia;
    }
    }



    public String toString() {
    String s = "Mazzo ";
    for (int i = N - 1; i >= 0; i--)
    s += carte[i] + " ";
    return s;
    }

    public Mazzo(){
    carte= new Carta[40];
    for(int ilseme=0;ilseme<=3;ilseme++){
    for(int ilvalore=1;ilvalore<=10;ilvalore++){
    carte[N++]=new Carta(ilvalore,ilseme);
    }
    }
    }

    public daicarta(){
    carte = new Carta[40];
    if()

    }
    // test client

    public static void main(String[] args) {
    Mazzo mazzo = new Mazzo();
    System.out.println(mazzo);
    mazzo.mescola();
    mazzo.mescola();
    mazzo.mescola();
    mazzo.mescola();
    mazzo.mescola();
    System.out.println("");
    System.out.println(mazzo);
    System.out.println("");

    }

    }


    grazie mille.

  2. #2
    Utente di HTML.it
    Registrato dal
    Mar 2007
    Messaggi
    230
    Ti preavviso che non sono un esperto però in prima battuta mi verrebbe da dire:
    1 la classe carta che nel tuo esempio è "italiana" , potresti creare un interfaccia di tipo Carta e poi estenderla o specializzarla come dir si voglia con le varie tipologie di carte: quelle francesi, quelle, italiane, ecc.

    2 il metodo prendere una carta, io no lo inserirei nella classe carta perchè logicamente non è molto corretto. La classe carta ha sostanzialmente due attributi (valore e seme) e deve impostarli (potresti creare dei metodi setValore(int valore)..) e deve restituire questi valori come hai fatto tu, ma perchè dovrei chiedere alla calsse carta "dammi una carta ?" questo metodo e ribadisco secondo me lo dovresti implementare nella clssse mazzo. Come?
    La prima idea che mi viene in mente è la seguente:
    Poichè al mazzo potresti chiedere di darti più di una carta dipende dal gioco e dal numero di partecipanti potresti creare il metodo
    Carta getCarta( ); che poi viene chiamtato più volte oppure direttamente
    Carta[] getCarta(int numeroCarte) che da un vettore di carte
    poi all'interno del metodo poichè le tue carte fanno parte di un array di carte, potresti estrarre causalmente gli indici di questo array, prendi le corrispetive carte dal vettore e le assegni ad un vettore di tipo Carta per il return.
    Decrementi del numero di carte estratte il mazzo (N- numeroCarte).
    Forse la cosa + difficile da realizzare è aggiornare il tuo vettore di carte dopo che hai estratto le carte, anche qui ci sono + strade:
    Una volta estratto l'elemento dal vettore ad esempio la carte[3] potresti mettere null al suo posto, alla successiva estrazione se viene estratto nuovamente il pedice 3 e l'oggetto è null fai una nuova estrazione finchè non viene trovato un oggetto diverso da null.
    Un modo più elegante è quello di "sistemare "volta per volta il vettore esempio:
    ....carte[14] carte [15] carte[16]..
    viene estratto 15 ->prendi carte [15]
    e poi trasli gli elementi dal 16 in poi di una posizione in avanti per fare ciò se non sbaglio ci sono dei metodi dedicati per i vettori.
    Scusa se non ti ho scrtitto del codice ma vado un pò di fretta ..spero di esserti stato di aiuto.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.