Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
900 connectés 

  FORUM HardWare.fr
  Programmation
  C

  noob need help

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

noob need help

n°2217102
neounit
Posté le 22-01-2014 à 18:18:26  profilanswer
 

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 ^^

mood
Publicité
Posté le 22-01-2014 à 18:18:26  profilanswer
 

n°2217120
tpierron
Posté le 22-01-2014 à 19:37:21  profilanswer
 

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
n°2217193
neounit
Posté le 23-01-2014 à 12:56:52  profilanswer
 

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....

n°2217346
Sve@r
Posté le 23-01-2014 à 19:46:51  profilanswer
 

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.
n°2218051
neounit
Posté le 29-01-2014 à 18:51:22  profilanswer
 

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?

n°2218059
Sve@r
Posté le 29-01-2014 à 19:51:11  profilanswer
 

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.
n°2218173
neounit
Posté le 30-01-2014 à 17:32:45  profilanswer
 

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 !

n°2218180
Totoche17
Posté le 30-01-2014 à 19:16:47  profilanswer
 


T'as passé ton programme au debugger ?

n°2218184
neounit
Posté le 30-01-2014 à 20:34:06  profilanswer
 

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
 
 
 
 
 

n°2218185
Totoche17
Posté le 30-01-2014 à 20:38:08  profilanswer
 


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.
 
 

mood
Publicité
Posté le 30-01-2014 à 20:38:08  profilanswer
 

n°2218272
neounit
Posté le 31-01-2014 à 17:12:28  profilanswer
 

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...

n°2218277
Totoche17
Posté le 31-01-2014 à 18:17:24  profilanswer
 

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
n°2218284
m3z
il faut toujours faire simple
Posté le 31-01-2014 à 21:14:53  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  noob need help

 

Sujets relatifs
Programme répertoire téléphonique (BUG) HELP PLEASE !!!Question de Noob "Slideshow"
Help Problème VBA: Seriescollection.nameprojet excel non finalisé car limites de competences HELP HELP
Novice en langage C ! HELP!Help [PHP/MySQL] et programmation de jeu
[Noob] Appeler une méthode[Noob] Quel outil ou méthode de programmation pour ce projet ???
need help php/mysql <= noob insideNoob en batch need help - Size & date check needed
Plus de sujets relatifs à : noob need help


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR