Ossequi a tutti,
per imparare VB ho realizzato un piccolo scacciapensieri: il gioco del 15.
In tale giochino bisogna allineare 14 (24 nel mio caso) caselline numerate in ordine crescente disponendole su una griglia quadrata e avendo come unica possibilità di spostamento lo spazio vuoto lasciato, di volta in volta, dalla casella che si ha appenna mosso.
E' stato molto divertente sviluppare questo mini-progetto fino a quando non ho implementato il mini-algoritmo per accorgersi se si ha vinto. Questo mi ha fatto invocare tutti i santi del calendario e, nonostante mi sia giocato il paradiso continua a persistere un errore di calcolo che non trovo.
codice:
Private Sub controlloVittoria()
'******************************************
'TODO: coreggere controllo risultato finale
'******************************************
Dim counter As Integer
Dim risultato As Integer = 0
Dim x As Integer
Dim y As Integer
For y = 0 To 4
For x = 0 To 4
counter = (y * 5) + (x + 1)
' 32 è la dimensione in pixels di una tessera
If tessere(counter).Left = x * 32 And tessere(counter).Top = y * 32 And counter <> 0 Then
tessere(counter).BackColor = Color.Cornsilk
risultato += 1
Else
Exit For
End If
Next
Next
For x = risultato + 1 To 24 'Vittoria!
tessere(x).BackColor = Color.WhiteSmoke
Next
If risultato = 24 Then
timerSecondi.Enabled = False
timerFine.Enabled = True
MsgBox("hai vinto!")
Else
tessere(risultato + 1).BackColor = Color.BlanchedAlmond
End If
End Sub 'Controlla se il gioco è finito
Nota: le funzioni di colorazione servono per colorare le caselle già allineate e per suggerire la prossima casella da allineare.
Per il mio cervello, molto più adatto ai liquori e all'erotismo piuttosto che alla programmazione, il codice non ha errori e dovrebbe andare ...ovviamente, però , non va
L'errore di calcolo è davvero strano e spesso considera alcune caselle in ordine anche quando non lo sono essendo, ad esempio, allineate bene ma sulla riga sbagliata.
Visto che non è possibile capirci qualcosa solo dalla funzione che ho postato allego tutto il progetto di cui non sono assolutamente geloso e, anzi, spero possa essere utile a qualcuno:
ScacciaPensieri
Il sorgente nello zip è calibrato in modo da assegnare la vittoria con solo 2 caselline allineate, settate la variabile alla riga 248 secondo i vostri gusti per per i test di debug.
Se trovate il tempo per darci un'occhiata fatemi sapere dove sbaglio, grazie!
Mannaggia