Le jeu 2048

Discussion générale entre passionnés et amateurs de mathématiques sur des sujets mathématiques variés
Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 13:00

par fatal_error » 24 Mar 2014, 00:35

hello,

petit up,
je testerais des méthodes de type apprentissage / programmation dynamique approximée.

je suis un peu curieux pour l'ADP, je suis tombé sur un powerpoint qui présentais la SDP mais pas l'ADP, de toute manière je l'ai que parcourue.
- Je suis curieux de voir comment tu l'appliquerais ici
- et également si tu as un ouvrage simpliste, j'ai pas nécessairement envie dans un premier temps de comprendre comment ca marche, mais juste d'essayer pour voir ou au pire de regarder des comparatifs...

Je songe à écrire une IA moi même, l'algo dans le lien de Benjamin c'est à base de min max, j'ai pas regardé en détail, mais je tenterais bien de faire un truc un peu plus rapide... même si réussit moins
la vie est une fête :)



Benjamin
Membre Complexe
Messages: 2337
Enregistré le: 14 Avr 2008, 11:00

par Benjamin » 24 Mar 2014, 07:48

Salut,

A qui tu parles fatal ? Si c'est à moi, j'y connais rien dans ce type d'algo, désolé.

A+

Avatar de l’utilisateur
Ben314
Le Ben
Messages: 21512
Enregistré le: 11 Nov 2009, 22:53

par Ben314 » 25 Mar 2014, 20:24

Question aux ferrus d'info :
C'est quoi le moyen le plus simple de faire un programme qui "automatise" le jeu ?
i.e. comment lire les infos sur la situation actuelle de la grille et simuler les appuis sur les flèches ?

(de préférence dans un langage de programmation plus ou moins proche du C ou du pascal pour pas que je passe 3 plombes à chercher comment on déclare les variables, comment on fait des boucles et des tableaux...)

Image
Qui n'entend qu'un son n'entend qu'une sonnerie. Signé : Sonfucius

Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 13:00

par fatal_error » 25 Mar 2014, 21:01

C'est quoi le moyen le plus simple de faire un programme qui "automatise" le jeu ?

C'est de lire le code source =)

Si tu regardes les sources, tu vois que tu as
game_manager.js qui va globalement se charger de faire apparaitre des tuiles, de les merger...
keyboard_input_manager.js qui va détecter qu'on a appuyé sur une touche, et demander à game_manager de bouger/merger les tuiles en conséquences.

De fait, tu peux simplement réutiliser ce qui a été fait (au lieu de simuler des éléments clavier, tu peux directement demander à game_manager de bouger les tuiles).

Par exemple:
Pour aller vers le haut
game_manager.js
Code: Tout sélectionner
// Move tiles on the grid in the specified direction
GameManager.prototype.move = function (direction) {
  // 0: up, 1: right, 2:down, 3: left
  var self = this;

Tu as qu'à appeler game.move(0); pour aller vers le haut.

Pour connaitre la situation tu as qu'à regarder comment game_manager update la grille, et tu vois this.grid.
tu as donc qu'à utiliser
game.grid.cells
game.grid.cells[0] donnant la première colonne à gauche (de haut en bas)
game.grid.cells[0][3] donnant donc la case coin bas gauche

Pour récupérer game, tu as
application.js
Code: Tout sélectionner
// Wait till the browser is ready to render the game (avoids glitches)
window.requestAnimationFrame(function () {
  var game = new GameManager(4, KeyboardInputManager, HTMLActuator, LocalScoreManager);
  //un ajout
  new IA(game);//on passe, game pour avoir accès au jeu..
});


et tu te doutes que dans IA, tu vas implémenter une méthode qui à chaque fois qu'elle a joué, va regarder le nouvel état de la grille, et rejouer...

Un fichier IA.js que tu crèes et insères dans la page html (2048.html)
Code: Tout sélectionner
 
  //ton fichier créé..
 

Code: Tout sélectionner
var COUNT=0;//juste pour pas boucler à l'infini...
function IA(game){
    this.game=game;
    var that=this;
    window.requestAnimationFrame(this.doMove.bind(this));
}
IA.prototype.doMove=function (){
    if(!this.game.isGameTerminated() && COUNT++<100){
        var direction = this.selectDirection(); //on analyse la grille
        this.game.move(direction) //et on dit à game la direction dans laquelle on joue
        requestAnimationFrame(this.doMove.bind(this));
    }
}

/*
    Algorithm is following:
    Init
    we try to put the highest number at the top
    we try to put the highest number on the left
    blabla
*/
IA.prototype.selectDirection=function (){
    var direction=3;//left
    if(this.canGoUp()){
        return 0;
    }
    if(this.canGoLeft()){
        return 3;
    }
    return 1;
}

IA.prototype.canGoLeft=function(x){
    return this.game.grid.cells[x];//implem stupide juste pour montrer comment accéder aux tuiles
}


Bien entendu pour enregistrer le jeu, tu vas sur la page, et tu fais fichier enregistrer sous... :lol3:
la vie est une fête :)

