Problema su un algoritmo di controllo

Stato
Discussione chiusa ad ulteriori risposte.

MatteoM89

Utente Silver
24 Dicembre 2009
0
0
0
52
Salve a tutti, ho un piccolo problema nel creare un algoritmo efficace per effettuare un controllo su una matrice nel modo che adesso vi illustro.
Allora, quello che sto scrivendo è un giochino molto semplice che si svolge così: il giocatore si trova di fronte ad una tabella di grandezza variabile a seconda della difficoltà ma sempre del tipo n*n. In questa tabella ci sono palline di diversi colori (all'inizio la tabella è pressocchè vuota) e lo scopo è muoverle in modo da creare delle linee di tre o più palline dello stesso colore. Una volta fatta una linea questa scompare. Lo scopo è fare più punti possibili fino a che la tabella non si è riempita e non è più possibile fare spostamenti. Naturalmente gli inserimenti di nuove palline viene fatto in modo del tutto automatico ed casuale dopo ogni mossa fatta dall'utente. Ora il mio problema è che non riesco a scrivere un algoritmo in grado di controllare l'eventuale formazione di linee in seguito ad uno spostamento o un aggiunta automatica dopo tale spostamento. Personalmente avevo tentato sia di creare un controllo diretto su tutta la matrice-tabella dopo ogni operazione, sia partendo dall'elemento che viene inserito o spostato ma non ho avuto successo...Qualcuno (se ha capito il mio problema:asd:) ha qualche suggerimento? Accetto qualunque suggerimento e consiglio
 
Bé, su due piedi mi viene in mente:
Prendi le coordinate dell'ultimo cambiamento di stato.
Controlli negli indici di matrice + 1 e -1 (in tutte e due le direzioni) se a questo punto è presente un'altra pallina dello stesso colore.
Se vero, controlli se la successiva è tale, se sì (e se le righe devono essere di 3 palline) aggiorni la matrice di conseguenza; se no, procedi con il gioco. Se invece le righe non devono essere di 3 palline, continui con i controlli successivi e così via.

Se ti serve un'implementazione d'esempio, come al solito, chiedi.
 
orakool ha detto:
Bé, su due piedi mi viene in mente:
Prendi le coordinate dell'ultimo cambiamento di stato.
Controlli negli indici di matrice + 1 e -1 (in tutte e due le direzioni) se a questo punto è presente un'altra pallina dello stesso colore.
Se vero, controlli se la successiva è tale, se sì (e se le righe devono essere di 3 palline) aggiorni la matrice di conseguenza; se no, procedi con il gioco. Se invece le righe non devono essere di 3 palline, continui con i controlli successivi e così via.

Se ti serve un'implementazione d'esempio, come al solito, chiedi.

Le righe devono essere di almeno 3 palline ma se ce ne sono 4 deve eliminarne 4...il fatto è che a seconda di dove viene spostata la pallina c'è il rischio che in indici +1 e -1 scatti l'errore di di index out of bound, certo potrei anche impostare un precontrollo per ovviare il problema, ma la questione non cambia, avevo già testato la cosa ma non mi funzionava...se mi fai vedere un'implementazione d'esempio mi aiuterebbe a capire dove sbagliavo io...

Per quanto riguarda l'immagine che ha preso R4z0r_Cr4sH, diciamo che è al contrario di quella, infatti là la tabella è già piena e va svuotata, nel mio caso devi cercare di evitare che si riempi facendo queste righe....


Vi ringrazio comunque della risposta celere e ne approfitto per farvi tanti auguri per un felice Natale
 
mi è tutto chiaro...scusami ma quando ho letto la tua descrizione del problema mi ero appena svegliato xD
appena possibile butto giù qualcosa in java...tuttavia non dovrebbe essere difficile.
 
R4z0r_Cr4sH ha detto:
mi è tutto chiaro...scusami ma quando ho letto la tua descrizione del problema mi ero appena svegliato xD
appena possibile butto giù qualcosa in java...tuttavia non dovrebbe essere difficile.

Contento che sia riuscito a far capire il problema...in effetti non dovrebbe essere difficile, certo, dipende anche da come si affronta il problema, potrei scrivere una decina di for e coprire con una discreta certezza tutti i possibili casi per far avvenire il controllo ma il tutto appesantirebbe in modo devastante il programma. Comunque vorrei specificare che il controllo dovrebbe essere impostatosia su linee verticali che su linee orizzonatali, di base vorrei farlo anche per le diagonali ma iniziare a risolvere quelli più semplici va bene. Grazie mille
 
Stato
Discussione chiusa ad ulteriori risposte.