begin process at 2012 05 30 15:52:26
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

Réversi again, pas pour les mêmes raisons


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Réversi again, pas pour les mêmes raisons

mardi 4 janvier 2005 à 11:27:07 | Réversi again, pas pour les mêmes raisons

foducool

ben vala moi aussi j'dois faire un prog de reversi en C
j'avais déjà posté mais le thread à l'air si vieux que je l'ai pas retrouvé dans les 10 premières pages du forum alors je reposte vala.

je fais le reversi, je tourne sous windows, j'utilise Dev C++
je fais la phase d'initialisation du plateau :

#define N 8
#include <stdio.h>

int main(void)
{
 int Plateau[N][N];
 int i,j,k=64;
 for(i=N;i>0;i--)
 {
  for(j=N;j>0;j--)
  {
   Plateau[i][j]=0;
  }
 }
 return 0;
}

j'l'ai séparée du reste du prog pour voir pk le programme plantait.
enfin bref j'en suis arrivé à la réduire à ça et je comprends pas pourquoi quand je lance l'application, l'invite de commande me met un erreur (en considérant que j'ai vérifié que le programme effectuait bien l'opération que je lui demandais en couplant l'initialisation avec un programme d'affichage.)
je pense que le problème vient de la boucle vu qu'il reste plus que ça et que ca plante encore
siouplé aidez moiiiiiiiiiiiiiiiiiiiiiiiiiiiii
mardi 4 janvier 2005 à 11:42:02 | Re : Réversi again, pas pour les mêmes raisons

Dvdmizo

Réponse acceptée !
Salut,
tu initialises un tableau de N cases par contre il ne faut pas oublier que les cases vont de 0 à N-1
du coup au premier tour de ta boucle tu écris à la case N (en dehors des limites de ton tableau)

je pense qu'il faudrait plutot faire la boucle comme ça :

int main(void)
{
 int Plateau[N][N];
 int i,j,k=64;
 for(i=N-1;i>=0;i--)
 {
  for(j=N-1;j>=0;j--)
  {
   Plateau[i][j]=0;
  }
 }
 return 0;
}



DvdMizo
mardi 4 janvier 2005 à 11:48:10 | Re : Réversi again, pas pour les mêmes raisons

foducool

rha putain le con ! XD
c'était ça :p
mardi 4 janvier 2005 à 11:49:03 | Re : Réversi again, pas pour les mêmes raisons

foducool

c chiant ca va m'obliger a raisonner en partant de 0 et non de 1 pour la numérotation des cases XD
mardi 4 janvier 2005 à 11:52:01 | Re : Réversi again, pas pour les mêmes raisons

foducool

ah ouais tiens ptite question, y'a moyen de faire un scanf de cette manière :
scanf("%d-%d",&a,&b);
tel que quand on pose la question, on réponde de la manière a-b ?

