Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
2048+ the Game - 2048 aggiunte

2048+ the Game

Sommario | Admin | Forum | Bugs | Todo | Files

Pagine: [ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 ] Precedente | Prossimo
Avatar
Mikelius (Member)
Expert


Messaggi: 525
Iscritto: 14/04/2017

Segnala al moderatore
Postato alle 13:01
Venerdì, 22/06/2018

Si setta anche il ShortcutKeyDisplayString...? :yup: scontato, dopo che lo sai... :rofl:
E' sempre una buona cosa guardare dentro al designer, si capiscono un sacco di cose.
Il ShortcutKeyDisplayString si setta anche da proprietà :k:

si, un consiglio. Imposta l'elenco delle proprietà im modo alfabetico. Così cercando ShortcutKey l'avresti subito vista (è nella categoria Aspetto e non in varie come le altre 2)

PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1344
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 13:16
Venerdì, 22/06/2018
Testo quotato

Postato originariamente da Mikelius:


Si setta anche il ShortcutKeyDisplayString...? :yup: scontato, dopo che lo sai... :rofl:
E' sempre una buona cosa guardare dentro al designer, si capiscono un sacco di cose.
Il ShortcutKeyDisplayString si setta anche da proprietà :k:

si, un consiglio. Imposta l'elenco delle proprietà im modo alfabetico. Così cercando ShortcutKey l'avresti subito vista (è nella categoria Aspetto e non in varie come le altre 2)

:k::k:


in programmazione tutto è permesso
PM Quote
Avatar
Ultimo (Member)
Guru


Messaggi: 877
Iscritto: 22/05/2010

Segnala al moderatore
Postato alle 15:05
Venerdì, 22/06/2018
Testo quotato

Postato originariamente da Carlo:

Testo quotato

Postato originariamente da Mikelius:

Testo quotato

Postato originariamente da Ultimo:

@Mikelius
@Carlo

Ho reinserito una nuova versione 9.3.3

ho corretto il codice, adesso funziona :k:



Non ho visto l'ultimo codice, ma ho scoperto il problema del precendete.
Io tramite il Menu' chiamavo l'evento che a sua volta richiamava la routine
ImmSet_Click(), mentre col tasto richiamavo direttamente la routine in questione.
Tu invece con i tasti richiami sempre l'evento che ha problemi a reperire l'integer del TAG.
Ecco perchè dava errore


Confermo, i numeri non funzionavano, codice vecchio e nuovo mescolato, ora ok!

@Ultimo
Ho visto che non hai ancora inserito TipoGrafica1, la lista colori elimina un bel po' di ElseIf
Sul menu Selezione Set Immagini, le voci Set1 e Set4 hanno uno spazio a sinistra.

Tutte le modifiche, che hanno compattato il codice, mi piacciono.

Manca la guida e l'autosoluzione (ci metterò mano al più presto):heehee:



Per l'autosoluzione mi è venuta un idea:

Creare una IA che simula la tua tecnica delle mosse,

ma lo fai prima senza mostrarlo a video, tipo bruteforze

memorizzi sempre le mosse passo passo in una lista di matrici,

quando arriva a 2048 esce e presenti la sequenza delle matrici valida

con regolazione del tempo di esecuzione :k:


If ok Then GOTO Avanza else GOTO Inizia

PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1344
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 15:56
Venerdì, 22/06/2018
Testo quotato

Postato originariamente da Ultimo:

Per l'autosoluzione mi è venuta un idea:

Creare una IA che simula la tua tecnica delle mosse,

ma lo fai prima senza mostrarlo a video, tipo bruteforze

memorizzi sempre le mosse passo passo in una lista di matrici,

quando arriva a 2048 esce e presenti la sequenza delle matrici valida

con regolazione del tempo di esecuzione :k:



Ho già fatto una cosa simile.
ho scritto 4 routine che agiscono sulla matrice e il random senza visualizzare:
MDown()
MRight()
MLeft()
MUp().

Quando si avvia l'autosoluzione,
memorizzo lo stato della matrice

esguo 4 mosse richiamando le routine, ecco un estratto del tentativo 1:

Codice sorgente - presumibilmente Plain Text

  1. posAttuale = -4
  2.  
  3.           ' tentativo 1
  4.             posAttuale += 4
  5.             MemorizzaTentativi(posAttuale, ArrayTestMosse) ' originale
  6.  
  7.             MDown()
  8.             posAttuale += 4
  9.             MemorizzaTentativi(posAttuale, ArrayTestMosse)
  10.  
  11.             MRight()
  12.             posAttuale += 4
  13.             MemorizzaTentativi(posAttuale, ArrayTestMosse)
  14.  
  15.             MDown()
  16.             posAttuale += 4
  17.             MemorizzaTentativi(posAttuale, ArrayTestMosse)
  18.  
  19.             MRight()
  20.             posAttuale += 4
  21.             MemorizzaTentativi(posAttuale, ArrayTestMosse)
  22.  
  23.             Ripristina(0, ArrayTestMosse)


memorizzando le mosse nella matrice  ArrayTestMosse.

Ripristino lo stato iniziale
eseguo il tentativo 2, con mosse diverse
Ripristino lo stato iniziale
eseguo il tentativo 3, con mosse diverse
Ripristino lo stato iniziale
eseguo il tentativo 4, con mosse diverse
Ripristino lo stato iniziale
eseguo il tentativo 5, con mosse diverse
Ripristino lo stato iniziale

