Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
sul file da_2048_a_8192.txt, ci sono pochi errori.
Tu Ultimo già lo sai, lo spiego per chi ha poca dimestichezza.
Le tecniche sono due, le chiamo ad L e zigzag, le cambio e le combino in base alle esigenze.
Lo scopo primario è avere sulla riga 4 i numeri sempre progressivi, con il numero più grande a destra (pos 4,4)
come fare?
tecnica L: uso la colonna 1 per impilare i numeri dal più piccolo in alto al più grande in basso.
tecnica zigzag: uso la riga 3 per impilare i numeri, il più piccolo a destra e il più grande a sinistra.
Testo quotato
Postato originariamente da Ultimo:
Thread.Sleep(1000)
Immagino di caricare il file intero in una matrice e con un cursore scorrere la matrice avanti ed indietro, creando una moviola virtuale che permette di rivedere tutta la registrazione avanti ed indietro alla velocità voluta.
Ottime le due tecniche "L" e "zig zag"
Si potrebbe usare un Dizionario per il replay
Codice sorgente
Dim Sequenza_Mosse as Dictionary(Of integer.Of string())
If Animazione_On ThenCall Animazione_Pbx(Mat4x4Pict_2040(invr))
Me.Refresh()
'verifichiamo il punteggio
If Stato_eventi = Stato.AvviatoThen
Call Controlla_Punteggio()
Salva(invr)' gestire salvataggio on off, ' AGGIUNTO INDICE DELLA CASELLA ANIMATA
EndIf
EndSub
Attenzione, codice non testato.
si può anche richiamare: Verifica_Ultima_Potenza()
@Ultimo
in fase di [rivedi], non vedo una soluzione "semplice" per passare l'indice salvato della casella animata, il codice è un po' criptico, ci vuole la tua mano.
Codice sorgente - presumibilmente VB.NET
PrivateSub ButtRivedi_Click(sender AsObject, e As EventArgs)Handles ButtRivedi.Click
Debug.Print("Leggo dal file """& NomePartita &""" la scena salvata")
Dim objReader AsNew StreamReader(NomePartita)
' Leggo fino alla fine del file
Dim RigaLetta AsString
Do' gestire sospensione e passo passo
RigaLetta = objReader.ReadLine()
IfNot RigaLetta IsNothingThen
Dim Sequenza()AsString= RigaLetta.Split(";")
For i = 0 To 15
Dim r As Short = Math.Ceiling(i \ 4)
Dim c As Short = i Mod 4
Matrice4x4(r + 1, c + 1)= Sequenza(i)
Dim cAni As Int32 = Convert.ToInt32(Sequenza(17))' indice della casella animata da ripassare a Visualizza_Immagine_Celle2048(), attraverso Indx_Nuovo_Val?
Visualizza_Immagine_Celle2048(Matrice4x4)
Application.DoEvents()' se non inserito, l'uso della ram aumenta in modo incontrollato
Debug.Print("Leggo dal file """& NomePartita &""" la scena salvata")
Dim objReader AsNew StreamReader(NomePartita)
' Leggo fino alla fine del file
Dim RigaLetta AsString
Do' gestire sospensione e passo passo
RigaLetta = objReader.ReadLine()
IfNot RigaLetta IsNothingThen
Dim Sequenza()AsString= RigaLetta.Split(";")
For i = 0 To 15
Dim r As Short = Math.Ceiling(i \ 4)
Dim c As Short = i Mod 4
Matrice4x4(r + 1, c + 1)= Sequenza(i)
If Sequenza(i) > Max_Potenza_Raggiunta Then Max_Potenza_Raggiunta = Sequenza(i)
Next
Try' se si carica vecchia registrazione evita l'errore
Indx_Nuovo_Val = Sequenza(17)' indice della casella animata ripassato a Visualizza_Immagine_Celle2048(), attraverso Indx_Nuovo_Val
Catch
Animazione_On =False' variabile da gestire
EndTry
Visualizza_Immagine_Celle2048(Matrice4x4)
lblInfo.Text= Sequenza(16)' orario della mossa
lblInfo.Refresh()
Application.DoEvents()' se non inserito, l'uso della ram aumenta in modo incontrollato
If Animazione_On =TrueThen Thread.Sleep(100)
EndIf
Loop Until RigaLetta IsNothing
objReader.Close()
Timer1.Enabled=True
Stato_eventi = Stato.Avviato
InMovimento =False
EndSub
EDIT: Ho visto la tua soluzione, con il passaggio del parametro. Avevo risolto senza modificare il tuo codice, per evitare introduzione bug imprevisti.
Se ritieni valida la mia modifica, forse è meglio usarla.
EDIT EDIT: corretta ButtRivedi_Click
Aggiunti Timer1.enabled on/off
Aggiunto lblInfo.Refresh()
Tolti dal ciclo For i, le righe di codice che venivano eseguite inutilmente 16 volte
Tolta Animazione_On = False, ora si sceglie da menu
Inserito sleep se Animazione_On = True
EDIT EDIT EDIT:
Inserito controllo Max_Potenza_Raggiunta, senza usare routine.
Ultima modifica effettuata da Carlo il 27/06/2018 alle 12:35
Per le mosse nessun problema, basta contarle.
Per il punteggio, forse, la cosa più veloce è memorizzarlo nel file .txt mossa per mossa, invece di ricalcolarlo, che dici?
Ultima modifica effettuata da Carlo il 27/06/2018 alle 15:35
Per le mosse nessun problema, basa contarle.
Per il punteggio, forse, la cosa più veloce è memorizzarlo nel file .txt mossa per mossa, invece di ricalcolarlo, che dici?