1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225
| //TD n°5
//Mini projet: bataille navale
//1.VARIABLES GLOBALES ET COMMANDES À L'ORDINATEUR
//1.1.
#include "stdio.h"
#include "graphics.h"
//1.2. Variables globales
#define LARGEUR 800 /* Largeur du quadrillage */
#define HAUTEUR 800 /* Hauteur du quadrillage */
#define NbCase 8 /* Hauteur et largeur du tableau */
//2.FONCTIONS D'AFFICHAGE
//2.1.Fonction quadrillage: définit le quadrillage du plateau de jeu.
void quadrillage()
{
POINT p1; /* Déclaration des variables */
POINT p2;
int i;
init_graphics(LARGEUR, HAUTEUR) ; /* Début de la fonction. */
fill_screen(white);
for(i=1; i<=LARGEUR/100; i++)
{
p1.x = 100*i; p1.y = 0;
p2.x = 100*i; p2.y = HAUTEUR-100;
draw_line(p1, p2, bleu);
}
for(i=1; i<=HAUTEUR/100; i++)
{
p1.x = 0; p1.y = (100*i)-100;
p2.x = LARGEUR; p2.y = (100*i)-100;
draw_line(p1, p2, bleu);
}
}
//2.2.Fonction Bateau: définit le point Bateau.
POINT init_bateau()
{
POINT bateau; /* Déclaration de la variable */
bateau.x = alea_int(LARGEUR); /* Coordonnées du bateau choisies aléatoirement */
bateau.y = alea_int(HAUTEUR);
bateau.x=(bateau.x/100)*100+50; /* On centre le point bateau dans la case */
bateau.y=(bateau.y/100)*100+50;
return bateau; /* La variable bateau est renvoyée au programme */
}
//2.3.Fonction Tableau: définit un tableau correspondant aux cases du plateau. On attribue la valeur 0 à chaque case.
void tableau (int T[NbCase][NbCase])
{
int i ; /* Déclaration des variables */
int j ;
for (i = 0; i < NbCase; i++) /* Début de la fonction */
{
for (j = 0; j < NbCase; j++)
{
T[i][j]=0;
}
}
}
//2.4.Fonction test_clic_valide: teste la validité du clic. La fonction renvoie 1 si le clic est valide.
int test_clic_valide (int T[NbCase][NbCase], POINT p)
{
int V; /* Déclaration de la variable */
V = 0;
if (T[p.x][p.y]==0) /* Début de la fonction */
{
V=1; /* Le clic est valide */
}
else if (T[p.x][p.y]==1)
{
V=0; /* Le clic n'est pas valide */
}
return V;
}
//2.5.Fonction test bateau : renvoit 1 si le clic a trouvé le bateau, 2 s'il est en vue, 0 sinon.
int test_bateau(POINT p, POINT bateau)
{
int t; /* Déclaration de la variable */
t = 0 ;
if (p.x == bateau.x && p.y == bateau.y) /* Début de la fonction */
{
t = 1 ; /* Le bateau a été trouvé par le joueur */
}
else if (p.x == bateau.x || p.y == bateau.y)
{
t = 2 ; /* Le bateau est "en vue" */
}
else
{
t = 0 ; /* Le bateau n'est ni en vue ni coulé */
}
return t ;
}
//2.6.Fonction afficher_coup: change la couleur de la case selon l'attribut du test bateau (vert en vue, noir trouvé et rouge sinon)
void afficher_coup(int t, POINT p)
{
p.x=(p.x/100)*100+50; /* Début de la fonction et centrage du point p dans la case */
p.y=(p.y/100)*100+50;
if (t==2) /* Le bateau est "en vue" */
{
draw_fill_circle (p , 5 , noir); /* Un cercle noir est tracé au centre de la case cliquée par le joueur */
}
else if (t==1) /* Le bateau a été trouvé par le joueur */
{
draw_fill_circle (p , 5 , vert); /* Un cercle vert est tracé au centre de la case cliquée par le joueur */
}
else if (t==0) /* Le bateau n'est ni en vue ni coulé */
{
draw_fill_circle (p , 5 , rouge); /* Un cercle rouge est tracé au centre de la case cliquée par le joueur */
}
}
//2.7.Fonction afficher_erreur: affiche un message d'erreur quand le clic n'est pas valide
void afficher_erreur(int V)
{
POINT p3 ;
p3.x=10 ; p3.y=550 ;
if (V==0) ;
{
aff_pol("Essayez ailleurs" , 15 , p3 , noir) ;
}
}
//2.8.Fonction afficher_resultat
void afficher_resultat(int t)
{
POINT p3 ;
p3.x=100 ; p3.y=550 ;
if(t==1)
{
aff_pol("Vous avez gagné !" , 20 , p3 , vert) ;
}
}
//3. AUTRES FONCTIONS
//3.1 Fonction de récupération du point
POINT recupere_X (POINT p)
{
POINT p4;
p4.x=0;
p4.y=0;
p4.x=p.x/100;
p4.y=p.y/100;
return p4;
}
//4. PROGRAMME PRINCIPAL
int main () /* Début du code */
{
POINT bateau; /*Déclarations des variables*/
POINT p1;
POINT p2;
POINT p3;
POINT p;
POINT Case;
int V=1, t=0;
/* Initialisation de la fenêtre graphique */
init_graphics(800,800);
quadrillage(); /* Initialisation du jeu */
int T[8][8];
tableau(T);
bateau=init_bateau();
p3.x=300 ; p3.y=770 ;
aff_pol("BATAILLE NAVALE", 20, p3, noir); /* Affiche "BATAILLE NAVALE" */
p1.x=10; p1.y=532;
p2.x=175; p2.y=548;
while ((t==2)||(t==0)) /* Jeu */
{
p = wait_clic();
p.x=(p.x/100)*100+50;
p.y=(p.y/100)*100+50;
Case=recupere_X(p);
V=test_clic_valide(T,Case);
if (V==1)
{
draw_fill_rectangle(p1, p2, blanc);
T[Case.x][Case.y]=1;
t = test_bateau(p, bateau);
afficher_coup(t, p);
}
else if(V==0)
{
afficher_erreur(V);
}
}
afficher_resultat(t); /* Affichage des résultats */
wait_escape() ; /*Fin du code*/
exit(0) ;
} |
Partager