Avatar de l’utilisateur
Ben314
Le Ben
Messages: 21512
Enregistré le: 11 Nov 2009, 22:53

par Ben314 » 25 Mar 2014, 21:11

Merçi beaucoup : je testerais tout ça ce Week End...
Qui n'entend qu'un son n'entend qu'une sonnerie. Signé : Sonfucius

Avatar de l’utilisateur
ampholyte
Membre Transcendant
Messages: 3940
Enregistré le: 21 Juil 2012, 08:03

par ampholyte » 28 Mar 2014, 13:29

J'en suis venu à bout également :
Image

Avatar de l’utilisateur
Sa Majesté
Membre Transcendant
Messages: 6275
Enregistré le: 23 Nov 2007, 15:00

par Sa Majesté » 28 Mar 2014, 21:47

Combien de temps a duré la partie où vous avez gagné ?
Moi je ne suis arrivé qu'à 1024 et j'ai trouvé ça très long déjà :dodo:
C'est pour ça que je n'ai fait que 2 parties et que je n'ai pas très envie d'en faire une 3ème :hum:

Avatar de l’utilisateur
ampholyte
Membre Transcendant
Messages: 3940
Enregistré le: 21 Juil 2012, 08:03

par ampholyte » 28 Mar 2014, 23:42

C'était assez rapide en fait, je dirais 10min max (sur PC évidemment ^^).

L'astuce est de bloquer dès le départ le plus gros chiffre dans un coin et de venir créer une ligne de nombre décroissant.

Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 13:00

par fatal_error » 29 Mar 2014, 00:47

ah bah la partie ouais 10 min max, le temps passe sur le jeu plutot 15 heures ... :x
probablement le double si je continue à coder l IA
la vie est une fête :)

Avatar de l’utilisateur
Ben314
Le Ben
Messages: 21512
Enregistré le: 11 Nov 2009, 22:53

par Ben314 » 29 Mar 2014, 13:44

Si tu traine encore dans les parages Fatal, j'arrive pas à tripoter le programme, mais c'est lié à mon incompétence totale en ce qui concerne tout ce qui est "script internet" et autres :

Je suis allé sur la page du jeu et j'ai mis "enregistrer fichier" : ça m'a sauvé "2048.html" ainsi que tout un répertoire "2048_fichier" contenant ce dont la page a besoin (je pense), c'est à dire les fichiers ???.js et quelques icônes.

Sauf que, si j'ouvre le fichier "2048.html" depuis Firefox, j'ai bien le bon affichage, mais le jeu ne marche pas : plus précisément, les flèches ne font que faire monter ou descendre la page, mais ne changent rien au tableau du jeu.
De même, le bouton "new game" n'agit pas (bien que la souris change de forme quand je passe dessus).
J'ai aussi systématiquement le bandeau "ce site souhaite conserver des données..." en haut sur lequel les boutons "Autoriser" et "jamais pour ce site" ne fonctionnent pas.

Ça risque surement d'être trés con comme problème, mais... :cry:
Qui n'entend qu'un son n'entend qu'une sonnerie. Signé : Sonfucius

Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 13:00

par fatal_error » 29 Mar 2014, 17:16

hello ben,

je sais pas, as-tu bien fait enregistrer sous,
page web complète?
Image
la vie est une fête :)

