noob need help

noob need help - C - Programmation

Marsh Posté le 22-01-2014 à 18:18:26    

Bonjour,
 
Je suis nouveau dans le domaine donc pardonné mon ignorance.
J’essaye de faire un jeux sur la console a partir de code blocks.
Le joueur doit entrer un chiffre pour les lignes et une lettre pour les colonnes.
En faite je voudrait que la lettre que le joueur va rentrer se convertisse en numéro afin de trouver le numéro de la colonne.
 
int jouer_blanc()
{
    int l,co;
    char* tab[8][8], colonne;
    printf("\n\nSaisir le numero de la ligne ou vous voulez jouer :" );
    scanf("%d", l);
    printf("\nSaisir la lettre de la colonne ou vous voulez jouer :" );
    scanf("%c", *colonne);
     switch(*colonne){
    case 'a' : co = 0;
    case 'b' : co = 1;
    case 'c' : co = 2;
    case 'd' : co = 3;
    case 'e' : co = 4;
    case 'f' : co = 5;
    case 'g' : co = 6;
    case 'h' : co = 7;
    default : printf("Il n'y a pas de %c sur se plateau", colonne);}
 
    tab[l][co] = 'B';
 
}
 
Apres avoir rentrer la première valeur le programme cesse de fonctionner.
la commande switch peut être utilisé avec un char?
 
j'ai essayé avec :
 
if(colonne == 'a')
            co = 0;
            if else(colonne == 'b')
                co = 1;
                if else(colonne == 'c')
                    co = 2;
                    if else(colonne == 'd')
                        co = 3;
                        if else(colonne == 'e')
                            co = 4;
                            if else(colonne == 'f')
                                co = 5;
                                if else(colonne == 'g')
                                    co = 6;
                                    if else(colonne == 'h')
                                        co = 7;  
 
Mais c'est encore pire ^^

Reply

Marsh Posté le 22-01-2014 à 18:18:26   

Reply

Marsh Posté le 22-01-2014 à 19:37:21    

Mouaif, pas mal d'erreurs effectivement. Déjà, je te conseille vivement d'activer tous les avertissements du compilateur, ça t'aurais averti de quelques problèmes. Avec Code::Blocks tu vas dans Settings => Compiler and debugger => Global Compiler Settings => Compiler flags => Enable all compiler Warnings (-Wall). Genre avec ton programme, ça donne :
 

Code :
  1. main.c: In function 'jouer_blanc':
  2. main.c:5: warning: implicit declaration of function 'printf'
  3. main.c:5: warning: incompatible implicit declaration of built-in function 'printf'
  4. main.c:6: warning: implicit declaration of function 'scanf'
  5. main.c:6: warning: incompatible implicit declaration of built-in function 'scanf'


 
Ça, c'est parce que t'as oublié d'inclure stdio.h. Avec, ça donne:
 

Code :
  1. main.c: In function 'jouer_blanc':
  2. main.c:8: warning: format '%d' expects type 'int *', but argument 2 has type 'int'
  3. main.c:10: error: invalid type argument of unary '*' (have 'int')
  4. main.c:11: error: invalid type argument of unary '*' (have 'int')
  5. main.c:22: warning: assignment makes pointer from integer without a cast
  6. main.c:24: warning: control reaches end of non-void function


 
Donc :

  • Ligne 8 : scanf demande une adresse, tu lui donne une valeur. Si tu ne sais pas la différence, bah, va falloir revoir tes cours.
  • Ligne 10: *colonne ne veut rien dire, parce colonne est de type char (l'étoile que tu as rajouté à la déclaration ne s'applique que sur "tab" ). Aussi un autre problème plus subtile avec cette ligne, c'est que tu utilises le format "%c" avec scanf, qui va récupérer n'importe quel caractère de l'entrée standard.... ce qui inclu les sauts de ligne .... de ta saisie précédente. Ça veut dire que ton second sscanf va sortir immédiatement sans jamais rien demander à l'utilisateur. Faudra faire une boucle pour éjecter les caractères indésirables.
  • Ligne 11: même chose que 10. colonne n'est pas un pointeur, donc l'étoile est inutile.
  • Ton switch peut se résumer à : co = colonne - 'a'; (dans la mesure où tu devras faire une boucle pour filtrer les caractères invalides).
  • Ligne 24: ton assignation montre que tu t'attends à un tableau de caractère. Tu as déclaré un tableau de pointeur à la ligne 6. À mon avis, l'étoile de ta ligne 6 est fausse, elle n'a pas lieu d'être là.