I 5 tentativi producono disposizioni distinte
Eseguo una valutazione sul punteggio
Scelgo il tentativo migliore, lo inserisco nella matrice principale e visualizzo.

con questo sistema si raggiunge 1024 nel 50% dei casi, ma è solo la partenza.

Cosa manca, che potrebbe migliorare la situazione?
In parte lo avevo già fatto nella mia precedente autosoluzione, che raggiunge un 1024 insieme a un 512, nel 50% dei casi

1) la valutazione quando lo schema non è pieno, va fatta sulle caselle vuote, con un ordine di priorità lati centro

Vecchio codice:

Codice sorgente - presumibilmente VB.NET

  1. Function calcolaVuoti() As Integer
  2.         Dim calcolaV As Integer
  3.         Dim VuotiAttuali As Integer
  4.  
  5.         For calcolaV = 1 To 4
  6.             If Matrice4x4(calcolaV, 1) = 1 Then VuotiAttuali += 1
  7.             If Matrice4x4(calcolaV, 2) = 1 Then VuotiAttuali += 1
  8.             If Matrice4x4(calcolaV, 3) = 1 Then VuotiAttuali += 1
  9.             If Matrice4x4(calcolaV, 4) = 1 Then VuotiAttuali += 1
  10.         Next
  11.         Debug.Print("VuotiTotali" & VuotiAttuali)
  12.         Return VuotiAttuali
  13.     End Function
  14.  
  15.     Function calcolaVuotiLato() As Integer
  16.         Dim calcolaV As Integer
  17.         Dim VuotiAttuali As Integer
  18.  
  19.         For calcolaV = 1 To 2
  20.             If Matrice4x4(calcolaV, 1) = 1 Then VuotiAttuali += 1
  21.             'If Matrice4x4(calcolaV, 2) = 1 Then VuotiAttuali += 1
  22.             ' If Matrice4x4(calcolaV, 3) = 1 Then VuotiAttuali += 1
  23.             If Matrice4x4(calcolaV, 4) = 1 Then VuotiAttuali += 1
  24.         Next
  25.         Debug.Print("VuotiLato" & VuotiAttuali)
  26.         Return VuotiAttuali
  27.     End Function
  28.  
  29.     Function calcolaVuotiCentro() As Integer
  30.         Dim calcolaV As Integer
  31.         Dim VuotiAttuali As Integer
  32.  
  33.         For calcolaV = 1 To 2
  34.             'If Matrice4x4(calcolaV, 1) = 1 Then VuotiAttuali += 1
  35.             If Matrice4x4(calcolaV, 2) = 1 Then VuotiAttuali += 1
  36.             If Matrice4x4(calcolaV, 3) = 1 Then VuotiAttuali += 1
  37.             'If Matrice4x4(calcolaV, 4) = 1 Then VuotiAttuali += 1
  38.         Next
  39.         Debug.Print("VuotiCentro" & VuotiAttuali)
  40.         Return VuotiAttuali
  41.     End Function



2) Quando i vuoti sono in pareggio, la valutazione punteggio va fatta prediligendo le soluzioni che hanno una sequanza progressiva a serpente, nelle ultime due righe:
00 00 00 00
00 00 00 00
12 11 10 09
13 14 15 16

3) Analisi dello schema che intercetta mosse a cui non si può rinunciare (alcune lo ho scritte)
4) Analisi dello schema che intercetta mosse da evitare (alcune lo ho scritte)

Si può provare con tentativi con più mosse per volta, ma finquando non si ottimizzano i punti 3 e 4 è inutile poichè, anche se lo schema lo esegui centinaia di volte fino alla fine, sempre che a 2048, non ci arrivi

Se invece si riesce ad arrivare a 2048 anche solo nel 5% 10% dei casi, con il brute force poi lo porti al 100%








Ultima modifica effettuata da Carlo il 22/06/2018 alle 16:31


in programmazione tutto è permesso
PM Quote
Avatar
Ultimo (Member)
Guru


Messaggi: 877
Iscritto: 22/05/2010

Segnala al moderatore
Postato alle 16:35
Venerdì, 22/06/2018
@Carlo

Si bisogna creare un algoritmo di tipo BackTracking

con l'aiuto di funzioni di Logica del gioco "IA"




If ok Then GOTO Avanza else GOTO Inizia

PM Quote
Avatar
Ultimo (Member)
Guru


Messaggi: 877
Iscritto: 22/05/2010

Segnala al moderatore
Postato alle 17:28
Venerdì, 22/06/2018
12 minuti per arrivare a 2048 :rofl:



Ultimo ha allegato un file: Cattura_2048_12minuti.PNG (27414 bytes)
Clicca qui per guardare l'immagine


If ok Then GOTO Avanza else GOTO Inizia

PM Quote
Avatar
Mikelius (Member)
Expert


Messaggi: 525
Iscritto: 14/04/2017

Segnala al moderatore
Postato alle 18:09
Venerdì, 22/06/2018
Potevi mettere i fuochi d'artificio alla vincita XDXD

PM Quote
Avatar
Ultimo (Member)
Guru


Messaggi: 877
Iscritto: 22/05/2010

Segnala al moderatore
Postato alle 18:18
Venerdì, 22/06/2018
Testo quotato

Postato originariamente da Mikelius:

Potevi mettere i fuochi d'artificio alla vincita XDXD



:rofl:

l'idea non è male

un form per i festeggiamenti :k:


If ok Then GOTO Avanza else GOTO Inizia

PM Quote
Pagine: [ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 ] Precedente | Prossimo