Avatar de l’utilisateur
Ben314
Le Ben
Messages: 21512
Enregistré le: 11 Nov 2009, 22:53

par Ben314 » 29 Mar 2014, 18:33

fatal_error a écrit:hello ben,
je sais pas, as-tu bien fait enregistrer sous,
page web complète?
Oui (je viens de revérifier).
C'est forcément un truc de c...
J'ai pas la même version de firefox que toi (mozzilla firefox for ubuntu canonical 1-0) , donc pas tout à fait la même fenêtre que toi.
Par contre, il me propose de stocker un fichier html alors que toi, ça semble être un fichier htm (et comme je sais pas quelle est la différence...)

Ah, oui, le truc qui peut-être risque de jouer, c'est que je suis à la fac sur un terminal X, mais d'un autre coté, le jeu lui-même marche parfaitement bien lorsqu'il est lancé depuis son site "natif"...
Qui n'entend qu'un son n'entend qu'une sonnerie. Signé : Sonfucius

Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 13:00

par fatal_error » 29 Mar 2014, 18:58

Franchement, c'est un peu galère par forum.
Comme ton cursor change, que ta page est affichée pareil, ca veut dire que le css marche bien. (ce qui fait joli)
Mais comme les touches clavier marchent pas pas plus que tes clicks, ca veut dire que le js marche pas.
Comme les deux sont dans le même dossier, alors je pense que tu as bien tous les fichiers mais :
firefox n'execute pas le javascript des fichiers locaux.

Peut-être faut-il configurer ff en ce sens:
http://www.jellard.co.uk/2010/02/allowing-firefox-to-access-local-javascript-files/
la vie est une fête :)

Avatar de l’utilisateur
Ben314
Le Ben
Messages: 21512
Enregistré le: 11 Nov 2009, 22:53

par Ben314 » 29 Mar 2014, 19:47

fatal_error a écrit:Franchement, c'est un peu galère par forum.
Comme ton cursor change, que ta page est affichée pareil, ca veut dire que le css marche bien. (ce qui fait joli)
Mais comme les touches clavier marchent pas pas plus que tes clicks, ca veut dire que le js marche pas.
Comme les deux sont dans le même dossier, alors je pense que tu as bien tous les fichiers mais :
firefox n'execute pas le javascript des fichiers locaux.

Peut-être faut-il configurer ff en ce sens:
http://www.jellard.co.uk/2010/02/allowing-firefox-to-access-local-javascript-files/

Je teste le truc en question...
Mais on va pas y passer des plombes non plus : je le ferais sur ma machine, ça sera plus simple que de se faire c... à comprendre ce qui ne s'interprète pas correctement sur le terminal (surtout que s'il faut gratter dans les config. ou un truc du style, il est possible que je n'ai pas les droit pour le faire...)

EDIT : j'ai "tripoté" un peu toutes les options "javascript" et... rien à faire.
Je le ferais quand j'aurais récupéré mon portable...
Qui n'entend qu'un son n'entend qu'une sonnerie. Signé : Sonfucius

oliover
Messages: 1
Enregistré le: 19 Avr 2014, 08:34

impossible

par oliover » 19 Avr 2014, 08:38

Cliffe a écrit:1588 en appuyant n'importe comment :ptdr:
le dernier bloc est 1024

Groucho
Membre Naturel
Messages: 67
Enregistré le: 14 Mai 2014, 14:19

Comment sauvegarder une partie

par Groucho » 14 Mai 2014, 14:49

Je suis arrivé a 8192 de la façon suivante:
Premièrement, je suis la stratégie que l'on trouve un peu partout : mettre le nombre le plus élevé dans un coin (en haut à gauche pour moi), et l'y laisser. La ligne du haut doit être si possible complètement remplie de façon décroissance. de sorte que on puisse utiliser les flèches droite gauche et haut sans rien y changer. On joue alors en remontant systématiquement les nombres les plus élevés vers le haut. De temps en temps, on accroit un nombre de la ligne du haut, ce qui oblige quelquefois fusionner ce nombre avec son voisin de gauche et à laisser un espace libre (à droite) dans cette ligne du haut. Il faut de toute urgence le combler en s'interdisant les flèches droite (et bas évidemment)). Il vaut mieux d'ailleurs, dans la mesure du possible prévoir ceci avant la fusion.
Je pourrais être plus précis mais je préfère en venir au second point: Pour arriver à 8192, ça m'a pris plusieurs séances. Je joue sur PC, et il suffit de fermer la fenêtre de Mozilla pour la retrouver la fois suivante. La partie doit être sauvegardée quelque part (j'ai vainement cherché où). Mais quand je rentre, j'ouvre 2 fenêtres, disons une fenêtre de jeu et une fenêtre de sauvegarde. Je joue sur la fenêtre de jeu, et si, au bout de quelque temps, je suis content de moi, je ferme la fenêtre de sauvegarde (sans y toucher) et j'en rouvre immédiatement une autre qui se met à jour. Si, au contraire, j'ai fait une erreur, ou que le jeu tourne mal pour moi, alors je ferme la fenêtre de jeu, je retourne à la fenêtre de sauvegarde, je joue au moins une fois et j'ouvre de nouveau une fenêtre de jeu, dans laquelle je peux continuer à tenter ma chance.
Après avoir obtenu les 8192, j'ai joué sans filet (sans sauvegarde), et j'en ai été heureux car j'ai pu retourner à mes occupations, à jouer avec mes petits enfants et à me brosser les dents.

Bonne journée à tous

Groucho

Silver0l
Messages: 1
Enregistré le: 17 Mai 2014, 14:27

par Silver0l » 17 Mai 2014, 14:29

Je suis arrivé à 32768. J'explique comment ici:
http://silberblog.graphz.fr/
Ça demande quand même beaucoup de temps et de la chance!

Groucho
Membre Naturel
Messages: 67
Enregistré le: 14 Mai 2014, 14:19

par Groucho » 17 Mai 2014, 14:51

Bravo. En fait, je me demandais jusqu'où on pouvait arriver. Il me semble que pour faire 32768 (2^15) il faut, à un moment donné avoir 2^14, et 2^13 etc. et deux 2, soit 15 cases remplies exactement comme on le veut (à moins d'avoir une chance extraordinaire et démarrer à 2^2=4), sur les 16 cases dont on dispose, ça suppose un contrôle parfait. Encore bravo.
J'appliquais plus ou moins ta stratégie, mais sur les deux lignes du haut seulement, pour les autres j'étais beaucoup moins rigoureux.
De toutes façons, Silverblog, NON, je n'essaierai pas de faire mieux que mes 8000, j'ai déjà assez perdu de temps comme ça.
Groucho

steelson
Messages: 1
Enregistré le: 26 Mai 2014, 13:00

temps pour arriver à 4096

par steelson » 26 Mai 2014, 13:06

Bonjour la communauté,

Je ne suis pas adepte des jeux, mais j'ai été séduit par l'aspect matheux du truc, et le challenge.
J'essaie maintenant d'atteindre 2048 et 4096 le plus rapidement possible. J'en suis respectivement à 9mn20 pour le 2048 et 19mn28 pour le 4096. L'appli sous win8 permet d'avoir le temps de jeu.Je pense que le 8192 est encore hors de portée pour moi !

ki2
Messages: 1
Enregistré le: 19 Juil 2014, 22:55

ademio vs 2048

par ki2 » 19 Juil 2014, 22:59

steelson a écrit:Bonjour la communauté,

Je ne suis pas adepte des jeux, mais j'ai été séduit par l'aspect matheux du truc, et le challenge.
J'essaie maintenant d'atteindre 2048 et 4096 le plus rapidement possible. J'en suis respectivement à 9mn20 pour le 2048 et 19mn28 pour le 4096. L'appli sous win8 permet d'avoir le temps de jeu.Je pense que le 8192 est encore hors de portée pour moi !


Pour ma part je me suis lassé de 2048 et je préfère maintenant la version Ademio qui permet de jouer plusieurs niveaux. Un peu trop facile au début peut-être, mais plutôt cool à essayer.
Mais dispo que sur Android. Pas Iphone... pas cool...

 

Retourner vers ⚜ Salon Mathématique

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 8 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite