Accueil Ti-Gen Foire Aux Questions Chat sur le chan #tigcc sur IRC
Liste des membres Rechercher Aide
Bienvenue Invité !   Se connecter             Mes sujets   
Administrer
0 membre(s) et 1 visiteur(s) actif(s) durant les 5 dernières minutes Utilisateurs actifs : Aucun membre + 1 visiteur
Avant de poster sur le forum, il y a des régles de bases à respecter pour une bonne entente et un respect de tous.
Veuillez lire la charte du forum.
  :: Index » Forum Ti68K » Projets » Puissance 4 (68 réponse(s))
./REPRISE DU POST PRECEDENT (post n°38)   Marquer comme non lu.
IP2X Ecrit le: Vendredi 25 juin 2004 à 11:49 Déconnecté(e)    Voir le profil de IP2X Envoyer un email à IP2X Visiter le site WEB de IP2X Envoyer un message privé à IP2X  

biensûr, le morpion c'est pas grave il n'y a pas beaucoup de possibilité
mais pour le puissance 4 je teste autout du pion qui vient d'être posé donc 13 possibilités
IP2X

    
./Post n°39   Marquer comme non lu.
Benjy Ecrit le: Vendredi 25 juin 2004 à 12:33 Déconnecté(e)    Voir le profil de Benjy Envoyer un email à Benjy Visiter le site WEB de Benjy Envoyer un message privé à Benjy  


13????????
Le langage C y'a pas mieux!!!
    
./Post n°40   Marquer comme non lu.
IP2X Ecrit le: Vendredi 25 juin 2004 à 13:08 Déconnecté(e)    Voir le profil de IP2X Envoyer un email à IP2X Visiter le site WEB de IP2X Envoyer un message privé à IP2X  

oui
4 horizontalement
4diagonale vers la droitre
4diagonale vers la gauche
1 verticalement
IP2X

    
./Post n°41   Marquer comme non lu.
bobti89 Ecrit le: Vendredi 25 juin 2004 à 13:54 Déconnecté(e)    Voir le profil de bobti89 Envoyer un email à bobti89 Visiter le site WEB de bobti89 Envoyer un message privé à bobti89  

Tu pourrais t'expliquer plus précisément, c'est le nombre de cases à tester ou le nombre de directions ?
bob ou bob, vous ne voyez pas la différence. Pourtant il y en a une fondamentale, l'un est écrit à l'endroit, l'autre à l'envers.

Visitez mon site : http://www.bobti89.fr.st
Testez mon forum ici
    
./Post n°42   Marquer comme non lu.
IP2X Ecrit le: Vendredi 25 juin 2004 à 13:55 Déconnecté(e)    Voir le profil de IP2X Envoyer un email à IP2X Visiter le site WEB de IP2X Envoyer un message privé à IP2X  

le nombre de possibilité de pouvoir alligner 4 pions de la même coulour
IP2X

    
./Post n°43   Marquer comme non lu.
bobti89 Ecrit le: Vendredi 25 juin 2004 à 14:01 Déconnecté(e)    Voir le profil de bobti89 Envoyer un email à bobti89 Visiter le site WEB de bobti89 Envoyer un message privé à bobti89  

ET tu trouve 13 possibilités, j'en vois beaucoup plus...
bob ou bob, vous ne voyez pas la différence. Pourtant il y en a une fondamentale, l'un est écrit à l'endroit, l'autre à l'envers.

Visitez mon site : http://www.bobti89.fr.st
Testez mon forum ici
    
./Post n°44   Marquer comme non lu.
IP2X Ecrit le: Vendredi 25 juin 2004 à 14:06 Déconnecté(e)    Voir le profil de IP2X Envoyer un email à IP2X Visiter le site WEB de IP2X Envoyer un message privé à IP2X  

oui
2(là ou je joue)
1(pions déjà existant)

hori:
2111
1211
1121

vert
2
1
1
1

dia:
2
  1
    1
      1

1
  2 
    1
      1

1
  1
    2
      1

1
  1
    1
      2

et idem dans l'autre sens


-Edité le Vendredi 25 juin 2004 à 17:17 par IP2X-
IP2X

    
./Post n°45   Marquer comme non lu.
verytourist Ecrit le: Vendredi 25 juin 2004 à 23:00 Déconnecté(e)    Voir le profil de verytourist Envoyer un email à verytourist Envoyer un message privé à verytourist  

