Page 1 sur 1

[R] Algorithme 2048

Posté : mer. 16 avr. 2014 22:40
par sozary
Bonjour à tous!
J'aimerais créer un jeu 2048, comme entraînement, mais je ne connais pas du tout l'algorithme mis en place.
J'ai néanmoins une petite idée:

Code : Tout sélectionner

chaque case vaut 0
while (pas game over)
Prendre une case au hasard (une valant 0), et a 1/4 chance d'y placer un 4.
([mouvement droit]
---> Vérifie la case en x+1. 
        Si elle vaut x, alors x disparaît et x+1 vaut la valeur de x fois 2
[/]
Après presque pareil pareil pour gauche, haut et bas.)
wEnd
 
Je ne sais malheureusement pas quelle est la condition de fin de jeu; enfin si x+1 impossible, et x-1 impossible, pareil pour les y, mais j'ai des doutes..
Merci d'avance!

Re: [...] Algorithme 2048

Posté : mer. 16 avr. 2014 22:49
par leoleolth
Bonsoir !
Si tu le souhaites, on peut créer ce projet ensemble
Donne moi ton pseudo skype.
Je pense qu'il te faut 2 tableaux.
-> un avec des 0 et des 1 qui indiquent si un chiffre se trouve dans la case ou non (sera utilisé pour faire apparaître un chiffre dans une case vide aléatoirement)
-> un second avec les valeurs de chaque case

Pour savoir si on a perdu, il suffit de verifier si il existe deux mêmes cases l'une a côté de l'autre grâce au tableau 2.

En espérant t'avoir aidé.

Re: [...] Algorithme 2048

Posté : ven. 18 avr. 2014 04:48
par lesolutionneur
Quel est l'intérêt d'avoir deux tableaux alors que la solution proposée au départ fonctionne très bien ? (Un 0 dans le cas où il n'y a aucun chiffre).

Édit : l'algorithme de 2048 est opensource, son code est disponible sur Github : https://github.com/gabrielecirulli/2048

Re: [...] Algorithme 2048

Posté : jeu. 05 juin 2014 12:36
par TomAijerrie
Bonjour,

Je me suis déjà amusé à refaire l'algorithme de 2048 sur Autoit, cependant, ce n'est pas celui du site officiel car je ne l'avais pas trouvé quand j'ai commencé mon script.
En gros, j'ai une fonction qui regarde ligne par ligne ou colonne par colonne dans quel cas de figure on est et qui déplace les cases. Le valeurs sont stockées dans le nom du label de la case et sont changées grâce à GuiCtrlSetData(), cela m'evite d'avoir trop de variables. Les images des labels sont des captures d’écran. J'ai ajouté des fonctions supplémentaires que vous pouvez de votre coté supprimer ou compléter.
► Afficher le texte
Je met dans mon archive les images pour les labels, un icône 2048, deux versions de mon script :
- une longue, mal expliquée mais compréhensible si on veut la comprendre
- l'autre plus courte grâce à une utilisation de variables tableau mais difficile à comprendre si on a pas vu la première version

Pour ceux qui ne comprenne pas, demandez moi ce que vous ne comprenez pas, j'essaierai de vous aider.

J’espère vous avoir aidé pour l'algorithme.

PS: Je suis conscient qu'il y a plein de choses à améliorer dans mon script, Je vous demande de me signaler quoi et comment faire pour y corriger.

Re: [...] Algorithme 2048

Posté : jeu. 05 juin 2014 17:07
par cbourree
@TomEtJerry
Tu peux essayer de ne faire une seule fonction déplacement qui prends en paramètre le sens de déplacement ^^
En voici une petite ébauche ^^ (Je n'ai regarder que la taille de celle sur la version officiel)

Func tout_deplacer()
Si deplacement horrizontale
Je parcours les 3 lignes dans le sens opposé au mouvement afin de fusionner ou déplacer la case $i + 1 avec $i dans la case $i quand cela est nécessaire c'est à dire quand case $i+1 = 2 * $i
Si déplacement verticale
Le même genre de raisonnement avec les lignes
EndFunc

Et c'est tout pas besoin de centaine de ligne ^^

Re: [...] Algorithme 2048

Posté : ven. 06 juin 2014 11:48
par TomAijerrie
@Charles

J'y ai déjà pensé, mais dans plusieurs cas de figure comme celui-ci-joint, ça ne marche pas.

Re: [...] Algorithme 2048

Posté : mar. 24 juin 2014 14:12
par TomAijerrie
Balise [R] si résolu
Merci

Re: [...] Algorithme 2048

Posté : jeu. 06 nov. 2014 22:30
par lesolutionneur
Utiliser HotKeySet() est une mauvaise idée car les touches seront interceptées même quand la fenêtre n'est pas au premier plan.

Tu devrais privilégier GUISetAccelerators() qui permet de créer des raccourcis clavier pour ta fenêtre seulement !

Re: [...] Algorithme 2048

Posté : ven. 07 nov. 2014 09:23
par TomAijerrie
Merci pour l'idée.

Je n'ai pas touché à ce script depuis bien longtemps et je vois plusieurs choses qui pourraient être améliorées.

Par exemple la fonction Actualiser() pourrait ressembler à ceci:

Code : Tout sélectionner

Func Actualiser()
;----------------------------------------------
;       Actualise les couleurs
;----------------------------------------------
For $i = 0 To 3
    For $j = 0 To 3
        For $k = 1 to 14
            If $case[$i][$j] = 0 Then
                If FileExists(@ScriptDir & "\0.bmp") Then GUICtrlSetImage($case[$i][$j],@ScriptDir & "\0.bmp")
            If $case[$i][$j] = 2^$k Then
                If FileExists(@ScriptDir & "\" & 2^$k & ".bmp") Then
                    GUICtrlSetImage($case[$i][$j],@ScriptDir & "\" & 2^$k & ".bmp")
                Else
                    MsgBox(48,"actualiser","Erreur")
                EndIf
            EndIf
        Next
    Next
Next
GUICtrlSetData($casescore,$score)
EndFunc
On pourrait également remplacer les boutons par des Labels.
On pourrait modifier la fonction de déplacement en récupérant le sens de déplacement avec @HotKeyPressed.

En cherchant bien on peut trouver plein d'autre lignes à changer.