Code :
  1. #include <stdio.h>
  2.  
  3. int jouer_blanc()
  4. {
  5.    int l,co;
  6.    char* tab[8][8], colonne;
  7.    printf("\n\nSaisir le numero de la ligne ou vous voulez jouer :" );
  8.    scanf("%d", l);
  9.    printf("\nSaisir la lettre de la colonne ou vous voulez jouer :" );
  10.    scanf("%c", *colonne);
  11.     switch(*colonne){
  12.    case 'a' : co = 0;
  13.    case 'b' : co = 1;
  14.    case 'c' : co = 2;
  15.    case 'd' : co = 3;
  16.    case 'e' : co = 4;
  17.    case 'f' : co = 5;
  18.    case 'g' : co = 6;
  19.    case 'h' : co = 7;
  20.    default : printf("Il n'y a pas de %c sur se plateau", colonne);}
  21.  
  22.    tab[l][co] = 'B';
  23. }
  24. int main(int nb, char * argv[])
  25. {
  26.     jouer_blanc();
  27.     return 0;
  28. }


Message édité par tpierron le 22-01-2014 à 19:40:13
Reply

Marsh Posté le 23-01-2014 à 12:56:52    

Merci beaucoup pour cette aide ça ma bien fais avancer.
 
Je me permet de poser une autre question :
 
j'ai deja un tableau dans mon main et je voudrais que tab[l][co] = 'B'; change la valeur du tableau de mon main.
 Je sais qu'il faut utilise les pointeurs je crois savoir se qu'est un pointeur mais je ne sais pas commen les utiliser....

Reply

Marsh Posté le 23-01-2014 à 19:46:51    

neounit a écrit :

Je me permets de poser une autre question :
 
j'ai deja un tableau dans mon main et je voudrais que tab[l][co] = 'B'; change la valeur du tableau de mon main.


 
Bonjour
 

Code :
  1. void modif(char x[5][5])
  2. {
  3.     x[0][0]='B';
  4. }
  5. int main()
  6. {
  7.     char tab[5][5];
  8.     modif(tab);
  9. }


 

neounit a écrit :

Je sais qu'il faut utilise les pointeurs je crois savoir se qu'est un pointeur mais je ne sais pas commen les utiliser....


Donc conclusion tu ne sait pas ce qu'est un pointeur. Ben tu vois, t'as de la chance parce que quand il s'agit de tableaux, le nom brut du tableau (sans ses indices) est en fait l'adresse de son premier élément. Donc quand il s'agit d'un tableau, tout comme M. Jourdain faisait de la prose sans le savoir, tu utilises alors déjà les pointeur sans le savoir.
Et donc quand je passe "tab" à la fonction "modif", je lui passe une adresse qu'elle va stocker dans son paramètre "x" qui, lui, est un pointeur.


Message édité par Sve@r le 23-01-2014 à 19:49:26

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 29-01-2014 à 18:51:22    

Merci pour ta réponse.
 
J'ai avancé mais j'ai un autre problème, et cette fois je crois bien les pointeurs soient mon seul échappatoire.
 
Dans cette fonction :  
 
int orrganisation3(int x, int y, int plateau[8][8], int a, int b, int fin1,int fin2)
{
    int i,j;
 
       if(plateau[a+x][b+y] == 2){
                for(i=0;i<8;i++){
                        for(j=0;j<8;i++){
                        if(plateau[a+x+i][b+y+j] == 1){
                                fin1=a+x+i;
                                fin2=a+x+i;
                                return 1;}
                        else if(plateau[a+x+i][b+y+j] == 0){
                                return 0;
 
                    }
                }
            }
       }
 
 
}
 
Je voudrais pointer sur les valeurs de fin1 et fin2 dans :
 