t'en a oublié une en horiz: 1112
    
./Post n°46   Marquer comme non lu.
IP2X Ecrit le: Samedi 26 juin 2004 à 09:29 Déconnecté(e)    Voir le profil de IP2X Envoyer un email à IP2X Visiter le site WEB de IP2X Envoyer un message privé à IP2X  

ah oui, c'est vrai
IP2X

    
./Post n°47   Marquer comme non lu.
bobti89 Ecrit le: Samedi 26 juin 2004 à 11:40 Déconnecté(e)    Voir le profil de bobti89 Envoyer un email à bobti89 Visiter le site WEB de bobti89 Envoyer un message privé à bobti89  

Ah d'accord, je vois mieux, mais je ne ferais pas comme ca.
C'est-à-dire qu'au lieu de tester tes 13 solutions, je prendrais la case où tu viens de mettre ton pion et je compterais dans chaques directions le nombre de pions que ca aligne. Et si on trouve que c'est >=4, alors le joueur a gagné.
bob ou bob, vous ne voyez pas la différence. Pourtant il y en a une fondamentale, l'un est écrit à l'endroit, l'autre à l'envers.

Visitez mon site : http://www.bobti89.fr.st
Testez mon forum ici
    
./Post n°48   Marquer comme non lu.
IP2X Ecrit le: Samedi 26 juin 2004 à 14:24 Déconnecté(e)    Voir le profil de IP2X Envoyer un email à IP2X Visiter le site WEB de IP2X Envoyer un message privé à IP2X  

oui ça peut être une solution

mais il faut tester aussi 1 dans un sens et 2 dans l'autre sens
IP2X

    
./Post n°49   Marquer comme non lu.
IP2X Ecrit le: Samedi 26 juin 2004 à 18:51 Déconnecté(e)    Voir le profil de IP2X Envoyer un email à IP2X Visiter le site WEB de IP2X Envoyer un message privé à IP2X  

sinon quelqu'un a une autre idée ?
IP2X

    
./Post n°50   Marquer comme non lu.
bobti89 Ecrit le: Samedi 26 juin 2004 à 19:37 Déconnecté(e)    Voir le profil de bobti89 Envoyer un email à bobti89 Visiter le site WEB de bobti89 Envoyer un message privé à bobti89  

Voilà comment je fais :

Voilà ton tableau mat (c'est une liste) :

56    57    58    59    60    61    62    63    64
48    49    50    51    52    53    54    55   
40    41    42    43    44    45    46    47
32    33    34    35    36    37    38    39
24    25    26    27    28    29    30    31
16    17    18    19    20    21    22    23
 8    9     10    11    12    13    14    15
 0     1     2     3     4     5     6     7

Les nombres en gras représentent ton plateau, les autres sont initialisés à -1 (c'est-à-dire extérieur de ton plateau :D ).



Supposons que l'on joue en 28, je teste l'horizontale en faisant :
0->a
25->i
While mat[i]!=-1
If mat[i]=joueur Then
a+1->a
If a=4 : return 1
Else
0->a
EndIf
i+1->i
EndWhile

et de même avec la verticale : une boucle à partir de 12 avec un pas de 8.

Après les diagonales en partant de 14 avec un pas de 7 et en partant de 10 avec un pas de 9.


La seule difficulté qui te reste est comment trouver les nombres 25, 12, 14 et 10 en fonction de 28, je te laisse réfléchir.

J'espère que tu n'as pas rien compris :)
bob ou bob, vous ne voyez pas la différence. Pourtant il y en a une fondamentale, l'un est écrit à l'endroit, l'autre à l'envers.

Visitez mon site : http://www.bobti89.fr.st
Testez mon forum ici
    
./Post n°51   Marquer comme non lu.
Benjy Ecrit le: Samedi 26 juin 2004 à 19:39 Déconnecté(e)    Voir le profil de Benjy Envoyer un email à Benjy Visiter le site WEB de Benjy Envoyer un message privé à Benjy  


lol moi faut que je fasse pareille pour une bataille navale mdr
Le langage C y'a pas mieux!!!
    
./Post n°52   Marquer comme non lu.
IP2X Ecrit le: Dimanche 27 juin 2004 à 10:15 Déconnecté(e)    Voir le profil de IP2X Envoyer un email à IP2X Visiter le site WEB de IP2X Envoyer un message privé à IP2X  

ouais e vais y reflechir
merci à toi bobti89 :)
IP2X

    
./Post n°53   Marquer comme non lu.
IP2X Ecrit le: Dimanche 27 juin 2004 à 11:44 Déconnecté(e)    Voir le profil de IP2X Envoyer un email à IP2X Visiter le site WEB de IP2X Envoyer un message privé à IP2X  

je sais pas si vous êtes aucourant #elec# je suis entrain de le faire en C
IP2X

    
./Post n°54   Marquer comme non lu.
bobti89 Ecrit le: Dimanche 27 juin 2004 à 13:54 Déconnecté(e)    Voir le profil de bobti89 Envoyer un email à bobti89 Visiter le site WEB de bobti89 Envoyer un message privé à bobti89  

J'en ai fait un récemment, tu veux que je te donne la source (surrement très mauvaise mais bon), sachant que je n'utilise pas ce que j'ai dis plus haut, càd que j'utilise un tableau de la forme :

 0  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
bob ou bob, vous ne voyez pas la différence. Pourtant il y en a une fondamentale, l'un est écrit à l'endroit, l'autre à l'envers.

Visitez mon site : http://www.bobti89.fr.st
Testez mon forum ici
    
./Post n°55   Marquer comme non lu.
Benjy Ecrit le: Dimanche 27 juin 2004 à 14:28 Déconnecté(e)    Voir le profil de Benjy Envoyer un email à Benjy Visiter le site WEB de Benjy Envoyer un message privé à Benjy  


lol il yarai plus simple faire une matrice de la taille du plateaux et la mettre a 0 partout est quand on met un pion elle passe a 1 pour le joueur un et 2 pour le joueur 2
Le langage C y'a pas mieux!!!
    
./Post n°56   Marquer comme non lu.
IP2X Ecrit le: Dimanche 27 juin 2004 à 17:58 Déconnecté(e)    Voir le profil de IP2X Envoyer un email à IP2X Visiter le site WEB de IP2X Envoyer un message privé à IP2X  

oauis donne toujours
IP2X

    
./Post n°57   Marquer comme non lu.
bobti89 Ecrit le: Dimanche 27 juin 2004 à 18:11 Déconnecté(e)    Voir le profil de bobti89 Envoyer un email à bobti89 Visiter le site WEB de bobti89 Envoyer un message privé à bobti89  

Voilà, je suis près à toutes les remarques vis-à-vis de ce prog, moi aussi j'apprend le C.


#include <tigcclib.h>

int aligne(int,int,char*);
int ai(int,char*);
void rec(int,int,char*, int*);

// Main Function
void _main(void)
{
  int  g, pos=3, cp=0,jo=1 ;
  char m[49] ;
  static unsigned char circle[14] = {0b00011100,0b00100010,0b01000001,0b01000001,0b01000001,0b00100010,0b00011100,0b00011100,0b00111110,0b01111111,0b01111111,0b01111111,0b00111110,0b00011100};
  char *pt=circle ;
  memset (m, 0, 49 * sizeof(char)); //initialise les cases du jeu et la hauteur (cases 42 à 49) à 0;
  ClrScr();
  //Affichage du plateau
  for (g=20 ; g<91 ; g+=10) DrawLine (g, 32, g, 80, A_NORMAL); // g sera aussi utilisé pour les touches
  DrawLine (20, 80, 90, 80, A_NORMAL);
   while (g != 264) //tant qu'on appuie pas sur ESC
  {
     memset (LCD_MEM, 0, 960);//efface ligne de reflexion + curseur
     DrawStr ( pos*10+22, 24, "24", A_NORMAL); //affichage du curseur
     g=ngetchx(); //si une touche est appuyée
     if (pos>0 && g==338) pos--;  //déplacement du curseur
     if (pos<6 && g==344) pos++;   //déplacement du curseur
     while(g==340 && m[42+pos]<6)
    {
      Sprite8 ( pos*10+21, 72-m[42+pos]*8, 7, pt + (7*jo-7), LCD_MEM, SPRT_OR);
       m[(5-m[42+pos]++)*7+pos]=jo;
       if (aligne( pos, jo, m) || ++cp==42)
       {
         DrawStr ( 10, 92,cp==42 ? "Match nul." : jo==1 ? "Vous avez gagné !!!" :  "Vous avez perdu.", A_NORMAL);
         ngetchx();
         return;
       } 
       jo=3-jo;
      if (jo==1) break;
       pos=ai(jo, m);
    }  
  }
}
int aligne(int pos,int jo, char *m)
{
  int i,a,b,i2,i3;
  a=b=0;
  for (i=0;i<7;i++)
  {
    a=(a+1)*(m[(6-m[42+pos])*7+i]==jo);  //horizontal
    b=(b+1)*(m[i*7+pos]==jo);      //vertical
    if (a==4 || b==4) return 1;
  }
  for (i=0;i<3;i+=2)              //test des diagonales
  {
    a=0;
    i2=(i-1)*m[42+pos]-i+pos+36;
    if ((i2 < 35) || (i2 > 41)) i2=(-7*i+7)*i2+269*i-210;
    i3=i2;
    while((i2>=0) && ((i2%7) != 3*i || i2 == i3 ))
    {
      a = (a+1)*(m[i2]==jo);
      if (a==4) return 1;
      i2-=6+i;
    }
  }
  return 0; //si aucune ligne, retourne 0
}

int ai(int jo, char *m)  
{
  int imax=0, score[8] ; //score[7] est la position(colonne) en cours de reflexion
   memset (score, 0, 8 * sizeof(int));  //initialise les scores à 0
  rec(jo, 0, m, score); //Lance la fonction récursive
  score[3]+=8; //pour que le coup du milieu ait plus de points
   for (jo=1;jo<7;jo++) //utilisation de jo pour ne pas définir une variable en plus
  {
    if (score[jo] > score[imax]) imax=jo;
  }
  return (imax);
}

void rec(int jo, int compt, char *m, int *score)
{
  int i,posm; 
    if (compt<5) //limite la profondeur à 5 coups à l'avance
    {
      for (i=0;i<7;i++) //parcourt les différentes colonnes
      {
        if (m[42+i]<6) //si la colonnes n'est pas pleine
        {
          posm=(5-m[42+i])*7+i;
          m[posm]=jo;
          m[42+i]++;
          rec(3-jo,compt+1,m, score);
          if (aligne(i,jo, m))
          {
            //decompte des points en fonction du joueur
            score[score[7]]-=3*jo*(compt-20)+2*compt+100 ;
            if (compt<2)
            {
              score[score[7]]=(compt*-55+30)*1000;
              score[i]+=500*compt;
              m[posm]=0;
              m[42+i]--;
              break;
            }
            if (compt == 2) score[i]-=400;
          }
          m[posm]=0;
          m[42+i]--;
          
        }
        if (compt==0) 
        {
          memset (LCD_MEM, 255, score[7]*3+3);//affichage d'une barre de réflexion
          if (m[42+i]==6) score[score[7]]=-30000; //si la colonne est pleine, score dérisoir pour pas qu'il soit joué
          score[7]++;
        }
      }
    }
}
bob ou bob, vous ne voyez pas la différence. Pourtant il y en a une fondamentale, l'un est écrit à l'endroit, l'autre à l'envers.

Visitez mon site : http://www.bobti89.fr.st
Testez mon forum ici
    
  :: Index » Forum Ti68K » Projets » Puissance 4 (68 réponse(s))
Pages : 3/4     « 1 2 [3] 4 » »|

.Répondre à ce sujet
Les boutons de code
[B]old[I]talic[U]nderline[S]trikethrough[L]ine Flip Hori[Z]ontallyFlip [V]erticallySha[D]ow[G]low[S]poilerCode [G][C]ite
Bullet [L]istList Item [K] Link [H][E]mail[P]icture SmileysHelp
Couleurs :
Saisissez votre message
Activer les smileys
     

Forum de Ti-Gen v3.0 Copyright ©2004 by Geoffrey ANNEHEIM
Webmaster: Kevin KOFLER, Content Admins: list, Server Admins: Tyler CASSIDY and Kevin KOFLER, DNS Admin: squalyl
Page générée en 67.05ms avec 18 requetes