(c'est pas des symboles de différence que je pose là)
mercredi 5 janvier 2005 à 09:25:57 | Re : Réversi again, pas pour les mêmes raisons

Dvdmizo

je ne suis pas trop fan du scanf. perso je préfère faire de la saisie caractère par caractère et analyser après...

mais ça marche

DvdMizo
mercredi 5 janvier 2005 à 14:28:36 | Re : Réversi again, pas pour les mêmes raisons

foducool

pfff maintenant j'ai un blème de boucle :

#include <stdio.h>
#define N 8
/*initialiser le plateau de jeu*/
void init(int T[N][N])
{
 int i,j;
 for(i=0;i<N;i++)
 {
  for(j=0;j<N;j++)
  {
   T[i][j]=0;
  }
 }
 T[3][3]=-1;
 T[3][4]=1;
 T[4][4]=-1;
 T[4][3]=1;
}

/*affichage du plateau*/
void affichage(int Plateau[N][N])
{
 int i,j,k=65;
 printf("  1 2 3 4 5 6 7 8\n");
 for(i=0;i<N;i++)
 {
  printf("%c",k+i);
  for(j=0;j<N;j++)
  {
   printf("%2d",Plateau[i][j]);
  }
  printf("\n");
 }
}

/*tour du joueur n°1*/
void joueur1(int Plateau[N][N])
{
 char lettre;
 int colonne,ligne;
 printf("joueur n°1\n");
 printf("choisissez une case où poser votre pion (lettre chiffre) : ");
 scanf("%c %d",&lettre,&colonne);
 if(lettre=='A') ligne=0;
 if(lettre=='B') ligne=1;
 if(lettre=='C') ligne=2;
 if(lettre=='D') ligne=3;
 if(lettre=='E') ligne=4;
 if(lettre=='F') ligne=5;
 if(lettre=='G') ligne=6;
 if(lettre=='H') ligne=7;
 colonne=colonne-1;
 Plateau[ligne][colonne]=-1;
}

/*tour du joueur n°2*/
void joueur2(int Plateau[N][N])
{
 char lettre;
 int colonne,ligne;
 printf("joueur n°2\n");
 printf("choisissez une case où poser votre pion (lettre chiffre) : ");
 scanf("%c %d",&lettre,&colonne);
 if(lettre=='A') ligne=0;
 if(lettre=='B') ligne=1;
 if(lettre=='C') ligne=2;
 if(lettre=='D') ligne=3;
 if(lettre=='E') ligne=4;
 if(lettre=='F') ligne=5;
 if(lettre=='G') ligne=6;
 if(lettre=='H') ligne=7;
 colonne=colonne-1;
 Plateau[ligne][colonne]=1;
}

/*vérification des pions à retourner*/
void retourne(int Plateau[N][N])
{
(ça je le ferai plus tard)
}

/*le plateau est-il plein ?*/
int case_vide(int Plateau[N][N])
{
 int i,j;
 for(i=0;i<N;i++)
 {
  for(j=0;j<N;j++)
  {
   if(Plateau[i][j]==0) return 0;
  }
 }
 return 1;
}

/*fonction principale*/
int main(void)
{
 int Plateau[N][N],vide;
 init(Plateau);
 affichage(Plateau);
 do{
 joueur1(Plateau);
 affichage(Plateau);
 joueur2(Plateau);
 affichage(Plateau);
 vide=case_vide(Plateau);
 }while (vide=0);
 return 0;
}

comment ça se fait que quand je fais tourner le programme, quand vient le tour du joueur 1, ça marche impec, il prend les coordonnées, il affiche et quand c'est le tour du joueur 2 il sort du prog sans même demander le scan ?

jeudi 6 janvier 2005 à 09:34:55 | Re : Réversi again, pas pour les mêmes raisons

Dvdmizo

j'ai testé et il s'arrête bien sur le scanf, par contre il y a quelques petites choses qui me chagrinent un peu dans ton code ....

1) il quitte la boucle après un seul tour :

ça vient de ton test dans le while:
while(vide=0) ;
    au lieu de
while(vide==0) ; 
     ou
while(!vide) ;

2) dans ta fonction :

void joueur1(int Plateau[N][N])
{
 char lettre;
 int colonne,ligne;
 printf("joueur n°1\n");
 printf("choisissez une case où poser votre pion (lettre chiffre) : ");
 scanf("%c %d",&lettre,&colonne);
 if(lettre=='A') ligne=0;
 if(lettre=='B') ligne=1;
 if(lettre=='C') ligne=2;
 if(lettre=='D') ligne=3;
 if(lettre=='E') ligne=4;
 if(lettre=='F') ligne=5;
 if(lettre=='G') ligne=6;
 if(lettre=='H') ligne=7;
 colonne=colonne-1;
 Plateau[ligne][colonne]=-1;
}


(idem pour joueur2) si la lettre saisie ne correspond à aucun des choix ('A', 'B', etc) ou si l'utilisateur (qui peut être très con parfois lol) tape une minuscule, ta variable ligne n'est jamais initialisée et donc quand tu fais :

Plateau[ligne][colonne]=-1;

o
u encore si l'utilisateur tape une valeur de 'colonne' en dehors des limites du tableau,
tu risques d'avoir un petit problème de plantage (comme au début).

j'aurais fait plutot comme ça :

void joueur1(int Plateau[N][N])
{
 char lettre;
 int colonne,ligne;
 printf("joueur n°1\n");
 printf("choisissez une case où poser votre pion (lettre chiffre) : ");
 scanf("%c %d",&lettre,&colonne);
   
    switch(lettre)
    {
        case 'A' :
        case 'a' :
        {
            ligne=0;
            break;
        }
       
case 'B' :
        case 'b' :
        {
             ligne=1;
             break;
        }
       
case 'C' :
        case 'c' :
        {
             ligne=2;
             break;
        }
       
case 'D' :
        case 'd' :
        {
             ligne=3;
             break;
        }
       
case 'E' :
        case 'e' :
        {
             ligne=4;
             break;
        }
       
case 'F' :
        case 'f' :
        {
             ligne=5;
             break;
        }
       
case 'G' :
        case 'g' :
        {
             ligne=6;
             break;
        }
       
case 'H' :
        case 'h' :
        {
             ligne=7;
             break;
        }
        default:
        {
           ligne=-1 ;
        }
    }
    colonne=colonne-1;
    if(ligne != -1
&& colonne >= 0 && colonne < N)
    {
         Plateau[ligne][colonne]=-1;
    }
}


voilà, j'éspère que ça t'aidera ;)


DvdMizo
jeudi 6 janvier 2005 à 14:28:18 | Re : Réversi again, pas pour les mêmes raisons

foducool

arf ouais merde >_<
enfin pour les caractères, c'est vrai que je devrai faire ça mais j'en suis qu'au début là
c'est une bonne idée je mettrai en pratique merci Mister Mizo
samedi 8 janvier 2005 à 22:07:51 | Re : Réversi again, pas pour les mêmes raisons

Vladostivistic

Bonjour,
je commence le C moi aussi et je dois faire un projet reversi.
Cependant, j'ai quelques problemes pour faire la condition de test des cases.

dans l'exemple ci dessous je test la case de gauche a la case que lon veut rentrer.
Le probleme qui se pose c'est que au bout de la 3eme  fois il me creer un autre symbole au dessus de la case voulu et je ne sais pas d'ou viens le pb.
(dsl pour la longueur)


#include <stdio.h>
#include "conio.h"


