Bonjour voila alors je suis en première année d’école d’ingénieur et j'ai un projet a faire pour les vacances
voila je dois réalisé un jeu de dame en C
j'ai le choix entre console et graphique et je préféré console car en je ne suis pas très a l'aise avec la SDL

Voila j'ai réussi a afficher le damier, les pions, et faire les déplacements pour les 2


Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
 
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
 
// 0 Noir
// 15 Blanc
 
 
// 0 Blanc
// 1 O
// 2 X
 
 
 
// variables globales pour pouvoir les reutiliser dans les autres fonction comme jeu()
char* joueur1 = NULL; // initialisation de l'allocation memoire
char* joueur2 = NULL; // initialisation de l'allocation memoire
int pion;
int fin_de_partie =0;
int Damier2[10][10];
 
// Fonction qui prends en parametre la couleur du texte et la couleur du fond
void color(int t,int f)
{
HANDLE H=GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(H,f*16+t);
}
 
 
 
// menu du debut
void menu()
{
joueur1 = malloc(sizeof(char)); // allocation de la memoire
joueur2 = malloc(sizeof(char)); // allocation de la memoire
if (joueur1 == NULL || joueur2 == NULL)
{
exit(0);
}
 
printf("Jeu de dame en C\n");
color(0,15);
printf("Joueur 1 :");
color(15,0);
printf(" ");
scanf("%s", joueur1);
color(0,15);
printf("Joueur 2 :");
color(15,0);
printf(" ");
scanf("%s", joueur2);
printf("\n\n");
color(11,0);
printf(" %s ", joueur1);
color(15,0);
printf(" VS ");
color(12,0);
printf(" %s \n\n\n", joueur2);
color(15,0);
 
}
 
 
 
// initialisation du plateau de jeux (tableau 2D) a 0
void initialisation_plateau(int Damier[10][10])
{
int i,j;
for (i=0;i<10; i++)
{
for(j=0; j<10;j++)
{
Damier[i][j] = 0;
}
}
}
 
 
 
// configuration pour le placement des pions sur le damier
void configuration_piont(int Damier[10][10])
{
int i,j;
// premiere boucle pour les colonnes allant de 0 a 4 car il y a que des X
for(i=0;i<4;i++)
{
for(j=0;j<10;j++)
{
if((i+j)%2 == 0) // pour alterner 1 fois sur 2
{
Damier[i][j] = 0; // on met la valeur a 0
}
else
{
Damier[i][j] = 2; // on met a 2 ce qui correspond a la croix
}
}
 
}
 
// pour la deuxieme partie du damier de la 4 eme a la 6 eme colonne car il n'y a pas de pions dans cette partie
for(i=4;i<6;i++)
{
for(j=0;j<10;j++)
{
Damier[i][j] = 0; // font blanc sans pions
}
 
}
 
// derniere partie du damier ou il y a que des O
for(i=6;i<10;i++)
{
for(j=0;j<10;j++)
{
if((i+j)%2 == 0)
{
Damier[i][j] = 0;
}
else
{
Damier[i][j] = 1; // O
}
}
 
}
 
 
}
 
 
// affichage du damier
void afficher_plateau(int Damier[10][10])
{
printf(" 0 1 2 3 4 5 6 7 8 9\n");
int i,j;
for(i=0; i<10; i++)
{
for(j=0;j<10;j++)
{
if(Damier[i][j] == 1) // Si sa vaut 1 on affiche un Rond
{
color(11,0);
printf(" O ");
color(15,0);
}
else if(Damier[i][j] == 2) // afichae des X
{
color(12,0);
printf(" X ");
color(15,0);
}
else
{
if((j+i)%2 == 0)
{
color(0,15);
printf(" ");
color(15,0);
}
else
{
color(15,0);
printf(" ");
color(15,0);
}
}
}
 
printf(" %d\n",i);
}
 
}
 
 
 
int verification (int depart_x, int depart_y, int arrivee_x, int arrivee_y, int pion, int damier[10][10])
{
if (pion == 1) // si c'est les rond
{
if ((damier[arrivee_x][arrivee_y] == 0) && (damier[arrivee_x][arrivee_y] !=1)) // Si la case de destination est vide et qu(il y a pas de rond dessus
{
if (((arrivee_x == depart_x - 1) && (arrivee_y == depart_y - 1)) || ((arrivee_x == depart_x - 1) && (arrivee_y == depart_y + 1))) // condition pour faire que les 2 mouvements possible diagonale fauche et droite d'une seule case
{
return 1;
}
else
{
return 0;
}
}
}
else if (pion == 2) // si c'est les X
{
if ((damier[arrivee_x][arrivee_y] == 0 ) && (damier[arrivee_x][arrivee_y] !=2)) // Si la case de destination est vide et qu'il n'y a pas deja une croix dessus
{
if (((arrivee_x == depart_x + 1) && (arrivee_y == depart_y + 1)) || ((arrivee_x == depart_x + 1) && (arrivee_y == depart_y - 1)))
{
return 1;
}
 
else
{
return 0;
}
}
}
else{return 0;} // sinon erreur
}
 
 
 
void jeu(int pion)
{
if (pion == 1)
{
int depart_x, depart_y, arrivee_x, arrivee_y;
printf("%s Entrez labcisse de depart du pion : ", joueur1);
scanf("%d", &depart_y);
printf("%s Entrez l'ordonnee de depart du pion : ", joueur1);
scanf("%d", &depart_x);
printf("%s Entrez labcisse d'arrivee du pion : ", joueur1);
scanf("%d", &arrivee_y);
printf("%s Entrez l'ordonnee d'arrivee du pion : ", joueur1);
scanf("%d", &arrivee_x);
if (verification(depart_x, depart_y, arrivee_x, arrivee_y, pion, Damier2) == 1)
{
Damier2[arrivee_x][arrivee_y]=Damier2[depart_x][depart_y];
Damier2[depart_x][depart_y] = 0;
}
system("cls");
afficher_plateau(Damier2);
}
 
else
{
int depart_x, depart_y, arrivee_x, arrivee_y;
printf("%s Entrez labcisse de depart du pion : ", joueur2);
scanf("%d", &depart_y);
printf("%s Entrez l'ordonnee de depart du pion : ", joueur2);
scanf("%d", &depart_x);
printf("%s Entrez labcisse d'arrivee du pion : ", joueur2);
scanf("%d", &arrivee_y);
printf("%s Entrez l'ordonnee d'arrivee du pion : ", joueur2);
scanf("%d", &arrivee_x);
if (verification(depart_x, depart_y, arrivee_x, arrivee_y, pion, Damier2) == 1)
{
Damier2[arrivee_x][arrivee_y]=Damier2[depart_x][depart_y];
Damier2[depart_x][depart_y] = 0;
}
system("cls");
afficher_plateau(Damier2);
}
 
 
}
 
 
void alternance()
{
int i =0;
while(fin_de_partie !=1) // tant que aucun joueur a remporter la partie
{
if(i%2 == 0) // systeme pour faire 1 fois sur 2
{
jeu(1);
i++;
}
else
{
jeu(2);
i++;
}
}
 
}
 
 
 
int main()
{
initialisation_plateau(Damier2);
configuration_piont(Damier2);
menu();
afficher_plateau(Damier2);
color(15,0);
alternance();
 
return 0;
}
ce qui me reste a faire :

Problème 1 - la fonction pour capturer des pions je ne sais pas du tout comment m'y prendre
Problème 2 - la fonction pour quand un pion atteint le coté adverse il se transforme en dame
Problème 3 - crée le pion de la dame et ses replacements

Problème 4
Après comme vous l'avez vu avec le code ce n'est pas très pratique il demande les coordonnées une par une de départ et d'arriver , j'ai essayer de faire un scanf qui demande les coordonnés de départ et un autre qui demande celles d’arrivés au lieu d'en faire 4 mais je n'arrive pas a extraire les abscisses et ordonnés pour ensuite géré mes conditions
ou sinon j'avais pensé a faire un système d'une case qui clignote et qu'on peu déplacer avec les touches directionnels mais sa m'a l'air impossible en console malgré que sa serai beaucoup plus ergonomique que entrer a chaque fois les coordonnées vous voyez ce que je veux dire ?


voici le cahier des charges précis : https://drive.google.com/folderview?...XJlMWVybFEzQ0U

Je vous remercie d'avance pour votre aide