IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Intelligence artificielle Discussion :

A.I jeu tétris


Sujet :

Intelligence artificielle

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 9
    Points : 4
    Points
    4
    Par défaut A.I jeu tétris
    bonjour, j'ai programmé un jeu de tétris, ou les 5 types de pièces sont générées aléatoirement.

    J'aimerai programmer une fonction qui permette à l'ordinateur de jouer tout seul en parallèle au joueur, c'est-à-dire qu'il déplace les pièces de manière optimale. Avez vous une idée de raisonnement à faire ?

    Merci

  2. #2
    Membre averti
    Avatar de JHelp
    Inscrit en
    Octobre 2002
    Messages
    185
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 185
    Points : 444
    Points
    444
    Par défaut
    Tu as la méthode naïve :
    Tester toutes les positions tourner dans tous les sens et prendre la meilleur.
    La meilleur étant d'abord :
    1) Celle qui fait le plus de ligne compléte
    2) Si y en a pas, celle qui monte le moins haut et fait le moins de trou
    Avec cette méthode tu as déjà de trés bon résultat.
    Si tu connais la piéce suivante, tu peux jouer "virtuellement" deux coups et voir la combinaisons la meilleure
    Pour avoir une réponse efficace :
    1) Soyez précis dans vos questions
    2) Choisssez bien votre forum
    3) Consultez la FAQ et la doc avant

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    JHelp, ok merci, c'est un peu bourrin mais ça marche.
    Le mieux est de tester chaque configuration possible, et de la noter selon plusieurs facteurs : hauteur, trous, puits...

    la méthode absolue étant de rechercher à l'avance les combinaisons de toutes les pièces pour chaque damier possible :

    7 * ( 2 ^ 200) pour un damier de 20 * 10 = 200 cellules ...
    quasi impossible à réaliser quoi.

    L'autre problème est aussi la vitesse de l'algorithme, qui doit se plier au rythme du tetris.

  4. #4
    Membre régulier Avatar de hamster
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 137
    Points : 123
    Points
    123
    Par défaut Re: A.I jeu tétris
    Citation Envoyé par Paul--
    bonjour, j'ai programmé un jeu de tétris, ou les 5 types de pièces sont générées aléatoirement.
    Sans vouloir te décourager, il y en a 7 !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    X
    X  X    X   X  X
    X  X    X  XX  XX   X   XX
    X  XX  XX  X    X  XXX  XX

  5. #5
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Points : 4 029
    Points
    4 029
    Par défaut Re: A.I jeu tétris
    Citation Envoyé par hamster
    Citation Envoyé par Paul--
    bonjour, j'ai programmé un jeu de tétris, ou les 5 types de pièces sont générées aléatoirement.
    Sans vouloir te décourager, il y en a 7 !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    X
    X  X    X   X  X
    X  X    X  XX  XX   X   XX
    X  XX  XX  X    X  XXX  XX
    Il a du oublié les pièces symétriques entre elles.
    Les 2 pièces qui ressemblent à un L
    Les 2 pièces qui ressemblent à un S
    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 37
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par JHelp Voir le message
    Tu as la méthode naïve :
    Tester toutes les positions tourner dans tous les sens et prendre la meilleur.
    Bonjour,

    Je relance ce topic suite à cette réponse : y a t'il une autre méthode moins "naïve" que celle-ci ?

    J'ai moi aussi codé un tetris en suivant cette idée, mais la vitesse d'execution de mon code ne me permet pas de calculer 2 coups à l'avance, je suis limité à 1 (c'est fait avec shockwave, qui n'est pas spécialement rapide )

    Pour info, mon tetris est jouable ici : http://earthwormjim.free.fr
    tout en bas de la page, il est dans le bloc "Game Tests".

    Appuyez sur la touche Return pour activer/désactiver l'IA, et a,z ou e pour contrôler la vitesse d'affichage de l'IA

  7. #7
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    bonjour,

    il est étonnant qu'avec une méthode aussi naive ne nécessitant qu'un arbre d'une hauteur 2, tu n'arrives pas à lancer ton IA .
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 37
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par ToTo13 Voir le message
    bonjour,

    il est étonnant qu'avec une méthode aussi naive ne nécessitant qu'un arbre d'une hauteur 2, tu n'arrives pas à lancer ton IA .
    Non, c'est pas ça le problème :p
    l'IA fonctionne trés bien en utilisant deux coups d'avance, le problème vient du temps d'execution de ce calcul : le langage shockwave n'est pas spécialement véloce, et dans ce cas précis le fait de calculer deux coups à l'avance prends environ 500ms, ce qui provoque un blocage désagréable du jeu à chaque nouvelle piece qui arrive.

    Je voulais faire une version ou l'on joue contre l'IA, mais avec un tel blocage, ça nuirait au gameplay

    voilou, c'est pour ça que je voulais savoir si une autre méthode moins "brute" existait...

  9. #9
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Bonjour,

    Citation Envoyé par Earthwormjim Voir le message
    Non, c'est pas ça le problème :p
    l'IA fonctionne trés bien en utilisant deux coups d'avance, le problème vient du temps d'execution de ce calcul : le langage shockwave n'est pas spécialement véloce, et dans ce cas précis le fait de calculer deux coups à l'avance prends environ 500ms, ce qui provoque un blocage désagréable du jeu à chaque nouvelle piece qui arrive.
    eurf...
    Je pense qu'il est grand temps de faire un petit update et de passer sur des langages de grandes personnes comme Java, C, C# ou C++. Parce que là...

    Non plus sérieusement, seule une petite heuristique personnelle peut te sortir de se mauvais pas Peut être quelques chose qui regarde juste à un coup à l'avance si l'endroit où tu places ta pièce fait monter le moins possible la pile et laisse le moins de trous possibles.
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  10. #10
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Citation Envoyé par Veovis Voir le message
    Des langages de programmation de grande personne tu veux dire C/C++ et pas Java ou C#.
    Non voyons, une grande personne responsable utilisera plutôt Haskell, OCaml, ou ADA au besoin...

    --
    Jedaï

  11. #11
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860
    Par défaut
    C++ c'est pas mal, donc dans le cadre d'un jeu si on a fait le jeu en C++ autant le continuer en C++

    Par contre, vraiment il va falloir que je me mette au Prolog.
    LE SEUL langage made in Marseille

  12. #12
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    ou ADA au besoin...
    Je ne peux que plusoyer. (et pour ceux qui ne le savent pas, c'est un langage crée par un français)

    seule une petite heuristique personnelle peut te sortir de se mauvais pa
    Oui, le seul moyen lorsque tu es limité, c'est d'utiliser le plus d'heuristiques possible (pour peu qu'elles ne soient pas prohibitive).

  13. #13
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par PRomu@ld Voir le message
    Oui, le seul moyen lorsque tu es limité, c'est d'utiliser le plus d'heuristiques possible (pour peu qu'elles ne soient pas prohibitive).
    Une très jolie heuristique a été trouvée par Pierre Dellacherie (un francais !).

    (traduite en C++ et C# par Colin Fahey, http://www.colinfahey.com)
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 37
    Points : 16
    Points
    16
    Par défaut
    Bonjour,

    Citation Envoyé par ToTo13 Voir le message
    Bonjour,

    eurf...
    Je pense qu'il est grand temps de faire un petit update et de passer sur des langages de grandes personnes comme Java, C, C# ou C++. Parce que là...
    Heu oué... sauf que si je veux un truc qui tourne facilement sur le web, sous windoz et macos et qui demande pas 5000 lignes de codes pour afficher un carré, je préfère encore utiliser shockwave
    à la limite j'aurais pu le faire en java, c'est vrai...

    Citation Envoyé par pseudocode Voir le message
    Une très jolie heuristique a été trouvée par Pierre Dellacherie (un francais !).
    (traduite en C++ et C# par Colin Fahey, http://www.colinfahey.com)
    Arf merci, mais j'avais déjà visité cette page à l'époque (ça fait 4 ou 5 ans que j'ai codé ce truc), et j'avais appliqué ce qui est décrit au chapitre 6.8 de cette page, j'étais aussi entré en contact avec lui pour en parler...

    j'vais tester en java...

    merci

  15. #15
    Membre régulier Avatar de O( N )
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2006
    Messages : 126
    Points : 120
    Points
    120
    Par défaut
    Bonsoir,

    je pense que tu peux enregistrer quelques combinaisons sur deux lignes et cinq colonnes par exemples.

    Je m'explique : tes pièces font 5 carrés maximum de long, il me semble.
    Donc tu stockes les combinaisons possibles de formes sur un carré composé de 2 carrés (profondeur) sur 5 carrés (de long)
    => 2 puissance 10 combinaisons.
    L'idéal serait 5 * 5 => 2 puissance 25 mais ce n'est pas intéressant !

    Tu compares les blocs existants sur une profondeur de deux carrés à ceux de ta base et
    tu essais les différentes pièces, tu notes les meilleures pièces et leur position dans ces combinaisons.
    Lorsque une pièce apparaît tu cherches la combinaison te donnant le meilleur score.

    A chaque pièce tu cherches une dizaine de fois dans un tableau de 1024 combinaisons.
    La dizaine vient du fait que tu testes le carré 1 à 5 sur une profondeur de 2,
    puis le carré de 2 à 6 sur une profondeur de 2, puis le carré de 3 à 7, ...,
    jusqu'au dernier carré équivalent à la largeur de ton rectangle de jeu, la profondeur équivalent à la hauteur du rectangle de jeu.

    J'espère que cela sera une méthode exhaustive plus rapide

    Bonne prog
    Dans la vie il faut se cultiver ! Je suis développeur,
    je cultive des bogues.

    Citer c'est avouer qu'on a les mêmes idées que d'autres
    sans être capable de faire des phrases soit même ! - moi

Discussions similaires

  1. écrire un programme de jeu tétris
    Par charlesmagnus dans le forum Débuter
    Réponses: 1
    Dernier message: 13/02/2014, 10h10
  2. Réponses: 6
    Dernier message: 06/01/2011, 10h33
  3. Quel style de DirectX pour un jeu 2D ?
    Par delire8 dans le forum DirectX
    Réponses: 34
    Dernier message: 31/07/2003, 00h47
  4. [C réseau débutant] jeu
    Par Heimdall dans le forum Développement
    Réponses: 6
    Dernier message: 22/05/2003, 13h58
  5. Une déclaration pour la survie du jeu vidéo en France
    Par Freakazoid dans le forum DirectX
    Réponses: 1
    Dernier message: 30/10/2002, 14h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo