Bonjour,
Je suis en train de programmer un jeu de dames avec la SDL , mais j'ai rencontre un probleme assez coriace ( je cherche depuis 3 jours ) , tout d'abord un shema de la grille
_________________
0 1 2 3 4 5 6 7
0| | | | | | | | |
----------------------
1| | | | | | | | |
----------------------
2| | | | | | | | |
----------------------
3| | | | | | | | |
----------------------
4| | | | | | | | |
----------------------
5| | | | | | | | |
----------------------
6| | | | | | | | |
----------------------
7| | | | | | | | |
----------------------
Voici mon probleme : Si je place un pion blanc sur la case (0;7) , un pion blanc va aussi apparaître sur la case (1;0) , ou si je place un noir sur (3;0) , un noir va apparaître sur (2;7).Mais cela seulement sur les lignes 7 et 0 (les deux extremitees.Si vous voulez voir un appercu de ce que cela donne , voius pouvez vous rendre sur mon site (minable mais c'est juste pour mettre mes programmes) : http://gottfried.ifrance.com/exe.html (tout en bas).
L'erreure ne peut venir que du main.cpp ou de ma fonction blitter je pense puisque lors du chargmenent de la carte(avant d'appeler verifier) il y a deja le bug.
voici mon code source :
main.cpp:
/// fonction principale : la ou se deroule les actions principales
/// et la ou les appels des fonctions se font
#include <SDL/SDL.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "verifier.h"
#include "blitter.h"
#include "constantes.h"
int main(int argc,char **argv)
{
FILE *file;
file = fopen("temps.txt","a");
time_t t;
time_t t1, t2;
time(&t);
fprintf(file,"\n\ntemps de jeu du jour : %s\n", ctime(&t));
SDL_Init(SDL_INIT_VIDEO);
SDL_WM_SetIcon(SDL_LoadBMP("icone.bmp"), NULL);
SDL_Surface *Blancs = NULL,*Noirs = NULL,*screen = NULL,*carte = NULL,*presentation,*joueur1,*joueur2;
SDL_Surface *victoireJ1,*victoireJ2;
SDL_Rect positionGrille,posPres,posJoueur;
posJoueur.x = 200;
posJoueur.y = 280;
posPres.x = 640;
posPres.y=0;
positionGrille.x = 0;
positionGrille.y = 0;
SDL_Event event;
SDL_WM_SetCaption("Jeu de dames by gottfried",NULL);
screen = SDL_SetVideoMode(940,740,32,SDL_HWSURFACE);
Blancs = SDL_LoadBMP("pions_blancs.bmp");
victoireJ1 = SDL_LoadBMP("victoireJ1.bmp");
victoireJ2 = SDL_LoadBMP("victoireJ2.bmp");
joueur1 = SDL_LoadBMP("joueur1.bmp");
joueur2 = SDL_LoadBMP("joueur2.bmp");
Noirs = SDL_LoadBMP("pions_noirs.bmp");
presentation = SDL_LoadBMP("presentation.bmp");
carte = SDL_LoadBMP("grilleJeuDames.bmp");
int grille[7][7];
int pointsJ1 = 12,pointsJ2 = 12;
for(int j = 0;j<=7;j++)
{
for(int i=0;i<=7;i++)
{
grille[i][j] = VIDE;
}
}
int joueur = JOUEUR1;
int continuer = 1;
int pX,pY;
int etat;
/// MISE EN PLACE DES PIONS
grille[1][0] = NOIRS;
grille[3][0] = NOIRS;
grille[5][0] = NOIRS;
grille[7][0] = NOIRS;
grille[0][1] = NOIRS;
grille[2][1] = NOIRS;
grille[4][1] = NOIRS;
grille[6][1] = NOIRS;
grille[1][2] = NOIRS;
grille[3][2] = NOIRS;
grille[5][2] = NOIRS;
grille[7][2] = NOIRS;
grille[0][5] = BLANCS;
grille[2][5] = BLANCS;
grille[4][5] = BLANCS;
grille[6][5] = BLANCS;
grille[1][6] = BLANCS;
grille[3][6] = BLANCS;
grille[5][6] = BLANCS;
grille[7][6] = BLANCS;
grille[0][7] = BLANCS;
grille[2][7] = BLANCS;
grille[4][7] = BLANCS;
grille[6][7] = BLANCS;
blitter(grille,Blancs,Noirs,carte,screen);
SDL_BlitSurface(presentation,NULL,screen,&posPres);
SDL_Flip(screen);
SDL_SetColorKey(joueur1, SDL_SRCCOLORKEY, SDL_MapRGB(joueur1->format, 255, 255, 255));
SDL_SetColorKey(joueur2, SDL_SRCCOLORKEY, SDL_MapRGB(joueur2->format, 255, 255, 255));
while(pointsJ1,pointsJ2)
{
blitter(grille,Blancs,Noirs,carte,screen);
t1 = time(NULL);
debut:;
SDL_WaitEvent(&event);
switch(event.type)
{
case SDL_MOUSEBUTTONUP:
if (event.button.button == SDL_BUTTON_LEFT)
{
pX = event.button.x / 80;
pY = event.button.y / 80;
}
else goto debut;
break;
case SDL_KEYDOWN: return EXIT_SUCCESS;
default :goto debut;
break;
}
deb:;
SDL_WaitEvent(&event);
switch(event.type)
{
case SDL_MOUSEBUTTONUP:
switch(event.button.button)
{
case SDL_BUTTON_LEFT:
etat = verifier_possibilitees(joueur,pX,pY,&grille,GAUCHE,&pointsJ1,&pointsJ2);
if(etat == ERROR)
goto debut;
break;
case SDL_BUTTON_RIGHT:
etat = verifier_possibilitees(joueur,pX,pY,&grille,DROITE,&pointsJ1,&pointsJ2);
if(etat == ERROR)
goto debut;
break;
default :goto deb;
break;
}
break;
default :goto deb;
break;
}
t2 = time(NULL);
if(joueur == JOUEUR1)
{
SDL_BlitSurface(joueur2,NULL,screen,&posJoueur);
SDL_Flip(screen);
SDL_Delay(1000);
fprintf(file,"temps de jeu du joueur 1 : %lf\nnombres de pions du joueur 1 : %d\nnombres de pion du joueur 2 : %d\n\n",difftime(t2, t1),pointsJ1,pointsJ2);
joueur = JOUEUR2;
}
else if(joueur == JOUEUR2)
{
SDL_BlitSurface(joueur1,NULL,screen,&posJoueur);
SDL_Flip(screen);
SDL_Delay(1000);
fprintf(file,"temps de jeu du joueur 2 : %lf\nnombres de pions du joueur 1 : %d\nnombres de pion du joueur 2 : %d\n\n",difftime(t2, t1),pointsJ1,pointsJ2);
joueur = JOUEUR1;
}
} //while
if(pointsJ1 == 0)
{
SDL_BlitSurface(victoireJ2,NULL,screen,&positionGrille);
SDL_Flip(screen);
SDL_Delay(2000);
fprintf(file,"joueur 2 gagne\nnombre de pions restants au joueur adverse : %d ",pointsJ2);
return EXIT_SUCCESS;
}
if(pointsJ2 == 0)
{
SDL_BlitSurface(victoireJ1,NULL,screen,&positionGrille);
SDL_Flip(screen);
SDL_Delay(2000);
fprintf(file,"joueur 1 gagne\nnombre de pions restants au joueur adverse : %d ",pointsJ1);
return EXIT_SUCCESS;
}
}
j'ai regardé rapidement ton main.cpp et déjà quelque chose m'a choqué : quand on crée un tableau montableau[n] les cases vont de 0 à n-1 compris. et tu mets:
Aucun dit : comment peut on la telecharger et comment l'utiliser et l'exploiter?
Il y a des liens dans le lien ci-dessus. sinon, un petit coup de google(économique au passage ;)) te fournira tout ce que tu désires.
__________________________
............ Curtis: RTS 3D .............. ......
........... TeamMoteurProg...........