int main(int argc, char *argv[])
{


  long  taille, ligne, colonne;
  long col, milieu, tai, lig ;
  long i, j, cpt ;
  long choix;
  char adv, mien ;
  char plat[30][30];


  do                                    /*boucle pour avoir un nombre de cases pair*/
  {
    printf("Combien de colonnes, lignes voulez vous? \n");
    fflush(stdin);
    scanf("%ld", &taille);
    tai=taille%2;
  }
  while(taille<6 || tai!=0 );
  printf("\n");

                                    /*calcul pour obtenir le milei du plateau*/
  milieu = taille/2;


  for(i=0; i<taille; i++)           /*boucle pour l'affichge des abscisses*/
  {
    if(i==0)
    {
      printf("     %c ", i+49);
    }
    else
    {
      printf(" %c ", i+49);
    }
  }
  printf("\n");


  for(i=0; i<taille; i++)          /*boucle pour l'affichage du tableau avec son milieu*/
  {
     if(i<9)                                            /*et des ordonnées*/
     {
       printf(" %ld  ", i+1);
     }
     else
     {
       printf(" %ld ", i+1);
     }


     for(j=0; j<taille; j++)
     {
       plat[i][j]='.';
       plat[milieu-1][milieu-1]='O';
       plat[milieu][milieu-1]='X';
       plat[milieu][milieu]='O';
       plat[milieu-1][milieu]='X';
       printf(" %c ", plat[i][j]);

     }
     printf("\n");
  }

/*******************************Fin de l'initialisation************************/


  cpt = 0 ;
  choix=1;

  do
  {
    choix=choix+1;
    choix=choix%2;
    switch(choix)
    {
      case 0 : adv='O';               /*Pour le joueur X l'adversaire a les poins O*/
               mien= 'X';
               break;

      case 1 : adv='X';               /*Pour le joueur O l'adversaire a les poins X*/
               mien= 'O';
               break;
      default : adv='.';
                mien='.';
    }
    printf("\n\n");
    printf("Joueur : %c, a vous de jouer : \n\n",mien);

    do
    {
      printf("entrer les coordonnées de votre points :\n ligne : ");
      fflush(stdin);
      scanf("%ld",&ligne);
      printf(" colonne : ");
      fflush(stdin);
      scanf("%ld",&colonne);
     }
     while(ligne>taille || ligne<0 || colonne>taille || colonne<0 );

    col = colonne ;
    lig=ligne ;

//case a gauche

   if (plat[lig-1][col-2]==adv)
    {
      do
      {
        col=col-1;
        if(plat[lig-1][col-2]==mien)
        {
          colonne = colonne - 1 ;                    /*le tableau commence à 0 */
          ligne= ligne- 1;
          plat[ligne][colonne]=mien;

          for(i=0; i<taille; i++)          /*boucle pour l'affichage du tableau avec son milieu*/
          {
            for(j=0; j<taille; j++)
            {
               printf(" %c ", plat[i][j]);

            }
            printf("\n");
          }
        }
      }
      while ( plat[lig-1][col-2]==adv || plat[lig-1][col-2]==mien);
    }

    cpt = cpt + 1;
    printf("\n\n");


  }
  while(cpt<taille*taille-4);                        /*condition de fin de jeu*/

  system("pause");
  return 0;
}


si quelqu'un peut maider je lui en serait reconnaissant
-Vlado-

1 2

Cette discussion est classée dans : programme, int, plateau, réversi, again


Répondre à ce message

Sujets en rapport avec ce message

passage d'arguments à un programme [ par VolaiL ] J'ai réalisé un programme en C qui necessite le passage de 2 arguments lors de l'appel de l'executable.( ex : nom_du_prog arg1 arg2 )Pas de probleme, fichiers [ par oceane67 ] Bonjour tous! je suis en train de faire un programme avec des fichiers, c'est la premiere fois, et mon code plante, je ne sais pas si ce que j'ais fai fichiers [ par oceane67 ] Bonjour tous!je suis en train de faire un programme avec des fichiers, c'est la premiere fois, et mon code plante, je ne sais pas si ce que j'ais fais Expliquation sur 1 mini programme? [ par bastaroner ] Bonjour, je suis 1 bille en langage C, et il me faut expliquer ds les moindres details ce que fait le petit programme suivant:#include main(){       i je ne comprends pas mon code n'affiche pas ma grille...de morpion [ par nicoworld ] Voilà ben le .exe m'affiche pas ma grille cje ne comprends pas!!!!si quelqu'un peut me dire pourquoi????voilà le code://MORPION 10*10 :#include int ve deplacer la Camera [ par gazzall ] Bonjour a tous,J'ai un programme a réaliser où je dois programmer un programme qui represente un petit systeme solaire(avec les planet qui tourne). L Convertir une string en int [ par tapeng ] Bonjour :) je suis absolument débutante en programmation quelle qu'elle soit, mais j'ai décidé récemment de me mettre au c++... mon copain, qui déve Mon programme quitte tout seul [ par darkwhite ] Salut j'ai le code suivant tout con ;#include #include int main(int argc, char *argv[]){  int a,b;  printf("1er nombre:");  scanf("%d",&a);  printf("2 Problème de compilation avec un programme simple utilisant la SDL [ par Alpacha ] je suis en train d'écrire un programme utilisant la SDL, un truc tout bête parce que je suis en train d'apprendre la SDLvoici le programme : #include Probleme dans mon programme password [ par Jarod1980 ] Salut tout le monde,Voilà j'ai un problème dans mon programme de password. Je m'explique: J'ai développé en premier lieu un programme où l'utilisateur


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,076 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales