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

C Discussion :

Puissance 4 + AI


Sujet :

C

  1. #1
    Membre confirmé Avatar de nicodn02
    Profil pro
    Consultant .NET
    Inscrit en
    Mars 2007
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Consultant .NET

    Informations forums :
    Inscription : Mars 2007
    Messages : 263
    Par défaut Puissance 4 + AI
    J'ai programmer un puissance4 et j'aimerais mettre par derrière une option permettant de jouer contre le pc. Par contre, je n'en ai aucune idée du comment faire, sachant que je suis qu'en première année mais que je suis près a tout apprendre
    Merci de m'aider

  2. #2
    Membre expérimenté Avatar de Bob.Killer
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    336
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 336
    Par défaut
    je te conseil de faire une IA basé sur l'algorithme du Min et Max tu trouveras des informations sur wikipedia pour comprendre tout ça

  3. #3
    Membre éprouvé
    Avatar de Shugo78
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 119
    Par défaut
    Je ta conseille de créer une fonction qui joue le rôle de IA et qui utilise rand();
    pour détérminer où jouer avec une détéction de collision pour éviter de jouer plusieurs fois au même endroit ensuite tu fais quelque boucles et quelques conditions pour que l'ordi puisse gagner

  4. #4
    Membre confirmé Avatar de nicodn02
    Profil pro
    Consultant .NET
    Inscrit en
    Mars 2007
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Consultant .NET

    Informations forums :
    Inscription : Mars 2007
    Messages : 263
    Par défaut
    Mais comment coder tout cela?

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 116
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 116
    Par défaut
    arbre des possibles ? graphes ?

  6. #6
    Membre confirmé Avatar de nicodn02
    Profil pro
    Consultant .NET
    Inscrit en
    Mars 2007
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Consultant .NET

    Informations forums :
    Inscription : Mars 2007
    Messages : 263
    Par défaut
    Comment coder l'AI, je ne sais pas du tout comment commencer ...

  7. #7
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 116
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 116
    Par défaut
    C'est un problème à deux dimensions.

    Le joueur à toujours (nbre_de_colonnes) choix possibles, sauf si une colonne est pleine.

    Le fait de choisir de jouer un coup entraîne que l'adversaire a lui aussi (nombre_de_colonnes) coups à jouer, mais la portée de son coup sera différente suivant ce que viens de jouer l'adversaire.

    Une partie peut se définir comme ça.

    On peut calculer le nombre maximum de coups à jouer pour chacun des adversaires jusqu'au match nul par multiplication.

    Le nombre total de parties possibles augmente très vite !

    Il faut définir quels sont les choix qui permettent à la machine de maximiser ses chances d'avoir une combinaison gagnante. Bien sûr, il y a le classique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    |   | o |   |   |   |   |   |
    | o | o |   | x | x | x |   |
    Le joueur aux croix gagne obligatoirement quoi que fasse le joueur aux ronds. C'est ce genre de situations que l'IA doit rechercher.

    Je crois que
    Pour coder l'AI, soit il faut lui donner en mémoire toutes les parties possibles et lui faire jouer les coups qui correspondent aux parties qu'elle sait être victorieuses, soit on peut calculer un algorithme plus empirique
    De toute façon, le résultat du calcul doit être celui d'un algorithme de choix parmi tous les coups qui tendent à être "gagnants" pour l'IA.

    Le critère peut être le nombre de coups directs dans le meilleur des cas jusqu'à la victoire, ou le nombre de coups moyens pour toutes les branches gagnantes qui découlent de l'instant t, ou le rapport entre le nombre d'issues gagnantes et le nombre d'issues perdantes.

    Faire deux ou trois parties de puissance 4 peut sûrement t'aider à trouver une voie. Le tout c'est de bien poser le problème de départ.

    Je te conseille de commencer par trouver un moyen de représenter toutes les parties possibles jusqu'à la victoire. Parmis toutes ces parties possibles, il y en a sûrement plusieurs qui sont stupides. Peut être que c'est ça les réseaux de neurone finalement.

    Tu joues contre la machine, qui fait n'importe quoi, et elle apprend de ses erreurs suivant une méthode que tu auras déterminé au départ.

  8. #8
    Membre confirmé Avatar de nicodn02
    Profil pro
    Consultant .NET
    Inscrit en
    Mars 2007
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Consultant .NET

    Informations forums :
    Inscription : Mars 2007
    Messages : 263
    Par défaut
    Je pensais a sa aussi, et avec un system de point par deriere, par exemple, une partie gagante, elle met +1 sur le puissance4, etc.. mais sa c'est une AI evolutive

  9. #9
    Membre éprouvé
    Avatar de Shugo78
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 119
    Par défaut
    C'est une bonne idée
    Tu n'as qu'a faire des parties , des réactions qui ne sont acessibles que si l'utilisateur a gagner tel ou tel nombre de partie ainsi ton IA s'adapterai au niveau des joueurs , ca serait super.Mais pour coder tout ca ...

  10. #10
    Membre confirmé Avatar de nicodn02
    Profil pro
    Consultant .NET
    Inscrit en
    Mars 2007
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Consultant .NET

    Informations forums :
    Inscription : Mars 2007
    Messages : 263
    Par défaut
    En effet, trop de posibiliter de gagne dans ce jeu, et vive les lignes de code...
    Perosnne à une autre idée?

  11. #11
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 116
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 116
    Par défaut
    Tu peux faire jouer un algorithme d'IA tel que un de ceux suggérés au début du Topic contre la machine qui a toutes les parties possibles en mémoire.

    Je pense que de toute manière, tu es obligé de faire des estimations et des calculs sur le nombre de parties possibles.

    Comme tu as déjà du coder la représentation du puissance 4 pour des humains, ça ne devrait pas être trop difficile d'utiliser cette représentation dans des algorithmes.

    Citation Envoyé par nicodn02
    En effet, trop de posibiliter de gagne dans ce jeu, et vive les lignes de code...
    Perosnne à une autre idée?
    Quand on commence à se dire "vive les lignes de code" avant de faire un truc, c'est qu'on a pas assez réfléchi au problème je crois.
    A juste titre, vous sentez bien que ce sera un peu trop difficile d'aborder l'eEverest par sa face nord à une verticale de 80°
    Il faut un petit peu de notions de probabilités/combinatoires pour résoudre ce problème.
    Les arbres de probabilités, etc.

  12. #12
    Membre éprouvé
    Avatar de Shugo78
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 119
    Par défaut
    Ou alors tu peux aussi faire un arbre , je m'éxplique :
    -ton IA est divisé en plusieurs partie elle même divisé en plusieurs parties , etc ...| ; jusqu'a arrivé aucas par cas par exemple :
    le joueur joue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    y a t-il des pions de même couleurs côte a côte ?
    Si oui alors vérifier combien le joueur a de points d'éxpérience (nombre de partie gagnantes) 
    {
    si nombre plus grand que nombres requis pour casser cette alignement alors
    casser l'alignement
    sinon faire comme si de rien n'était et jouer ailleurs.
    }
    Sinon alors créer un alignement ou en continuer un
    {
     si nombre d'éxperience plus grand que nombre requis pour faire un alignement coup par coup alors jouer a chaque fois en avancant son alignement.
    sinon alterner l'alignement et un jeu au hasard
    }
    Si alignement brisé alors :
    {
     selon le nombre de point d'éxpérience soit :
    -en faire un autre 
    -en détruire un
    -ne rien faire (joueur au hasard)
    }
    ainsi le cas est traité selon ses ressemblances avec tel ou tel cas déjà prévu dans ton prog ainsi la réaction sera quasiment la bonne.

  13. #13
    Membre confirmé Avatar de nicodn02
    Profil pro
    Consultant .NET
    Inscrit en
    Mars 2007
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Consultant .NET

    Informations forums :
    Inscription : Mars 2007
    Messages : 263
    Par défaut
    Certes, j'avais penser à cela, plutôt :
    _verifier si l'ai peut faire un puissance4, si non, verifier si l'humain peut faire un puissance 4 ou sinon essayer de faire un puissance4 par l'AI

    Mais c'est comment coder cela que je ne vois pas

    et j'avais entendu parler aussi des algo min max mais je ne vois pas comment faire

  14. #14
    Membre éprouvé
    Avatar de Shugo78
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 119
    Par défaut
    Tu n'as qu'a assigné les pions (je pense qu'il y a deux couleurs par exemple :
    -rouge pour le joueur "humain",assigné a pionJoueur
    -jaune pour L'IA,assigné a pionIA)
    Ensuite tu fais un truc genre :
    (mon code est en C mais si tu es dans ce forum normalement le tien aussi est en C )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    //tu lis l'éxpérience du joueur dans un fichier
    //protos
    int nmbrPionJoueur=0;
    int nmbrPionIA=0;
    int nmbrPionAligneHuamn=0;
    int nmbrPionAligneIA=0;
    SDL_Surface * pionJoueur=NULL; /*c'est pour les graphs en SDL tu adaptes a ton cas */
    //Tu initialise ta librairie
    //le jeu démarre
    //nyanyanya
    //L'IA passe a l'action tantantananan tanana tananan tantantantanana,etc...
    //la le choix
    //quand le joueur pose un pion , nmbrPionJoueur++
    while(partiefinie!=1)
    {
    if(positionPion1.x=positionPion2.x-50) /*tu compare la position des pions si par exemple il doivent être a 50 pixels l'un de l'autre , bref la pas de problème*/
    {
     nmbrPionAligneHuman++;
    }
    if(PositionPionIA1.x=PoqitionPionIA2.x-50)
    {
    nmbrPionAilgneIA++;
    }
    if(nmbrPionAligneIA==3)
    {
     IAGagne();//appel de la fonction qui compléte un alignement de trois pions
     partieFini=1;
    }
    if(nmbrPionAligneHuman==3)
    {
     interventionIA();
    /*
    La tu lance la fonction de l'IA qui gére le cas où le joueur est sur le ponit d'aligner trois pions*/
    }
    else
    {
     IAjoue();
    /*
    appel de la fonction qui gére un tour normal de l'IA par exemple avec rand();
    */
    }
    if(nmbrPionAligneHuman==4)
    {
     JoueurHumanGagne();
    /*appel de la fonction qui s'occupe de la réussite du joueur par exemple avec un message :"Bravo"(je sais c'est pas trés original)*/
    expJoueur++;/*on augmente l'éxpérience virtuelle des joueurs*/
    fprintf(stderr,"%ld",expJoueur);/*je sais c'etspas bien mais j'ai la flemme de faire un fopen , fclose ,nyanya mais toi fait pas comme ca*/
    }
    }
    en ésperant que j'ai pas fait de faute de frappe

  15. #15
    Membre confirmé Avatar de nicodn02
    Profil pro
    Consultant .NET
    Inscrit en
    Mars 2007
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Consultant .NET

    Informations forums :
    Inscription : Mars 2007
    Messages : 263
    Par défaut
    Donc tu me conseillerais de faire des fonctions permettant plusieurs choix :
    _AIgagne
    _Intervention
    _AIjoue

    Voyons voir comment faire pour que je sache les alignements ... enfin pour l'ai sache * Je veut dire, comment veut tu faire augmenter les alignements de AI ? et on en deduira celui de l'humain


    NB: je suis en mode texte avec un tableau 2D

  16. #16
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 116
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 116
    Par défaut
    Quelles sont les dimensions du tableau ? pour 6x6, ça fait __environ__ 6^36 façons de remplir la grille au jeton par jeton.

  17. #17
    Membre éprouvé
    Avatar de Shugo78
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 119
    Par défaut
    Peut tu préciser ce que tu entends par tableau 2D ? , merci
    Et dans le mode 2joueurs donc sans AI(c'est un peu logique mais je précise au cas où ) comment faisait tu pour les alignements ? Sinon je ne peux pas te dire si tu me précise pas ta conception d'un tableau 2D ?

  18. #18
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 116
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 116
    Par défaut
    ___________
    |_|_|_|_|_|_|_|
    |_|_|_|_|_|_|_|
    |_|_|_|_|_|_|_|
    |_|_|_|_|_|_|_|
    |_|_|_|_|_|_|_|
    |_|_|_|_|_|_|_|

    Tableau 2D

  19. #19
    Membre éprouvé
    Avatar de Shugo78
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 119
    Par défaut
    Mais ton prog il est en console ?
    et comment tu fait pour que le joueur choisisse où il veut mettre son Pion ?
    et comment tu détécte les collisions ?
    et comment tu répére un pion ? avec ses coordonnées(mais si c'est en console ca marche pas )?
    et si tu es en graphique t sous quel librairie ?
    Désolé je suis lourd avec mes questions , je sais mais il me faudrait plus de précisions pour t'aider.
    Merci

  20. #20
    Membre confirmé Avatar de nicodn02
    Profil pro
    Consultant .NET
    Inscrit en
    Mars 2007
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Consultant .NET

    Informations forums :
    Inscription : Mars 2007
    Messages : 263
    Par défaut
    ALors, je suis en mode console
    j'ai une focntione qui me permet de palcer un pion verticalement selon le n° de collone que l'humain a entrer: si il n'est pas possible de le placer dans la colonne, la focntione me renvoye un "colonne_invalide"

    En ce qui cocnerne les victoire de puissance 4, a chaque fois que le pion est poser, je part de lui et je verifie si autour de lui il y a un alignement ou pas ( ligne4, colonne4, diago1, diago2)

    En ce qui concerne mon tableau, c'est un tableau 2D (6x7)
    Je pense aussi faire un mode personnalisé en ce qui concerne les idmansion, par exemple, allocation dynamique

    => grille[6][7]

Discussions similaires

  1. Entre technologie et puissance: duel 6800Ultra & X850xt
    Par DarkOcean dans le forum Composants
    Réponses: 5
    Dernier message: 03/02/2005, 17h11
  2. [LG]Puissance et Indice
    Par luno2545 dans le forum Langage
    Réponses: 2
    Dernier message: 08/05/2004, 10h01
  3. [LG]fonction puissance en pascal
    Par le 27 dans le forum Langage
    Réponses: 8
    Dernier message: 13/12/2003, 23h21
  4. x² et puissance de x par récurrence
    Par olivieram dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 15/12/2002, 23h59
  5. Besoin d'aide pour l'I.A. d'un puissance 4
    Par Anonymous dans le forum C
    Réponses: 2
    Dernier message: 25/04/2002, 17h05

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