Changeset ,27

Show
Ignore:
Timestamp:
05/23/08 08:21:08 (8 months ago)
Author:
Florian Birée <florian@…>
branch-nick:
code
Message:

Correction de bugs dans le placement des bateaux

Files:
6 modified

Legend:

Unmodified
Added
Removed
  • Makefile

    r1 r27  
    11CC=gcc 
    2 CFLAGS=-W -Wall -ansi -pedantic 
     2CFLAGS=-W -Wall -ansi -pedantic -g 
    33LDFLAGS= 
    44EXEC=batnav 
    5 OBJ=src/tableau.o src/sudoku.o src/main.o 
     5OBJ=src/ocean/ocean.o src/ia/ia.o src/texte/texte.o 
    66 
    77util: $(OBJ) 
    88        $(CC) $(OBJ) -o $(EXEC) 
    99 
    10 src/tableau.o: src/tableau.c 
    11 src/sudoku.o: src/sudoku.c 
    12 src/main.o: src/main.c 
     10src/ocean/ocean.o: src/ocean/ocean.h 
     11src/ia/ia.o: src/ia/ia.h src/ocean/ocean.c 
     12src/texte/texte.o: src/texte/texte.h src/ia/ia.c src/ocean/ocean.c 
    1313 
    1414install: 
    1515        cp $(EXEC) /usr/bin/ 
    1616        cp man/batnav.1.gz /usr/share/man/man1 
    17         mkdir -p /usr/share/doc/sudoku 
     17        mkdir -p /usr/share/doc/batnav 
    1818        cp AUTHORS CHANGELOG COPYING INSTALL README /usr/share/doc/batnav 
    1919 
  • src/ia/ia.c

    r26 r27  
    66 * Raison de la derniÚre modification : ajout de ia_jouer 
    77 */ 
     8 
     9#include <stdio.h> 
    810 
    911#include <stdlib.h> 
     
    204206        int decalage; 
    205207        bool tir_trouve = false; 
     208        printf("%s - mode difficile\n", joueur->nickname); 
    206209        /* Recherche de la case où effectuer le tir */ 
    207210        do 
     
    335338                        ia_decalage_x(x, -1, contexte->orientation), 
    336339                        ia_decalage_y(y, -1, contexte->orientation), 
    337                         TOUCHE)) 
     340                        INCONNUE)) 
    338341            { 
    339342                /* La choisir */ 
     
    347350                        ia_decalage_x(x, 1, contexte->orientation), 
    348351                        ia_decalage_y(y, 1, contexte->orientation), 
    349                         TOUCHE)) 
     352                        INCONNUE)) 
    350353            { 
    351354                /* La choisir */ 
     
    357360            else 
    358361            { 
     362                printf("%s - changement d'orientation de recherche.\n", 
     363                        joueur->nickname); 
    359364                /* Changer d'orientation */ 
    360                 contexte->orientation = ! contexte-> orientation; 
     365                contexte->orientation = ! (contexte-> orientation); 
    361366                /* Recommencer */ 
    362367            } 
     
    372377            contexte->bateau_trouve = false; 
    373378        } 
    374         /* Sinon : */ 
    375         else 
     379        /* Sinon, si la case est touchée : */ 
     380        else if (ocean_statut_ennemi(*plateau, *joueur, tir_x, tir_y) == TOUCHE) 
    376381        { 
    377382            /* mettre bateau_x et bateau_y à la position du tir */ 
  • src/ocean/ocean.c

    r26 r27  
    66 * Raison de la derniÚre modification : ajout des fonctions de statut 
    77 */ 
     8 
     9#include <stdio.h> 
    810 
    911#include <stdlib.h> 
     
    116118     
    117119    /* Si le bateau sur toute sa longueur ne sort pas de la grille : */ 
    118     if (((orientation == VERTICAL) && (y + categorie >= TAILLE_GRILLE)) || 
    119         ((orientation == HORIZONTAL) && (x + categorie >= TAILLE_GRILLE))) 
     120    if (((orientation == VERTICAL) && (y + categorie > TAILLE_GRILLE)) || 
     121        ((orientation == HORIZONTAL) && (x + categorie > TAILLE_GRILLE))) 
    120122    { 
    121123        return false; 
     
    137139        for(i=y; i<y+categorie; i++) 
    138140        { 
    139             if (!ocean_case_est_libre(*plateau, joueur, i, y)) 
     141            if (!ocean_case_est_libre(*plateau, joueur, x, i)) 
    140142            { 
    141143                return false; 
     
    147149    ocean_initialiser_bateau (&bateau); 
    148150    bateau->categorie = categorie; 
     151    bateau->orientation = orientation; 
    149152    /* L'ajouter à la liste des bateaux */ 
    150153    plateau->liste_bateaux[joueur.id][plateau->nombre_bateaux[joueur.id]] = \ 
     
    232235    ocean_T_Bateau* bateau; 
    233236     
    234     for (i=x-1; i<=x+1; i++) 
    235     { 
    236         for (j=y-1; j<=y+1; j++) 
     237    for (i=x-1; i<x+2; i++) 
     238    { 
     239        for (j=y-1; j<y+2; j++) 
    237240        { 
    238241            /*si la case est dans le plateau*/ 
    239             if ((i<TAILLE_GRILLE) && (j<TAILLE_GRILLE) && (i>0) && (j>0)) 
     242            if ((i<TAILLE_GRILLE) && (j<TAILLE_GRILLE) && (i>=0) && (j>=0)) 
    240243            { 
    241244                /*on verifie qu'elle est libre*/ 
  • src/ocean/test.c

    r26 r27  
    7676    /* Test d'une case non libre */ 
    7777    ocean_initialiser_bateau(&bateau); 
    78     plateau.grille[0][5][5].bateau = bateau; 
    79     CU_ASSERT(ocean_case_est_libre(plateau, joueur0, 5, 5) == false); 
     78    bateau->categorie = PORTE_AVION; 
     79    bateau->orientation = HORIZONTAL; 
     80    (plateau.grille[0][0][0]).bateau = bateau; 
     81    (plateau.grille[0][1][0]).bateau = bateau; 
     82    (plateau.grille[0][2][0]).bateau = bateau; 
     83    (plateau.grille[0][3][0]).bateau = bateau; 
     84    CU_ASSERT(ocean_case_est_libre(plateau, joueur0, 0, 0) == false); 
    8085    /* Test d'une case avec une voisine non libre */ 
    81     CU_ASSERT(ocean_case_est_libre(plateau, joueur0, 4, 5) == false); 
     86    CU_ASSERT(ocean_case_est_libre(plateau, joueur0, 0, 1) == false); 
     87    /* Test du bug : 
     88     * Destroyer en c3 v 
     89     * Destroyer en d4 v -> devrait être impossible */ 
     90    ocean_initialiser_joueur(&joueur0, 0, "J0", JOUEUR_LOCAL, NULL); 
     91    ocean_initialiser_joueur(&joueur1, 1, "J1", JOUEUR_LOCAL, NULL); 
     92    ocean_initialiser_plateau(&plateau, &joueur0, &joueur1); 
     93    ocean_initialiser_bateau(&bateau); 
     94    bateau->categorie = DESTROYER; 
     95    bateau->orientation = VERTICAL; 
     96    (plateau.grille[0][2][3]).bateau = bateau; 
     97    (plateau.grille[0][2][4]).bateau = bateau; 
     98    (plateau.grille[0][2][5]).bateau = bateau; 
     99    CU_ASSERT(ocean_case_est_libre(plateau, joueur0, 3, 4) == false); 
    82100} 
    83101 
     
    118136                                  PORTE_AVION) == false); 
    119137    /* Test de placer un bateau à un emplacement valide */ 
    120     CU_ASSERT(ocean_placer_bateau(&plateau, joueur0, 1, 1, HORIZONTAL, 
     138    CU_ASSERT(ocean_placer_bateau(&plateau, joueur0, 0, 0, HORIZONTAL, 
    121139                                  PORTE_AVION) == true); 
    122     ocean_statut(plateau, joueur0, 1, 1, &bateau); 
     140    ocean_statut(plateau, joueur0, 0, 0, &bateau); 
    123141    CU_ASSERT(bateau != NULL); 
    124142    CU_ASSERT(bateau->categorie == PORTE_AVION); 
     
    127145                                  CROISEUR) == false); 
    128146    /* Test de placer un bateau à proximité d'un autre */ 
    129     CU_ASSERT(ocean_placer_bateau(&plateau, joueur0, 4, 2, VERTICAL, 
     147    CU_ASSERT(ocean_placer_bateau(&plateau, joueur0, 0, 1, VERTICAL, 
    130148                                  CROISEUR) == false); 
     149    /* Test du bug : 
     150     * Porte-avion en d0 h 
     151     * Destroyer en c3 v 
     152     * Destroyer en d4 v -> devrait être impossible */ 
     153    ocean_initialiser_joueur(&joueur0, 0, "J0", JOUEUR_LOCAL, NULL); 
     154    ocean_initialiser_joueur(&joueur1, 1, "J1", JOUEUR_LOCAL, NULL); 
     155    ocean_initialiser_plateau(&plateau, &joueur0, &joueur1); 
     156    /* Test de placer un bateau hors de la grille */ 
     157    CU_ASSERT(ocean_placer_bateau(&plateau, joueur0, 3, 0, HORIZONTAL, 
     158                                  PORTE_AVION) == true); 
     159    CU_ASSERT(ocean_placer_bateau(&plateau, joueur0, 2, 3, VERTICAL, 
     160                                  DESTROYER) == true); 
     161    CU_ASSERT(ocean_placer_bateau(&plateau, joueur0, 3, 4, VERTICAL, 
     162                                  DESTROYER) == false); 
    131163} 
    132164 
     
    290322    ocean_initialiser_plateau(&plateau, &joueur0, &joueur1); 
    291323    /* Tester le statut d'une case vide non tirée */ 
    292     CU_ASSERT(ocean_statut(plateau, joueur0, 0, 0, &bateau) == INCONNUE); 
     324    CU_ASSERT(ocean_statut(plateau, joueur0, 9, 9, &bateau) == INCONNUE); 
    293325    CU_ASSERT(bateau == NULL); 
    294326    /* Tirer sur une case */ 
    295     ocean_tir(&plateau, &joueur1, 0, 0); 
     327    ocean_tir(&plateau, &joueur1, 9, 9); 
    296328    /* Tester le statut de la case vide tirée */ 
    297     CU_ASSERT(ocean_statut(plateau, joueur0, 0, 0, &bateau) == DANS_LEAU); 
     329    CU_ASSERT(ocean_statut(plateau, joueur0, 9, 9, &bateau) == DANS_LEAU); 
    298330    CU_ASSERT(bateau == NULL); 
    299331    /* Placer un bateau */ 
    300     ocean_placer_bateau(&plateau, joueur0, 1, 1, VERTICAL, DESTROYER); 
     332    ocean_placer_bateau(&plateau, joueur0, 2, 2, VERTICAL, DESTROYER); 
    301333    /* Tester le statut d'une case du bateau*/ 
    302     CU_ASSERT(ocean_statut(plateau, joueur0, 1, 1, &bateau) == INCONNUE); 
     334    CU_ASSERT(ocean_statut(plateau, joueur0, 2, 2, &bateau) == INCONNUE); 
    303335    CU_ASSERT(bateau != NULL); 
    304336    /* Tirer sur le bateau */ 
    305     ocean_tir(&plateau, &joueur1, 1, 1); 
     337    ocean_tir(&plateau, &joueur1, 2, 2); 
    306338    /* Tester le statut d'une case du bateau touchée */ 
    307     CU_ASSERT(ocean_statut(plateau, joueur0, 1, 1, &bateau) == TOUCHE); 
     339    CU_ASSERT(ocean_statut(plateau, joueur0, 2, 2, &bateau) == TOUCHE); 
    308340    CU_ASSERT(bateau != NULL); 
    309341    /* Couler le bateau */ 
    310     ocean_tir(&plateau, &joueur1, 1, 2); 
     342    ocean_tir(&plateau, &joueur1, 2, 3); 
    311343    /* Tester le statut d'une case du bateau coulé */ 
    312     CU_ASSERT(ocean_statut(plateau, joueur0, 1, 2, &bateau) == COULE); 
     344    CU_ASSERT(ocean_statut(plateau, joueur0, 2, 3, &bateau) == COULE); 
     345    /* Test du statut pour un port-avion horizontal en 0,0 */ 
     346    ocean_initialiser_bateau(&bateau); 
     347    bateau->categorie = PORTE_AVION; 
     348    bateau->orientation = HORIZONTAL; 
     349    (plateau.grille[0][0][0]).bateau = bateau; 
     350    (plateau.grille[0][1][0]).bateau = bateau; 
     351    (plateau.grille[0][2][0]).bateau = bateau; 
     352    (plateau.grille[0][3][0]).bateau = bateau; 
     353    CU_ASSERT(ocean_statut(plateau, joueur0, 0, 0, &bateau) == INCONNUE); 
     354    CU_ASSERT(bateau != NULL); 
    313355} 
    314356 
  • src/texte/texte.c

    r24 r27  
    99#include <string.h> 
    1010#include <stdlib.h> 
     11#include <time.h> 
    1112 
    1213#include "../ocean/ocean.h" 
     14#include "../ia/ia.h" 
    1315#include "texte.h" 
    14 #include "../ia/ia.h" 
    15  
    16  
    17  
    18  
    19 /* Nom de la fonction : void texte_initialiser_joueur_local(ocean_T_joueur *joueur) 
     16 
     17/* Nom de la fonction : void texte_initialiser_joueur_local 
    2018 * Initialise le joueur local 
    2119 * ParamÚtre : ocean_T_joueur *joueur 
     
    2422void texte_initialiser_joueur_local(ocean_T_Joueur* joueur) 
    2523{ 
    26         int id=2; 
    27         char nom[NB_MAX_LETTRES_NOM+1]; 
    28         int categorie=JOUEUR_LOCAL; 
    29         printf("Veuillez entrer votre nom :"); 
    30         scanf("%s", nom); 
    31         strcpy(joueur->nickname, nom); 
    32         while (id != 1 || id !=0) 
    33         { 
    34                 printf("Voulez vous jouer en premier? 0 pour oui, 1 pour non\n"); 
    35                 scanf("%1d", &id); 
    36         } 
    37         ocean_initialiser_joueur(joueur, id, nom, categorie, NULL); 
    38 } 
    39  
    40  
    41 /* Nom de la fonction : void texte_remplir_tableau_bataille_navale (ocean_T_Plateau plateau, ocean_T_Joueur joueur, char tableau[80][25]) 
    42  * rempli un tableau avec le plateau du joueur et ceui du joueur ennemi 
     24    int id=2; 
     25    char nom[NB_MAX_LETTRES_NOM+1]; 
     26    int categorie=JOUEUR_LOCAL; 
     27    printf("Veuillez entrer votre nom :"); 
     28    scanf("%s", nom); 
     29    strcpy(joueur->nickname, nom); 
     30    while (id != 1 && id !=0) 
     31    { 
     32        printf("Voulez vous jouer en premier ?\n"); 
     33        printf("0 : oui\n"); 
     34        printf("1 : non\n"); 
     35        scanf("%1d", &id); 
     36    } 
     37    ocean_initialiser_joueur(joueur, id, nom, categorie, NULL); 
     38} 
     39 
     40/*** Fonctions d'affichage ***/ 
     41 
     42/* Nom de la fonction : void texte_initialiser_affichage 
     43 * Initialise le tableau d'affichage 
     44 * ParamÚtre : char affichage[AFF_LONG][AFF_HAUT] 
     45 * RÃŽle du paramÚtre : tableau d'affichage à initialiser 
     46 */ 
     47void texte_initialiser_affichage(char affichage[AFF_LONG][AFF_HAUT]) 
     48{ 
     49    int i, j; 
     50     
     51    /* Initialiser le tableau à vide */ 
     52    for(i = 0; i < AFF_LONG; i++) 
     53    { 
     54        for(j = 0; j < AFF_HAUT; j++) 
     55        { 
     56            affichage[i][j] = ' '; 
     57        } 
     58    } 
     59     
     60    /* Définir les en-têtes des grilles */ 
     61     
     62    /* grille de gauche, ligne d'en haut */ 
     63    j=DEPART_LIGNE_J - 1; 
     64    for(i=DEPART_COLONNE_J; i<DEPART_COLONNE_J+TAILLE_GRILLE; i++) 
     65    { 
     66        affichage[i][j]=(char)((int)'a'+(i - DEPART_COLONNE_J)); 
     67    } 
     68    /*tableau de droite, ligne d'en haut*/ 
     69    for(i=DEPART_COLONNE_J_ENNEMI; i<DEPART_COLONNE_J_ENNEMI+TAILLE_GRILLE; i++) 
     70    { 
     71        affichage[i][j]=(char)((int)'a'+(i - DEPART_COLONNE_J_ENNEMI)); 
     72    } 
     73     
     74    i=DEPART_COLONNE_J-1; 
     75    /*tableau de gauche, colonne de gauche*/ 
     76    for(j=DEPART_LIGNE_J ;j<DEPART_LIGNE_J+TAILLE_GRILLE ;j++) 
     77    { 
     78        affichage[i][j]=(char)((int)'0'+(j-DEPART_LIGNE_J)); 
     79    } 
     80     
     81    i=DEPART_COLONNE_J_ENNEMI-1; 
     82    /*tableau de droite, colonne de gauche*/ 
     83    for(j=DEPART_LIGNE_J_ENNEMI ;j<DEPART_LIGNE_J_ENNEMI+TAILLE_GRILLE ;j++) 
     84    { 
     85        affichage[i][j]=(char)((int)'0'+(j - DEPART_LIGNE_J_ENNEMI)); 
     86    } 
     87} 
     88 
     89/* Nom de la fonction : void texte_afficher_plateau 
     90 * Actualise et affiche le plateau 
    4391 * ParamÚtre : ocean_T_Plateau plateau 
    44  * RÃŽle du paramÚtre : plateau du joueur 
     92 * RÃŽle du paramÚtre : plateau à afficher 
    4593 * ParamÚtre : ocean_T_Joueur joueur 
    46  * RÃŽle du paramÚtre : plateau du joueur a afficher 
    47  * ParamÚtre : char tableau[80][25] 
    48  * RÃŽle du paramÚtre : tableau à remplir 
    49  */ 
    50 void texte_remplir_tableau_bataille_navale (ocean_T_Plateau plateau, ocean_T_Joueur joueur, char tableau[80][25]) 
    51 {        
    52         int x, y; 
    53         ocean_T_Etat etat; 
    54         ocean_T_Etat etat_ennemi; 
    55         ocean_T_Bateau* bateau; 
    56          
    57         for (x=0; x<TAILLE_GRILLE; x++) 
    58         { 
    59                 for(y=0; y<TAILLE_GRILLE; y++) 
    60                 { 
    61                         etat = ocean_statut(plateau, joueur, x, y, &bateau); 
    62                         if      (etat==TOUCHE) 
    63                         { 
    64                                 tableau[x+DEPART_LIGNE_J][y+DEPART_COLONNE_J]='x'; 
    65                         } 
    66                         if      (etat==INCONNUE) 
    67                         { 
    68                                 tableau[x+DEPART_LIGNE_J][y+DEPART_COLONNE_J]='.'; 
    69                         } 
    70                         if      (etat==COULE) 
    71                         { 
    72                                 tableau[x+DEPART_LIGNE_J][y+DEPART_COLONNE_J]='#'; 
    73                         } 
    74                         if      (etat==DANS_LEAU) 
    75                         { 
    76                                 tableau[x+DEPART_LIGNE_J][y+DEPART_COLONNE_J]='o'; 
    77                         } 
    78                         if      (bateau != NULL) 
    79                         { 
    80                                 tableau[x+DEPART_LIGNE_J][y+DEPART_COLONNE_J]='X'; 
    81                         } 
    82                 }        
    83         } 
    84          
    85         for (x=0; x<TAILLE_GRILLE; x++) 
    86         { 
    87                 for(y=0; y<TAILLE_GRILLE; y++) 
    88                 { 
    89                         etat_ennemi=ocean_statut_ennemi(plateau, joueur, x, y); 
    90                         if      (etat==TOUCHE) 
    91                         { 
    92                                 tableau[x+DEPART_LIGNE_J_ENNEMI][y+DEPART_COLONNE_J_ENNEMI]='x'; 
    93                         } 
    94                         if      (etat==INCONNUE) 
    95                         { 
    96                                 tableau[x+DEPART_LIGNE_J_ENNEMI][y+DEPART_COLONNE_J_ENNEMI]='.'; 
    97                         } 
    98                         if      (etat==COULE) 
    99                         { 
    100                                 tableau[x+DEPART_LIGNE_J_ENNEMI][y+DEPART_COLONNE_J_ENNEMI]='#'; 
    101                         } 
    102                         if      (etat==DANS_LEAU) 
    103                         { 
    104                                 tableau[x+DEPART_LIGNE_J_ENNEMI][y+DEPART_COLONNE_J_ENNEMI]='o'; 
    105                         } 
    106                          
    107                 }        
    108         } 
    109 } 
    110  
    111  
    112 /* Nom de la fonction : void texte_afficher_plateau (tableau[80][25]) 
    113  * Affiche le plateau et le plateau ennemi 
    114  * ParamÚtre : char tableau[80][25] 
    115  * RÃŽle du paramÚtre : tableau à afficher 
    116  */ 
    117 void texte_afficher_plateau (char tableau[80][25]) 
    118 { 
    119         int i, j; 
    120         for (i=0; i<80; i++) 
    121         { 
    122                 for (j=0; j<25; j++) 
    123                 { 
    124                         printf("%c", tableau[i][j]); 
    125                 }                
    126                 printf("\n"); 
    127         } 
    128 } 
    129  
    130 /* Nom de la fonction : void texte_placer_local(ocean_T_Plateau *plateau, ocean_T_Joueur joueur) 
     94 * RÃŽle du paramÚtre : joueur dont on veut afficher le jeu 
     95 * ParamÚtre : char affichage[AFF_LONG][AFF_HAUT] 
     96 * RÃŽle du paramÚtre : tableau d'affichage 
     97 */ 
     98void texte_afficher_plateau (ocean_T_Plateau plateau, ocean_T_Joueur joueur, 
     99                             char affichage[AFF_LONG][AFF_HAUT]) 
     100{    
     101    int x, y; 
     102    ocean_T_Etat etat; 
     103    ocean_T_Bateau* bateau; 
     104     
     105    /* Actualiser l'affichage */ 
     106     
     107    for (x=0; x<TAILLE_GRILLE; x++) 
     108    { 
     109        for(y=0; y<TAILLE_GRILLE; y++) 
     110        { 
     111            etat = ocean_statut(plateau, joueur, x, y, &bateau); 
     112            if  (etat==TOUCHE) 
     113            { 
     114                affichage[x+DEPART_COLONNE_J][y+DEPART_LIGNE_J]='x'; 
     115            } 
     116            else if  (etat==COULE) 
     117            { 
     118                affichage[x+DEPART_COLONNE_J][y+DEPART_LIGNE_J]='#'; 
     119            } 
     120            else if  (etat==DANS_LEAU) 
     121            { 
     122                affichage[x+DEPART_COLONNE_J][y+DEPART_LIGNE_J]='o'; 
     123            } 
     124            else if (bateau != NULL) 
     125            { 
     126                affichage[x+DEPART_COLONNE_J][y+DEPART_LIGNE_J]='X'; 
     127            } 
     128            else 
     129            { 
     130                affichage[x+DEPART_COLONNE_J][y+DEPART_LIGNE_J]='.'; 
     131            } 
     132        }    
     133    } 
     134     
     135    for (x=0; x<TAILLE_GRILLE; x++) 
     136    { 
     137        for(y=0; y<TAILLE_GRILLE; y++) 
     138        { 
     139            etat=ocean_statut_ennemi(plateau, joueur, x, y); 
     140            if  (etat==TOUCHE) 
     141            { 
     142                affichage[x+DEPART_COLONNE_J_ENNEMI][y+DEPART_LIGNE_J_ENNEMI]='x'; 
     143            } 
     144            else if  (etat==COULE) 
     145            { 
     146                affichage[x+DEPART_COLONNE_J_ENNEMI][y+DEPART_LIGNE_J_ENNEMI]='#'; 
     147            } 
     148            else if  (etat==DANS_LEAU) 
     149            { 
     150                affichage[x+DEPART_COLONNE_J_ENNEMI][y+DEPART_LIGNE_J_ENNEMI]='o'; 
     151            } 
     152            else 
     153            { 
     154                affichage[x+DEPART_COLONNE_J_ENNEMI][y+DEPART_LIGNE_J_ENNEMI]='.'; 
     155            } 
     156        } 
     157    } 
     158     
     159    /* Afficher */ 
     160     
     161    for (y=0; y<AFF_HAUT; y++) 
     162    { 
     163        for (x=0; x<AFF_LONG; x++) 
     164        { 
     165            printf("%c", affichage[x][y]); 
     166        } 
     167        printf("\n"); 
     168    } 
     169     
     170    /* Afficher les scores */ 
     171    printf("Scores : %d\t\t\t%d\n", joueur.score, \ 
     172            plateau.joueur[ocean_id_ennemi(joueur)]->score); 
     173} 
     174 
     175/*** Fonctions de jeu ***/ 
     176/* Nom de la fonction : void texte_placer_local 
    131177 * Place les bateaux sur la grille 
    132178 * ParamÚtre : Plateau *plateau 
     
    134180 * ParamÚtre : Joueur joueur 
    135181 * RÃŽle du paramÚtre : joueur qui place les bateaux 
    136  */ 
    137 void texte_placer_local(ocean_T_Plateau *plateau, ocean_T_Joueur joueur) 
     182 * ParamÚtre : char affichage[AFF_LONG][AFF_HAUT] 
     183 * RÃŽle du paramÚtre : tableau d'affichage 
     184 */ 
     185void texte_placer_local(ocean_T_Plateau *plateau, ocean_T_Joueur joueur,  
     186                        char affichage[AFF_LONG][AFF_HAUT]) 
    138187{ 
    139         int x, y; 
    140         char a; 
    141         int b; 
    142         ocean_T_BateauCategorie liste_categories[NB_CATEGORIES_BATEAUX] = CATEGORIES_BATEAUX; 
    143         ocean_T_BateauCategorie categorie_en_cours; 
    144         int i, j; 
    145         int nombre; 
    146         int orientation; 
    147          
    148         for(i=0; i<NB_CATEGORIES_BATEAUX; i++) 
    149         { 
    150                 categorie_en_cours = liste_categories[i]; 
    151                 /* Tu peux ensuite utiliser la categorie de bateau ma_categorie */ 
    152                 /* Si tu veux savoir le nombre de bateaux à placer dans cette catégorie : */ 
    153                 nombre = ocean_nb_bateau(categorie_en_cours); 
    154                 for (j=0; j<nombre; j++) 
    155                 { 
    156                         texte_afficher_plateau (tableau); 
    157                         printf("Placez "); 
    158                         if (categorie_en_cours==PORTE_AVION) 
    159                         { 
    160                                 printf ("le porte avion numéro "); 
    161                         } 
    162                         if (categorie_en_cours==CROISEUR) 
    163                         { 
    164                                 printf ("le croiseur numéro  "); 
    165                         } 
    166                         if (categorie_en_cours==DESTROYER) 
    167                         { 
    168                                 printf ("le destroyez numéro  "); 
    169                         } 
    170                         if (categorie_en_cours==VEDETTE) 
    171                         { 
    172                                 printf ("la vedette numéro "); 
    173                         } 
    174                         printf("%d : coordonnées et orientation : 0 pour horizontal ou 1 vertical\n", j); 
    175                         do 
    176                         { 
    177                                 printf("Attention, il faut entrer des coordonnées valides.\n"); 
    178                                 scanf("%c %d", &a, &b); 
    179                                 x=(int)a - (int)'a'; 
    180                                 y=b-1; 
    181                                 scanf("%d", &orientation); 
    182                                  
    183                         }while (! ocean_placer(plateau, joueur, x, y, orientation, categorie_en_cours)); 
    184                 } 
    185         }  
    186 } 
    187  
    188 void texte_embellir_plateau(char tableau[80][25]) 
    189 { 
    190         int i, j; 
    191          
    192         /*tableau de gauche, ligne d'en haut*/ 
    193         i=DEPART_LIGNE_J -1; 
    194         for(j=DEPART_COLONNE_J; j<DEPART_COLONNE_J+TAILLE_GRILLE; j++) 
    195         { 
    196                 tableau[i][j]=(char)((int)'A'+j); 
    197         } 
    198         /*tableau de droite, ligne d'en haut*/ 
    199         for(j=DEPART_COLONNE_J_ENNEMI; j<DEPART_COLONNE_J_ENNEMI+TAILLE_GRILLE; j++) 
    200         { 
    201                 tableau[i][j]=(char)((int)'A'+j); 
    202         } 
    203          
    204         j=DEPART_COLONNE_J-1; 
    205         /*tableau de gauche, colonne de gauche*/ 
    206         for(i=DEPART_LIGNE_J ;i<DEPART_LIGNE_J+TAILLE_GRILLE ;i++) 
    207         { 
    208                 tableau[i][j]=(char)((int)'0'+i); 
    209         } 
    210          
    211         j=DEPART_COLONNE_J_ENNEMI-1; 
    212         /*tableau de droite, colonne de gauche*/ 
    213         for(i=DEPART_LIGNE_J_ENNEMI ;i<DEPART_LIGNE_J_ENNEMI+TAILLE_GRILLE ;i++) 
    214         { 
    215                 tableau[i][j]=(char)((int)'0'+i); 
    216         } 
    217 } 
    218  
    219  
    220 /* Nom de la fonction : void texte_placer_local(ocean_T_Plateau *plateau, ocean_T_Joueur joueur) 
     188    ocean_T_BateauCategorie liste_categories[NB_CATEGORIES_BATEAUX] = \ 
     189                                                        CATEGORIES_BATEAUX ; 
     190    int i; 
     191    /* Pour chaque categorie de bateau : */ 
     192    for(i = 0; i < NB_CATEGORIES_BATEAUX; i++) 
     193    { 
     194        ocean_T_BateauCategorie categorie = liste_categories[i]; 
     195        int nombre_bateaux = ocean_nb_bateau(categorie), j; 
     196        /* Pour le nombre de bateau à placer dans cette catégorie : */ 
     197        for(j = 0; j < nombre_bateaux; j++) 
     198        { 
     199            int x, y; 
     200            bool orientation; 
     201            /* Tant que le bateau n'est pas placé : */ 
     202            do 
     203            { 
     204                char a; 
     205                int choix_orientation; 
     206                /* Afficher la grille */ 
     207                texte_afficher_plateau(*plateau, joueur, affichage); 
     208                /* Choix d'une position dans la grille : */ 
     209                printf("Placez "); 
     210                if (categorie==PORTE_AVION) 
     211                { 
     212                    printf ("le porte avion numéro "); 
     213                } 
     214                if (