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°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
    
./Post n°58   Marquer comme non lu.
IP2X Ecrit le: Dimanche 27 juin 2004 à 18:16 Déconnecté(e)    Voir le profil de IP2X Envoyer un email à IP2X Visiter le site WEB de IP2X Envoyer un message privé à IP2X  

il fonctionne nickel crome
IP2X

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

Le seul truc marrant, c'est ca taille :)
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°60   Marquer comme non lu.
IP2X Ecrit le: Dimanche 27 juin 2004 à 18:22 Déconnecté(e)    Voir le profil de IP2X Envoyer un email à IP2X Visiter le site WEB de IP2X Envoyer un message privé à IP2X  

ouais tros leger, BRAVO

en tout cas c'est pas de mon niveau
IP2X

    
./Post n°61   Marquer comme non lu.
Lionel Debroux Ecrit le: Lundi 28 juin 2004 à 09:04 Déconnecté(e)    Voir le profil de Lionel Debroux Envoyer un email à Lionel Debroux Visiter le site WEB de Lionel Debroux Envoyer un message privé à Lionel Debroux  

Sur le code C, deux remarques:
* utilise les constantes de kbd.h et compat.h...
* "memset (m, 0, 49 * sizeof(char));" est lent, même si ça n'est fait qu'une fois. Il se peut que:
unsigned char *ptr = &m[0];
for (short i=0;i<49;i++) *ptr++ = 0; // ou peut-être avec une boucle descendante (possibilité d'instruction dbf)
soit plus petit.
Attention, j'ai écrit du C99 (déclaration du compteur de boucle dans la boucle). Si tu veux l'utiliser tel quel, il faut l'option de compilation -std=gnu99 (pour profiter également des extensions GNU).
Lionel Debroux - membre de TICT.
    
./Post n°62   Marquer comme non lu.
bobti89 Ecrit le: Lundi 28 juin 2004 à 11:32 Déconnecté(e)    Voir le profil de bobti89 Envoyer un email à bobti89 Visiter le site WEB de bobti89 Envoyer un message privé à bobti89  

Ok pour le compat.h, mais je ne vois pas de quoi tu veux parler pour kbd.h :(
Et sinon, pour l'intelligence, j'ai inventé celle-ci (en tout cas je me suis basé sur rien pour la faire), mais après je me suis renseigné sur le minimax et je n'arrive pas à l'implemanter, j'ai l'impression que c'est pas top pour un puissance4...
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°63   Marquer comme non lu.
Benjy Ecrit le: Lundi 28 juin 2004 à 11:33 Déconnecté(e)    Voir le profil de Benjy Envoyer un email à Benjy Visiter le site WEB de Benjy Envoyer un message privé à Benjy  


du C99 ???? c'est quoi ca??
Le langage C y'a pas mieux!!!
    
./Post n°64   Marquer comme non lu.
Lionel Debroux Ecrit le: Lundi 28 juin 2004 à 11:51 Déconnecté(e)    Voir le profil de Lionel Debroux Envoyer un email à Lionel Debroux Visiter le site WEB de Lionel Debroux Envoyer un message privé à Lionel Debroux  

> Ok pour le compat.h, mais je ne vois pas de quoi tu veux parler pour kbd.h
KEY_ENTER, KEY_ESC...

> du C99 ???? c'est quoi ca??
RTM.
Lionel Debroux - membre de TICT.
    
./Post n°65   Marquer comme non lu.
verytourist Ecrit le: Lundi 28 juin 2004 à 11:54 Déconnecté(e)    Voir le profil de verytourist Envoyer un email à verytourist Envoyer un message privé à verytourist  

une norme de C..
    
./Post n°66   Marquer comme non lu.
Benjy Ecrit le: Lundi 28 juin 2004 à 12:16 Déconnecté(e)    Voir le profil de Benjy Envoyer un email à Benjy Visiter le site WEB de Benjy Envoyer un message privé à Benjy  


ok et je peut le lire ou lol ???? car RTM mai ou???
Le langage C y'a pas mieux!!!
    
./Post n°67   Marquer comme non lu.
Sasume Ecrit le: Lundi 28 juin 2004 à 12:33 Déconnecté(e)    Voir le profil de Sasume Envoyer un email à Sasume Visiter le site WEB de Sasume Envoyer un message privé à Sasume  

Arrête de dire lol à chaque post.
http://fr.wikipedia.org/wiki/Langage_C

[EDIT] Balise URL merci!
-Edité le Lundi 28 juin 2004 à 13:04 par geogeo-
    
./Post n°68   Marquer comme non lu.
IP2X Ecrit le: Vendredi 2 juillet 2004 à 13:40 Déconnecté(e)    Voir le profil de IP2X Envoyer un email à IP2X Visiter le site WEB de IP2X Envoyer un message privé à IP2X  

j'ai l'ai commencé à le codé en C mon p4, j'en suis au stade de pouvoir jouer blanc et noir, je vais me mettre bientôt au test
IP2X

    
  :: Index » Forum Ti68K » Projets » Puissance 4 (68 réponse(s))
Pages : 4/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 71.3ms avec 18 requetes