int direction(int plateau[8][8], int a, int b)
{
    int x,y;
    if(oganisation3( x, y, plateau, a, b, fin1, fin2) == 1){
        if(a<fin1){
            for(x=a;x<=fin1;x++){
                for(y=b;y<=fin2;b++){
                        plateau[a][b] = 1;
 
                        }
 
 ..............
 
C'est possible avec les pointeurs non?

Reply

Marsh Posté le 29-01-2014 à 19:51:11    

neounit a écrit :

J'ai avancé mais j'ai un autre problème, et cette fois je crois bien les pointeurs soient mon seul échappatoire.


Je n'ai pas dit que tu ne devais pas les utiliser, j'ai dit que dans certains cas tu les utilisais déjà sans t'en rendre compte...
 

neounit a écrit :

Dans cette fonction :  
 
int orrganisation3(int x, int y, int plateau[8][8], int a, int b, int fin1,int fin2)
{
    int i,j;
 
       if(plateau[a+x][b+y] == 2){
                for(i=0;i<8;i++){
                        for(j=0;j<8;i++){
                        if(plateau[a+x+i][b+y+j] == 1){
                                fin1=a+x+i;
                                fin2=a+x+i;
                                return 1;}
                        else if(plateau[a+x+i][b+y+j] == 0){
                                return 0;
 
                    }
                }
            }
       }
 
 
}
 
Je voudrais pointer sur les valeurs de fin1 et fin2 dans :
 
int direction(int plateau[8][8], int a, int b)
{
    int x,y;
    if(oganisation3( x, y, plateau, a, b, fin1, fin2) == 1){
        if(a<fin1){
            for(x=a;x<=fin1;x++){
                for(y=b;y<=fin2;b++){
                        plateau[a][b] = 1;
 
                        }
 
 ..............
 
C'est possible avec les pointeurs non?


 
Exact. Si une fonction fille doit modifier des variables situées dans une fonction mère, alors cela ne peut se faire que par pointeur.
Il faut que la fonction mère passe l'adresse de la variable à la fonction fille ; et la fonction fille stocke cette adresse dans un pointeur. Ainsi, ayant l'adresse de la variable, la fonction fille peut taper dasn cette adresse (la même pour tout le programme) et changer ce qui s'y trouve ; ce qui se répercute automatiquement dans la variable en question
 
Exemple
 

Code :
  1. void mere()
  2. {
  3.     int variable=10;
  4.     printf("valeur avant modif: %d\n", variable);
  5.     modif(&variable);     // Note bien le "&" qui montre que tu transmets l'adresse à la fonction modif()
  6.     printf("valeur après modif: %d\n", variable);
  7. }
  8. void modif(int *pt)         // Note bien le "*" qui montre que pt est une variable destinée à stocker l'adresse d'un int
  9. {
  10.     printf("j'ai reçu l'adresse %p où se trouve la valeur %d\n", pt, *pt);
  11.     (*pt)=(*pt) * 2;
  12.     printf("maintenant la case d'adresse %p contient la valeur %d\n", pt, *pt);
  13. }


Message édité par Sve@r le 29-01-2014 à 19:53:54

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 30-01-2014 à 17:32:45    

En fait j'ai un "Othello" a faire dans la console pour les regles http://www.ffothello.org/jeu/regles.php  
 
J'ai applique les conseil, j'ai mon programme mais je n’arrive pas a le faire fonctionner !!!
 
je me permet, encore, de vous demander conseil.
 
voila mon main.c
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <strings.h>
  4. #include "othello.h"
  5. int main()
  6. {
  7.     int totalPions = 0;
  8.     struct Partie start;
  9.     initialise(start.plateau);
  10.     do{
  11.     affiche_plateau(start.plateau);
  12.     affiche_nombre_pions(start.plateau);
  13.     jouer_blanc(start.plateau);
  14.     totalPions = affiche_nombre_pions(start.plateau);
  15.     system("CLS" );
  16.     if(totalPions == 42)
  17.     {
  18.         break;
  19.     }
  20.     }while(1);
  21.     return 0;
  22. }


 
mon othello.c
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <strings.h>
  4. #include "othello.h"
  5. int affiche_nombre_pions(int plateau[8][8])
  6. {
  7.     int i,j,n=0,b=0;
  8.     for(i=0;i<8;i++)
  9.         for(j=0;j<8;j++)
  10.         {
  11.         if(plateau[i][j] == 1)
  12.             n++;
  13.         else if(plateau[i][j] == 2)
  14.             b++;
  15.         }
  16.     printf("\n\n\n\tNombre de pions noirs : %d\n\tNombre de pions blanc : %d", n,b);
  17.     return n+b;
  18. }
  19. int jouer_blanc(int plateau[8][8])
  20. {
  21.     int l,a,b;
  22.     char colonne;
  23.     printf("\nSaisir la lettre de la colonne ou vous voulez jouer :" );
  24.     scanf("%s", &colonne);
  25.     switch(colonne){
  26.         case 'a' : a = 0;
  27.         break;
  28.         case 'b' : a = 1;
  29.         break;
  30.         case 'c' : a = 2;
  31.         break;
  32.         case 'd' : a = 3;
  33.         break;
  34.         case 'e' : a = 4;
  35.         break;
  36.         case 'f' : a = 5;
  37.         break;
  38.         case 'g' : a = 6;
  39.         break;
  40.         case 'h' : a = 7;
  41.         break;
  42.         default : printf("Il n'y a pas de %c sur se plateau", colonne);
  43.         break;
  44.     }
  45.         printf("\n\nSaisir le numero de la ligne ou vous voulez jouer :" );
  46.         scanf("%d", &l);
  47.         switch(l){
  48.         case 1 : b = 0;
  49.         break;
  50.         case 2 : b = 1;
  51.         break;
  52.         case 3 : b = 2;
  53.         break;
  54.         case 4 : b = 3;
  55.         break;
  56.         case 5 : b = 4;
  57.         break;
  58.         case 6 : b = 5;
  59.         break;
  60.         case 7 : b = 6;
  61.         break;
  62.         case 8 : b = 7;
  63.         break;
  64.         default : printf("Il n'y a pas de %d sur se plateau", l);
  65.         break;}
  66.         printf("%d et %d", a,b);
  67.    
  68.         if(possible(plateau,a,b ) == 1);{
  69.             jouer_case(plateau,a ,b);}
  70.      }
  71. void initialise(int plateau[8][8])
  72. {
  73.     int x=0,y=0;
  74.     for(x=0;x<8;x++)
  75.     {
  76.         for(y=0;y<8;y++)
  77.             {
  78.                 plateau[x][y] = 0;
  79.             }
  80.     }
  81.     plateau[3][3] = 1;
  82.     plateau[4][3] = 2;
  83.     plateau[3][4] = 2;
  84.     plateau[4][4] = 1;
  85.     }
  86. void affiche_plateau(int plateau[8][8])
  87. {
  88.     int i,j,k,l,m,n;
  89.     int x,y;
  90.     char tab[8][8];
  91.     printf("    a\t    b\t    c\t    d\t    e\t    f\t    g\t    h\n\n" );
  92.     for(l=0;l<8;l++)
  93.     {
  94.         for(i=0;i<(8*4);i++)
  95.             {
  96.                 printf("* " );
  97.             }
  98.             printf("*\n" );
  99.         for(j=0;j<3;j++){
  100.             for(k=0;k<9;k++)
  101.                 {
  102.                     if(j==1 && k!=8 ){
  103.                         printf("*   %c\t", plateau[l][k]);
  104.                     }
  105.                     else
  106.                         printf("*\t" );
  107.                     if(j==1 && k==8){
  108.                         printf("%d", l+1);
  109.                     }
  110.                  }
  111.              printf("\n" );
  112.             }
  113. }
  114.     for(i=0;i<8;i++)
  115.             {
  116.                 printf("* * * * " );
  117.             }
  118.             printf("*" );
  119.     for(y=0;y<8;y++)
  120.     {
  121.         for(x=0;x<8;x++)
  122.             {
  123.     if(plateau[x][y] == 2){
  124.         tab[x][y] = 'B'; }
  125.     if(plateau[x][y] == 0){
  126.         tab[x][y] = ' '; }
  127.     if(plateau[x][y] == 1){
  128.         tab[x][y] = 'N'; }
  129.             }
  130.     }
  131. }
  132. int coup_possible_direction(int x, int y, int plateau[8][8], int a, int b, int *fin1,int *fin2)
  133. {
  134.     int i,j;
  135.        if(plateau[a+x][b+y] == 2){
  136.             printf("%d", a+x);
  137.                 for(i=0;i<8;i++){
  138.                         for(j=0;j<8;i++){
  139.                         if(plateau[a+x+i][b+y+j] == 1){
  140.                                 (*fin1)=a+x+i;
  141.                                 (*fin2)=b+y+j;
  142.                                 return 1;}
  143.                         else if(plateau[a+x+i][b+y+j] == 0){
  144.                                 return 0;
  145.                     }
  146.                 }
  147.             }
  148.        }
  149. }
  150. int coup_possible(int plateau[8][8], int a, int b)
  151. {
  152.     int x,y,fin1=0,fin2=0;
  153.     for(x=-1;x<2;x++){
  154.             for(y=-1;y<2;y++){
  155.             if(coup_possible_direction(x, y, plateau, a, b, &fin1, &fin2) == 1){
  156.                     return 1;
  157.                 }
  158.                 else if(coup_possible_direction(x, y, plateau, a, b, &fin1, &fin2) == 0){
  159.                     return 0;}
  160.             }
  161.     }
  162. }
  163. int possible(int plateau[8][8], int a, int b)
  164. {
  165.     int x,y;
  166.     for(x=0;x<8;x++){
  167.             for(y=0;y<8;y++){
  168.                 if(coup_possible(plateau, a, b) == 1){
  169.                     return 1;
  170.                 }
  171.                 else if(coup_possible(plateau, a, b) == 0){
  172.                     return 0;
  173.                 }
  174.             }
  175.     }
  176. }
  177. int jouer_case_direction(int plateau[8][8], int a, int b)
  178. {
  179.     int x,y,fin1,fin2;
  180.     if(coup_possible_direction( x, y, plateau, a, b, &fin1, &fin2) == 1){
  181.     if(a>fin1 && b==fin2){
  182.         for(x=a;x<=fin1;x++){
  183.                 y=b;
  184.                         plateau[x][y] = 1;}
  185.                                 }
  186.        if(a<fin1 && b==fin2){
  187.          for(x=a;x>=fin1;x--){
  188.                 y=b;
  189.                         plateau[x][y] = 1;}
  190.                                 }
  191.             if(a==fin1 && b>fin2){
  192.          for(y=b;y<=fin2;y++){
  193.                 x=a;
  194.                         plateau[x][y] = 1;}
  195.                                 }
  196.             if(a==fin1 && b<fin2){
  197.          for(y=b;y>=fin2;y--){
  198.                 y=b;
  199.                         plateau[x][y] = 1;}
  200.                                 }
  201.             if(a>fin1 && b>fin2){
  202.                 for(x=a;x>=fin1;x++){
  203.                 for(y=b;y>=fin2;y++){
  204.                 y=b;
  205.                         plateau[x][y] = 1;}
  206.                                     }
  207.                                 }
  208.                              if(a>fin1 && b>fin2){
  209.                 for(x=a;x>=fin1;x++){
  210.                 for(y=b;y>=fin2;y++){
  211.                 y=b;
  212.                         plateau[x][y] = 1;}
  213.                                     }
  214.                                 }
  215.     }
  216. }
  217. int jouer_case(int a, int b, int plateau[8][8])
  218. {
  219.     int x,y;
  220.     for(x=-1;x<2;x++){
  221.             for(y=-1;y<2;y++){
  222.         jouer_case_direction(plateau,a, b);}
  223.     }
  224. }


 
et mon othello.h
 

Code :
  1. #ifndef _FONCTIONS_HEADER_
  2. #define _FONCTIONS_HEADER_
  3. void affiche_plateau(int plateau[8][8]);
  4. void initialise(int plateau[8][8]);
  5. int affiche_nombre_pions(int plateau[8][8]);
  6. int jouer_blanc(int plateau[8][8]);
  7. int coup_possible_direction(int x, int y, int plateau[8][8], int a, int b, int *fin1,int *fin2);
  8. int coup_possible(int plateau[8][8], int a, int b);
  9. int possible(int plateau[8][8], int a, int b);
  10. int jouer_case_direction(int plateau[8][8], int a, int b);
  11. int jouer_case(int a, int b, int plateau[8][8]);
  12. struct Partie
  13. {
  14.         int plateau[8][8];
  15.         int joueur;
  16.         int nbPions;
  17. };
  18. #endif


 
J’espère ne pas vous saouler avec mes question...
 
En espérant que quelqu’un m'aide dans mon projet je vous beaucoup déjà pour l'aide !

Reply

Marsh Posté le 30-01-2014 à 19:16:47    


T'as passé ton programme au debugger ?

Reply

Marsh Posté le 30-01-2014 à 20:34:06    

le programme fonctionne mais en faite mais il ne quand je rentre les coordonnées rien ne s'affiche.
Alors que dans le fonction :"int jouer_blanc(int plateau[8][8])" si je remplace :  if(possible(plateau,a,b ) == 1);{
                jouer_case(plateau,a ,b);}
 
par:   plateau[b][a] = 1  
 
la case s'affiche bien
 
 
 
 
 

Reply

Marsh Posté le 30-01-2014 à 20:38:08    


C'est pour ça qu'il faut passer au debugger, c'est obligatoire si tu veux savoir ce qui se passe.
 
Si je dis ça c'est que je l'ai fait et j'ai tout de suite vu où ça clochait.
 
Mais je te laisse trouver toi même.
 
 

Reply

Marsh Posté le 30-01-2014 à 20:38:08   

Reply

Marsh Posté le 31-01-2014 à 17:12:28    

Je me suis renseigner sur l'utilisation du debugger, enlevé tout les warning et réglé quelque problème :
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <strings.h>
  4. #include "othello.h"
  5. int affiche_nombre_pions(int plateau[8][8])
  6. {
  7.     int i,j,n=0,b=0;
  8.     for(i=0;i<8;i++)
  9.         for(j=0;j<8;j++)
  10.         {
  11.         if(plateau[i][j] == 1)
  12.             n++;
  13.         else if(plateau[i][j] == 2)
  14.             b++;
  15.         }
  16.     printf("\n\n\n\tNombre de pions noirs : %d\n\tNombre de pions blanc : %d", n,b);
  17.     return n+b;
  18. }
  19. void jouer_blanc(int plateau[8][8])
  20. {
  21.     int l,a,b;
  22.     char colonne;
  23.     printf("\nSaisir la lettre de la colonne ou vous voulez jouer :" );
  24.     scanf("%s", &colonne);
  25.     switch(colonne){
  26.         case 'a' : a = 0;
  27.         break;
  28.         case 'b' : a = 1;
  29.         break;
  30.         case 'c' : a = 2;
  31.         break;
  32.         case 'd' : a = 3;
  33.         break;
  34.         case 'e' : a = 4;
  35.         break;
  36.         case 'f' : a = 5;
  37.         break;
  38.         case 'g' : a = 6;
  39.         break;
  40.         case 'h' : a = 7;
  41.         break;
  42.         default : printf("Il n'y a pas de %c sur se plateau", colonne);
  43.         break;
  44.     }
  45.         printf("\n\nSaisir le numero de la ligne ou vous voulez jouer :" );
  46.         scanf("%d", &l);
  47.         switch(l){
  48.         case 1 : b = 0;
  49.         break;
  50.         case 2 : b = 1;
  51.         break;
  52.         case 3 : b = 2;
  53.         break;
  54.         case 4 : b = 3;
  55.         break;
  56.         case 5 : b = 4;
  57.         break;
  58.         case 6 : b = 5;
  59.         break;
  60.         case 7 : b = 6;
  61.         break;
  62.         case 8 : b = 7;
  63.         break;
  64.         default : printf("Il n'y a pas de %d sur se plateau", l);
  65.         break;}
  66.         printf("%d et %d", a,b);
  67.         if(coup_possible(plateau,b,a) == 1){
  68.             jouer_case(b,a, plateau);}
  69.             }
  70. void initialise(int plateau[8][8])
  71. {
  72.     int x=0,y=0;
  73.     for(x=0;x<8;x++)
  74.     {
  75.         for(y=0;y<8;y++)
  76.             {
  77.                 plateau[x][y] = 0;
  78.             }
  79.     }
  80.     plateau[3][3] = 1;
  81.     plateau[4][3] = 2;
  82.     plateau[3][4] = 2;
  83.     plateau[4][4] = 1;
  84.     }
  85. void affiche_plateau(int plateau[8][8])
  86. {
  87.     int i,j,k,l;
  88.     printf("    a\t    b\t    c\t    d\t    e\t    f\t    g\t    h\n\n" );
  89.     for(l=0;l<8;l++)
  90.     {
  91.         for(i=0;i<(8*4);i++)
  92.             {
  93.                 printf("* " );
  94.             }
  95.             printf("*\n" );
  96.         for(j=0;j<3;j++){
  97.             for(k=0;k<9;k++)
  98.                 {
  99.                     if(j==1 && k!=8 ){
  100.                         printf("*   %c\t", plateau[l][k]);
  101.                     }
  102.                     else
  103.                         printf("*\t" );
  104.                     if(j==1 && k==8){
  105.                         printf("%d", l+1);
  106.                     }
  107.                  }
  108.              printf("\n" );
  109.             }
  110. }
  111.     for(i=0;i<8;i++)
  112.             {
  113.                 printf("* * * * " );
  114.             }
  115.             printf("*" );
  116. }
  117. int coup_possible_direction(int x, int y, int plateau[8][8], int a, int b, int *fin1,int *fin2)
  118. {
  119.     int i,j;
  120.        if(plateau[a+x][b+y] == 2){
  121.             if(a+x<a && b==0){
  122.                 for(i=0;i<-8;i--){
  123.                         while(plateau[a+x+i][b+y] == 2){
  124.                         if(plateau[a+x+i][b+y] == 1){
  125.                                 (*fin1)=a+x+i;
  126.                                 (*fin2)=b+y;
  127.                                 return 1;}}}}
  128.             if(a+x>a && b==0){
  129.                 for(i=0;i<8;i++){
  130.                         while(plateau[a+x+i][b+y] == 2){
  131.                         if(plateau[a+x+i][b+y] == 1){
  132.                                 (*fin1)=a+x+i;
  133.                                 (*fin2)=b+y;
  134.                                 return 1;}}}}
  135.             if(a==0 && b+y>y){
  136.                 for(i=0;i<8;i++){
  137.                         while(plateau[a+x][b+y+i] == 2){
  138.                         if(plateau[a+x][b+y+i] == 1){
  139.                                 (*fin1)=a+x;
  140.                                 (*fin2)=b+y+i;
  141.                                 return 1;}}}}
  142.             if(a==0 && b+y<y){
  143.                 for(i=0;i<-8;i--){
  144.                         while(plateau[a+x][b+y+i] == 2){
  145.                         if(plateau[a+x][b+y+i] == 1){
  146.                                 (*fin1)=a+x;
  147.                                 (*fin2)=b+y+i;
  148.                                 return 1;}}}}
  149.             if(a+x>a && b+y>y){
  150.                 for(i=0;i<8;i++){
  151.                         for(j=0;j<8;i++){
  152.                             while(plateau[a+x+i][b+y+j] == 2){
  153.                         if(plateau[a+x+i][b+y+j] == 1){
  154.                                 (*fin1)=a+x+i;
  155.                                 (*fin2)=b+y+j;
  156.                                 return 1;}}}}}
  157.             if(a+x<a && b+y<y){
  158.                 for(i=0;i<-8;i--){
  159.                         for(j=0;j<-8;j--){
  160.                             while(plateau[a+x+i][b+y+j] == 2){
  161.                         if(plateau[a+x+i][b+y+j] == 1){
  162.                                 (*fin1)=a+x+i;
  163.                                 (*fin2)=b+y+j;
  164.                                 return 1;}}}}}
  165.             if(a+x<a && b+y>y){
  166.                 for(i=0;i<-8;i--){
  167.                         for(j=0;j<8;j++){
  168.                             while(plateau[a+x+i][b+y+j] == 2){
  169.                         if(plateau[a+x+i][b+y+j] == 1){
  170.                                 (*fin1)=a+x+i;
  171.                                 (*fin2)=b+y+j;
  172.                                 return 1;}}}}}
  173.             if(a+x>a && b+y<y){
  174.                 for(i=0;i<8;i++){
  175.                         for(j=0;j<-8;j--){
  176.                             while(plateau[a+x+i][b+y+j] == 2){
  177.                         if(plateau[a+x+i][b+y+j] == 1){
  178.                                 (*fin1)=a+x+i;
  179.                                 (*fin2)=b+y+j;
  180.                                 return 1;}}}}}
  181.        }return 0;
  182. }
  183. int coup_possible(int plateau[8][8], int a, int b)
  184. {
  185.     int x,y,fin1=0,fin2=0;
  186.     for(x=-1;x<2;x++){
  187.             for(y=-1;y<2;y++){
  188.             if(coup_possible_direction(x, y, plateau, a, b, &fin1, &fin2) == 1){
  189.                     return 1;
  190.                 }
  191.             }
  192.     }return 0;
  193. }
  194. int possible(int plateau[8][8])
  195. {
  196.     int x,y;
  197.     for(x=0;x<8;x++){
  198.             for(y=0;y<8;y++){
  199.                 if(coup_possible(plateau, x, y) == 1){
  200.                     return 1;
  201.                                 }
  202.                             }
  203.                         }
  204.                         return 0;
  205. }
  206. void jouer_case_direction(int plateau[8][8], int a, int b, int x, int y)
  207. {
  208.     int fin1,fin2;
  209.     if(coup_possible_direction( x, y, plateau, a, b, &fin1, &fin2) == 1){
  210.     if(a>fin1 && b==fin2){
  211.         for(x=a;x<=fin1;x++){
  212.                 y=b;
  213.                         plateau[y][x] = 1;}
  214.                                 }
  215.        if(a<fin1 && b==fin2){
  216.          for(x=a;x>=fin1;x--){
  217.                 y=b;
  218.                         plateau[y][x] = 1;}
  219.                                 }
  220.             if(a==fin1 && b>fin2){
  221.          for(y=b;y<=fin2;y++){
  222.                 x=a;
  223.                         plateau[y][x] = 1;}
  224.                                 }
  225.             if(a==fin1 && b<fin2){
  226.          for(y=b;y>=fin2;y--){
  227.                 y=b;
  228.                         plateau[y][x] = 1;}
  229.                                 }
  230.             if(a>fin1 && b>fin2){
  231.                 for(x=a;x>=fin1;x++){
  232.                 for(y=b;y>=fin2;y++){
  233.                 y=b;
  234.                         plateau[y][x] = 1;}
  235.                                     }
  236.                                 }
  237.                              if(a>fin1 && b>fin2){
  238.                 for(x=a;x>=fin1;x++){
  239.                 for(y=b;y>=fin2;y++){
  240.                 y=b;
  241.                         plateau[y][x] = 1;}
  242.                                     }
  243.                                 }
  244.     }
  245. }
  246. void jouer_case(int a, int b, int plateau[8][8])
  247. {
  248.     int x,y;
  249.     for(x=-1;x<2;x++){
  250.             for(y=-1;y<2;y++){
  251.         jouer_case_direction(plateau,a,b,x,y);}
  252.     }
  253. }


 
 
 
Mais toujours rien de s'affiche sur mon plateau...

Reply

Marsh Posté le 31-01-2014 à 18:17:24    

neounit a écrit :

Je me suis renseigner sur l'utilisation du debugger, enlevé tout les warning et réglé quelque problème :


 
C'est bien, mais tu l'as utilisé au moins ?
 
Car c'est pas tout de juste se renseigner, il faut aussi s'en servir.
 
edit : je vois que tu as corrigé le bug que j'avais repéré hier, continue


Message édité par Totoche17 le 31-01-2014 à 18:23:01
Reply

Marsh Posté le 31-01-2014 à 21:14:53    

hello
juste un petit conseil, une simplification en faite.
pour convertir les lignes 1,2,3,4 ... 8 et les colonnes abcd...h en numéro de lignes et colonne tu peux utiliser le code ASCII du caractère.
le caractère a minuscule vaut 65 le b=66 c=67 etc donc ton numéro de colonne vaut colonne - 65:
par ex:

 

printf("\nSaisir la lettre de la colonne ou vous voulez jouer :" );
    scanf("%s", &colonne);
if (colonne[1] == '\0' && colonne[0] >= 'a' && colonne[0] <= 'h') {
   a=colonne[0] - 65;
}
else {
 /* ici un petit message d'erreur genre saisie incorrecte */
}

 

voilou
@+


Message édité par m3z le 04-02-2014 à 14:03:24
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed