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. #41
    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 en faite, e fait un rand sur la position nb_col et nb_lig, puis j'envoie les coordonnées a cette fonction qui va me palcer mon pion....
    Oki!

  2. #42
    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
    En effet c'est a ca que je pensais , tu l'utilise lorsque l'IA n'a pas besoin de casser un alignement ou d'en faire un

  3. #43
    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
    Et maintenant, comment faire pour casser un alignement ?
    (Lorsque l'humain joue +1 dans ses cases, et qd l'AI joue, -1 et 0 dans les cases vides)

  4. #44
    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
    Et bien tu te créé une petite fonction qui pour chaque pion de l'humain détécté(en parcourant le tableau grâce a une boucle) vérifie la gauche (si il ya une gauche,donc il faut que tu mettes un switch au début pour gérer les éxcptions comme les pons tout a gauche),ensuite vérifie la droite(pareil , y -a t-il une droite ?) ensuite les diagonales le haut et le bas.
    Pour le switch tu peux faire un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    switch(positionDetecteur)
    case 1:/*donc quand c'est au bord en haut a gauche il n'y a pas de droite ni de haut ni de diagonales en haut gauche ni de diagonales en bas gauche ni de diagonales en haut droite donc tu met :*/
    pionGauche=0;//pionGauche , y en a pas donc zéro
    pionHaut=0;//non plus donc zéro
    pionHautGauche=0;//y en pas non plus donc zéro
    pionBasGauche=0;//non plus donc zéro
    pionHautDroite=0;//non plus donc zéro
    /*voilà tu fait ca en réfléchissant pour chaque position spéciale du tableau*/
    Comme ca tu détécte facilement les cases tout a gauche du tableau , tout a droite , toute en bas,etc..
    Ensuite tu fait des conditions pour que les pions qui sont tout a gauche du tableau n'est pas accés au détéction ,d'alignement gauche ,etc..
    Bonne chance

  5. #45
    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
    Oulalala, courage Nicolas...

    Si j'ai bien compris, toutes les cases qui sont des exceptions sont toutes celle qui se trouvent sur le bord de mon tableau 2D ?

  6. #46
    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
    Oui en partie(mais pas seulement au bord )
    partout ou je met des x :
    x x x x x x
    x x
    x x
    x x
    x x
    x x
    x x x x x x
    A chacun de ses emplacements il y une exception par exemple celui en bas a droite n'a pas de pion en bas ni a droite , ni en diagonale Bas - Droite , ni en diagonale Bas - Gauche ni an diagonale Haut-Gauche.
    Etc...
    Je sais c'est décourageant mais vois le bon côté des choses , une fois que tu auras fait tu auras fait la plus grosse partie du détécteur d'alignement

  7. #47
    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 faite, cela me permet jsute d'eviter ma fonction DetecterAlignement pour un rien selon la position du pion
    je pourrais meme faire par exemple : execution de la focntion detection alignement si et seulement le pion est different de grille[][0], grille[][1], grille[0][] et grille[7][], non ?

    En faite non
    mais par contre, ma fonctione detection sera domposer de detection horizontale, verticale, diagonale ascendante, descendante, et selon la position du pion, toute la focntione ne va pas s'éxécuter, non?

  8. #48
    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
    Voilà c'est ca
    par exemple en imaginant que le pion soit a l'emplacement du x alors toute ce qui concerne le bas(aussi bien les diagonale que la verticale) ne sera pas éxécuté pour ne pas provoquer d'erreur de compilation ni de détéction fausse.
    . . . . . .
    . . . . . .
    . . . . . .
    . . . . . .
    . . . . . .
    . . . . . .
    . . . x . .
    Voilà le tableau juste des endroits où des éxceptions seront a gérer(dans mon ancien poste les espaces s'étaient éffacé rapprochant alors la colone de droite juste a côté de celle de gauche):
    xxxxxx
    x......x
    x......x
    x......x
    x......x
    x......x
    xxxxxx
    voilà , chaque point ne corespond pas a une case !

  9. #49
    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 en faite, il faudrait que j'envoi plus ou moins un code a la focntione recherche alignement pour voir ou peut se trouve l'aligneùent selon la position du x
    Par contre, en ce qui concerne la recherche d'un alignement, je fais comment, par les "points" que formerton l'alignement, c'est à dire si la zone de 4case selectionner est égal a 3 alors, il faut casser l'alignement humai ( +1 humain, -1 ai, 0 vide)
    non?

  10. #50
    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
    Si j'ai bie compris oui il faut casser l'alignement lorsque quatre case séléctionné posséde la valeur trois. Pour ca tu recherche un 4éme pion humain qui pourrait rejoindre les trois autres , sinon un endroit vide qui empêcherait la suite de l'alignement !
    J'épspére avoir bien compris ton message et avoir été clair

  11. #51
    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
    Oui, tu as bien compris ce que je pensait...
    DetectionAlignement : recherche d'un alignement de 4 cases dont la valeurs vaut 3
    CasseAlignement : recherche d'une case dont lalgienemtn 3humain + AI = 2 ou bien case a 0 ou l'humain si il joue sa donne 4 ?? ( meilleur solution? )

  12. #52
    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 exactement ca , tu fait une boucle : tant que.. alignement pas casser,alors si case dont lalignement 3humain + AI = 2 et si case a 0 ou l'humain si il joue sa donne 4(par exmple en isolant les cases a côtés et en vérifiant si les quatre cases avec celle là a valeur 1 donne 4)

  13. #53
    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
    Oki, il reste tout cela a voir comment coder
    Par exemple, une boucle for (pour alignement verticale):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for(i=0, i<=4, i++){
    instructions
    }
    Mais je ne vois pas quoi mettre dans les isntructions, je voit plus ou moins comment l'expliquer mais pas comment le coder

    [QUOTE]
    on verifie les 4cases (3case + pion jouer ) a gauche si vaut 3 alors on arrete de suite, sinon on continue, et on repette l'action 3fois ( donc 4 en total ) en faisai varier i
    non ?

    Et comment coder ?

  14. #54
    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
    Faire varier "i" est une bonne idée
    pour le reste tu créé une variable qui contient 0 tant que l'alignement n'est pas brisé , tu fait une boucle while qui répéte la détéction (avec le tableau, en isolant les cases 4 par 4 , comme ca par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    for(i;i<4;i++)
    {
     int caseIsolé[5];
     caseIsolé[i]=1;
     }
    /*ainsi on isole les cases et on additione les 4 cases isolé , si leur valeur est égale a 3 on casse l'alignement a côté*/
    )ensuite sauf dans ce cas :
    xxx...xx
    où la fonction cassera l'alignement tout de suite.
    On passe a la fonction de cassage d'alignement un pointeur sur le tableau positionPion et aprés cette fonction parcours le tableau avec une boucle for en s'aidant peut être de variable donné contenant la position de l'alignement, on cherche une case vide et on le fait jouer là(le = IA)

  15. #55
    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
    Pourquoi avoir créé un tableau caseIsolé de 5 ? ^o), c'est un alignement de 4 que je teste...

  16. #56
    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
    Ah oui c'est vrai
    Mais au cas où il est en général plus prudent d'augmenter la taille du tableau d'une ou deux cases par prudence
    Enfin c'est une de mes habitudes , aprés a toi de voir

  17. #57
    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 avec la boucle que tu m'as donné, on donne 1 a chaque case du tableau caseIsolé ? ( l'interet ?)

  18. #58
    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
    Oui , c'est vrai mais l'important c'est la boucle en elle même et non pas les instructions qu'il y a dedans.

  19. #59
    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 une mauvaise habitude de prévoir des cases supplémentaires. Ca apporte de la confusion au code, et c'est de plus inutile si les assertions d'allocation sont bien faites.

    Par exemple, mettre le même nombre de cases mémoire partout est indispensable si on utilise fgets. Il est nénamoins possible de préciser à fgets une longueur de chaîne moindre que la mémoire allouée, mais c'est nuisible à la lisibilité du programme et à la cohérence. un octet en plus ou en moins n'est pas forcément nuisible avec un ordinateur actuel, mais pourquoi allouer une certaine quantité de mémoire si c'est pour ne pas vous en servir ? Un espace mémoire vide en plus ne sert strictement à rien au programme.

    Comme le C autorise al gestion de la mémoire au plus près, il est inutile voir dangereux pour la correction du programme d'allouer des tailles différentes, car ça peut masquer les erreurs.

    Normalement, 100 cases d'un tableau ce char c'est 100 octets tout juste, et il est inutile de prévoir plus de mémoire si vous utilisez 100 octets

  20. #60
    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
    Test horizontale
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    int verif_hor_ai(char grille_point[][7], int num_lig, int num_col){
    int i=0;
    int num=0;
     
    for(i=num_col-3; i<=num_col; i++){
        num=grille_point[num_lig][i] + grille_point[num_lig][i+1] +      grille_point[num][i+2] + grille_point[num_lig][i+3];
        if (num == 3) return 1;
    }
    return 0;
    }
    Qu'en pensez-vous ? avec num_lig et num_col la position du pion mis par l'humain et grille_point le tableau où il y a les points de chaque case en focntione du pion ( +1, -1, 0 )

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