PROBLEMA Java e il gioco scopa

icox

Utente Attivo
497
246
Devi decidere come vuoi gestire queste carte: o le tieni o le rimuovi dall'array.

Nel primo caso usi la soluzione dell'indice incrementale, quindi parti da 0 ed il metodo getCard() prende di volta in volta la carta puntata da tale indice e poi lo incrementa. L'array deve essere gia' mischiato.

Nel secondo caso generi un numero compreso fra 0 e la lunghezza dell'array, lo rimuovi dall'array (quindi ogni chiamata ridurra' la lunghezza della struttura di 1) e quindi lo ritorni. Questo secondo caso si presta meglio se usi arrayList o liste, visto che sono gia' implementati metodi per la rimozione degli oggetti dalla struttura. L'array non deve necessariamente essere mischiato, perche' prenderai di volta in volta un elemento casuale.

Se hai gia' implementato le funzioni per generare le carte e mischiarle usa il primo metodo. Ti basta avere un indice (intero) come campo, diciamo "index", che nel costruttore inizializzi a 0. Poi ad ogni chiamata prendi la carta in mazzo[index] e prima di terminare incrementi "index" di 1. Utile un controllo sul valore massimo di "index" che non dovra' mai essere maggiore di 39.
 

DarkGast

Nuovo Utente
45
0
Grazie per la risposta,volendo usare il primo metodo e volendo tenere le carte mi servirebbe sapere 2 cose:
1)come faccio a mischiarle le carte?
(Ho provato come dicevate bei messaggi precedenti ma facendo array =array[temp] poi array[j]= array e array temp = array [j] non VA
2)per il metodo descritto da te,se ho capito bene devo
Creare int index
Index=0;
Ogni volta che genero una carta
Index= index+1;
E gli dico che non deve essere >39
La domanda però é...che funzione avrebbe?
 

icox

Utente Attivo
497
246
Grazie per la risposta,volendo usare il primo metodo e volendo tenere le carte mi servirebbe sapere 2 cose:
1)come faccio a mischiarle le carte?
(Ho provato come dicevate bei messaggi precedenti ma facendo array =array[temp] poi array[j]= array e array temp = array [j] non VA
2)per il metodo descritto da te,se ho capito bene devo
Creare int index
Index=0;
Ogni volta che genero una carta
Index= index+1;
E gli dico che non deve essere >39
La domanda però é...che funzione avrebbe?
1) Certo che non va, non ha senso.
Codice:
// i e j sono gli indici degli elementi che vuoi scambiare
temp = array[i];
array[i] = array[j];
array[j] = temp;

2) in che senso che funzione avrebbe?
L'indice ti serve per iterare l'array, senza di esso come fai a sapere dove sei arrivato?
 

DarkGast

Nuovo Utente
45
0
Quindi facendo come hai scritto te dovrebbe andare?mi pare di aver provato ieri una soluzione del genere,e mi dava errore tipo int cannot be converted to object
Per il secondo avevo capito che mi avrebbe restituito dove sono arrivato,ma non avrebbe più senso fare da 40 fino a 0?
Un ultima cosa,se mischio le carte 0-39,genero il numero,lo mostro,lo prendo e lo sposto sull'elemento 40,prendo il 39 (sempre l'ultimo mai usato) e lo metto al posto del numero,genero il numero-1 e cosi via...non sarebbe un buon metodo per non far arrivare due carte uguali?Ho provato ieri ma,non riesco a spostarli

PS:hai un messaggio privato
 

icox

Utente Attivo
497
246
No, fai confusione con gli indici ed il numero di elementi.
L'indice 40 non esiste, avendo 40 carte nell'array l'indice piu' grande e' il 39 (gli array contano da 0).

Il discorso di spostare gli elementi nell'array ha senso solo se pensi di volerli togliere da questo, altrimenti non ti serve. Una volta che e' mischiato scorri l'array con un normale indice, ogni chiamata restituisce la carta a tale indice, quindi lo incrementa in modo che sia "pronto" per le chiamate successive.

Piu' che scriverti il codice non so come aiutarti. Pensa all'array, a come e' strutturato ed a come si accede ai valori dentro un array.
 

