Bonsoir,
Après une longue durée d'inactivité en programmation , je me suis attaqué à la programmation d'un jeu d'echec , j'ai voulu dans un premier temps écrire la routine d'affichage de l'echiquier mais ça bug déjà .
1/ Problème de logique touchant le dessin même de l'échiquier
2/ Problèmes de scintillements ( Apparement je n'ai pas trouvé la bonne méthode pour optimiser mon affichage )
Concernant le 1 :
Voici la partie du code qui nous interresse :
Non seulement , l'alternance des couleurs n'est pas comme souhaitée mais en plus j'obtiens une éspèce de colonne grise et blanche tt à gauche que je ne m'explique pas oO !
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 void CHEchiquier::dessinerEchiquier() { glBegin(GL_QUADS); for(unsigned int i=1;i<=64;i++) { if(i!=8 || i!=16 || i != 32 || i != 64) coordCurrent = i%8; if((i==8) || (i== 16) || (i==32) || (i==64)) { coordCurrent = 8; cury += ce_sizeTile; cury %= 400; // 400 = 8*50 } // Pour l'alternance des couleurs if((i>=1 && i<=8)||(i>=17 && i<=24)||(i>=33 && i<=40)||(i>=49 && i<=56)) couleur = coordCurrent%2; if((i>=9 && i<=16)||(i>=24 && i<=32)|| (i>=41 && i<=48) || (i>=57 && i<=64)) { if((coordCurrent%2)==0) couleur = 1; else if((coordCurrent%2) == 1) couleur = 0; } glColor3ub(ce_clr[couleur].composanteRouge,ce_clr[couleur].composanteVerte,ce_clr[couleur].composanteBleue); glVertex2i(ce_originEchiquierX+(coordCurrent-1)*ce_sizeTile,ce_originEchiquierY+cury); glVertex2i(ce_originEchiquierX+(coordCurrent-1)*ce_sizeTile,ce_originEchiquierY+cury+ce_sizeTile); glVertex2i(ce_originEchiquierX+coordCurrent*ce_sizeTile,ce_originEchiquierY+cury+ce_sizeTile); glVertex2i(ce_originEchiquierX+coordCurrent*ce_sizeTile,ce_originEchiquierY+cury); cout<<cury<<endl; } glEnd(); WasEchiquierDraw = true; }
Pour le 2 , si je laisse le glClear(GL_COLOR_BUFFER_BIT); , l'affichage devient horrible ça scintille !
Que faut t'il faire ?
-Dessiner l'échiquier une seule fois ? Non ,car il sera effacé
-Mettre en place une sorte de timer ?
ou il est juste question d'une erreur bête de programmation ?
Le code source entier est dans le rar en pièce jointe il ya les fichiers suivants :
Main.cpp
CHEchiquier.h
CHEchiquier.cpp
CHPiece.h
CHPiece.cpp
Merci à vous , de vouloir bien m'aider
Partager