DarkGast

Nuovo Utente
45
0
Vediamo se capisco bene

L'indice prende nota dei numeri che escono e ne crea una lista.La lista viene creata usando il getCard(),ma poi come faccio a allegare il getCard() all'ImageIcon?
Pero poi tu hai detto che devo scorrere l'indice... In che senso? Una specie di return index?
Per incrementarlo intuisco che sia per la carta successiva (la cosa più semplice del discorso)

Se sono completamente fuori strada ti sarei infinitivamente grato di scrivermi il codice anche magari abbozzato o in modo che riesca a capire il senso senza pero avere la soluzione finale (visto che non ho molto tempo per sviluppare le regole e le ultime cose)
 

icox

Utente Attivo
497
246
Mmmh no, stai mischiando concetti diversi.

Siamo nella classe che mazzo: hai un array di oggetti Carta, non ordinato (quindi mischiato) e ti serve un indice per tenere traccia di quali carte hai gia' dato e quali no. Tale indice, inizializzato a 0, viene incrementato ogni volta che richiedi una carta. Tale funzione, sia getCard(), prende la carta nell'array nella posizione indicata da indice e l'incremento garantisce che la successiva chiamata non prenda nuovamente la stessa carta.

Poi una volta ritornata la usi come ti pare, la metti in una lista, in un altro array o dove ti sembra appropriato.
Carta e' una classe che ha dei campi (come per esempio il valore, il seme, il nome ecc) ai quali puoi accedervi per prendere le informazioni che ti servono, in qualunque classe tu sia.

Ti ho gia' messo per iscritto la mia idea su come procedere ed allegato un po' di codice da esempio, piu' di cosi vengo a scrivertelo io :asd:
Il modo che ti ho indicato e' uno dei tanti di procedere, non e' nemmeno detto sia il migliore o il piu' semplice.
Il problema a me sembra un altro pero': ti mancano un po' di basi, come ad esempio la gestione delle strutture dati, la suddivisione in classi del codice, l'accesso ai campi ecc...
Scrivendo si impara, ma alcune cose devi saperle bene prima di buttarti sul codice...
 

DarkGast

Nuovo Utente
45
0
Mmmh no, stai mischiando concetti diversi.

Siamo nella classe che mazzo: hai un array di oggetti Carta, non ordinato (quindi mischiato) e ti serve un indice per tenere traccia di quali carte hai gia' dato e quali no. Tale indice, inizializzato a 0, viene incrementato ogni volta che richiedi una carta. Tale funzione, sia getCard(), prende la carta nell'array nella posizione indicata da indice e l'incremento garantisce che la successiva chiamata non prenda nuovamente la stessa carta.

Poi una volta ritornata la usi come ti pare, la metti in una lista, in un altro array o dove ti sembra appropriato.
Carta e' una classe che ha dei campi (come per esempio il valore, il seme, il nome ecc) ai quali puoi accedervi per prendere le informazioni che ti servono, in qualunque classe tu sia.

Ti ho gia' messo per iscritto la mia idea su come procedere ed allegato un po' di codice da esempio, piu' di cosi vengo a scrivertelo io :asd:
Il modo che ti ho indicato e' uno dei tanti di procedere, non e' nemmeno detto sia il migliore o il piu' semplice.
Il problema a me sembra un altro pero': ti mancano un po' di basi, come ad esempio la gestione delle strutture dati, la suddivisione in classi del codice, l'accesso ai campi ecc...
Scrivendo si impara, ma alcune cose devi saperle bene prima di buttarti sul codice...

Inizio dalla tua conclusione...so che molte cose di base non le so,ma come ho detto all´inizio sono ad un livello infimo di conoscenza di java (visto che é un progetto aperto molte cose come array e arraylist non erano nemmeno mai stati accennati in lezioni precedenti)

Detto questo credo di aver capito il funzionamento della tua soluzione,provo a buttare giu qualche riga e se ho ancora problemi scrivo qua (spero di no,anche per te :P)

Concludo ringraziandoti (mi hai praticamente detto cosa scrivere lol ) e ringraziando tutti quelli che mi hanno risposto:luxhello:
 

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili