Bonjour tout le monde !!
Je suis en Terminal S-Si ET notre professeur d'éléctronique nous à donnez un travail à faire pendant le week-end.
Il a pris un programme de l'un des ppe de la terminal de l'anné dernière et il nous à dit de le transformer.
Le PPE qu'il avait fait était un trivial pursuit avec la SDL .
Le professeur nous à donner la parti où les joueurs lance le dé en appuyant sur espace et se deplace avec les flèches du claviers, il a mit des commentaires à coté pour nous aider mais moi je ne comprend pas.
J'avoue que je suis plutôt nul en programmations mais je me rattrape sur les connecteurs logique .. heuresement ^^ Maintenant il va falloir que je bosse le programmation.
il nous a demander de changer le programme de façon à ce qu'il ne fasse plus jouer un joueur contre un autre mais un joueur contre l'ordinateur.
Donc il faudrait que le joueur un puisse jouer normalement et que le joueur 2 lance le dé automatiquement quand c'est à lui et choisisse une direction au hasard en fonction de sa postion sur le plateau ( par exemple : si il est en bas il choisi entre gauche et droite au hasard et si il est dans le coin droite il prend au hasard entre gauche et bas.
Bref si quelqu'un pouvait m'aider se serait vraiment sympa parce que je ne comprend pas grand chose à la SDL et j'ai essayé de chercher des programmes similaires mais je n'ai pas reussi ^^.
Donc merci d'avance à tout ceux qui auront essayer de m'aider !!
Voici le programme :
#include <stdio.h>
#include <stdlib.h>
#include <SDL-1.2.13/SDL.h>
#include <SDL-1.2.13/SDL_ttf.h>
#include <time.h>
#include <string.h>
#include "jeu.h"
#include "constantes.h"
#include "textes.h"
void unJoueur(SDL_Surface *ecran, int pion1, int pion2)
{
SDL_Surface *plateau=NULL, *pionUn=NULL, *pionDeux=NULL, *imageDe=NULL, *rectangle1=NULL, *rectangle2=NULL;
SDL_Surface *etoileG1=NULL, *etoileD1=NULL, *etoileH1=NULL, *etoileAL1=NULL, *etoileSN1=NULL, *etoileSL1=NULL;
SDL_Surface *etoileG2=NULL, *etoileD2=NULL, *etoileH2=NULL, *etoileAL2=NULL, *etoileSN2=NULL, *etoileSL2=NULL;
SDL_Rect positionPlateau, positionPionUn, positionPionDeux, positionUn, positionDeux, posPlateau, positionImageDe, position;
SDL_Rect posEtoileG1, posEtoileD1, posEtoileH1, posEtoileAL1, posEtoileSN1, posEtoileSL1;
SDL_Rect posEtoileG2, posEtoileD2, posEtoileH2, posEtoileAL2, posEtoileSN2, posEtoileSL2;
SDL_Event event;
int continuer=1, joueurActuel=1, rejouer=0, nombreDe=0, camembert1[6]={0}, camembert2[6]={0};
SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 0, 0, 0));
etoileG1=etoileD1=etoileH1=etoileAL1=etoileSN1=etoileSL1=SDL_LoadBMP("sprites/star.bmp");
posEtoileG1.x=10; posEtoileG1.y=30;
posEtoileD1.x=75; posEtoileD1.y=30;
posEtoileH1.x=75; posEtoileH1.y=65;
posEtoileAL1.x=75; posEtoileAL1.y=95;
posEtoileSN1.x=10; posEtoileSN1.y=95;
posEtoileSL1.x=10; posEtoileSL1.y=65;
etoileG2=etoileD2=etoileH2=etoileAL2=etoileSN2=etoileSL2=SDL_LoadBMP("sprites/star.bmp");
posEtoileG2.x=880; posEtoileG2.y=30;
posEtoileD2.x=955; posEtoileD2.y=30;
posEtoileH2.x=955; posEtoileH2.y=65;
posEtoileAL2.x=955; posEtoileAL2.y=95;
posEtoileSN2.x=890; posEtoileSN2.y=65;
posEtoileSL2.x=890; posEtoileSL2.y=95;
switch(pion1)
{
case VERT:
pionUn=SDL_LoadBMP("sprites/vert.bmp"); // image du premier pion
break;
case BEIGE:
pionUn=SDL_LoadBMP("sprites/beige.bmp"); // image du premier pion
break;
case JAUNE:
pionUn=SDL_LoadBMP("sprites/jaune.bmp"); // image du premier pion
break;
case BLEU:
pionUn=SDL_LoadBMP("sprites/bleu.bmp"); // image du premier pion
break;
case ORANGE:
pionUn=SDL_LoadBMP("sprites/orange.bmp"); // image du premier pion
break;
case ROUGE:
pionUn=SDL_LoadBMP("sprites/rouge.bmp"); // image du premier pion
break;
}
switch(pion2)
{
case VERT:
pionDeux=SDL_LoadBMP("sprites/vert.bmp"); // image du deuxieme pion
break;
case BEIGE:
pionDeux=SDL_LoadBMP("sprites/beige.bmp"); // image du deuxieme pion
break;
case JAUNE:
pionDeux=SDL_LoadBMP("sprites/jaune.bmp"); // image du deuxieme pion
break;
case BLEU:
pionDeux=SDL_LoadBMP("sprites/bleu.bmp"); // image du deuxieme pion
break;
case ORANGE:
pionDeux=SDL_LoadBMP("sprites/orange.bmp"); // image du deuxieme pion
break;
case ROUGE:
pionDeux=SDL_LoadBMP("sprites/rouge.bmp"); // image du deuxieme pion
break;
}
SDL_SetColorKey(pionUn, SDL_SRCCOLORKEY, SDL_MapRGB(pionUn->format, 0, 0, 255)); // transparence du premier pion*/
SDL_SetColorKey(pionDeux, SDL_SRCCOLORKEY, SDL_MapRGB(pionDeux->format, 0, 0, 255)); // transparence du deuxième pion
plateau=SDL_LoadBMP("plateau.bmp"); // Image du plateau
positionPlateau.x=-23; // Position du plateau
positionPlateau.y=-12;
positionUn.x=5; // Placement du pion 1 au départ
positionUn.y=8;
positionDeux.x=17; // Placement du pion 2 au départ
positionDeux.y=8;
rectangle1 = SDL_LoadBMP("sprites/tab1.bmp");
rectangle2 = SDL_LoadBMP("sprites/tab2.bmp");
while(continuer) // Boucle principale
{
texteJoueur(ecran, joueurActuel); //Affiche quel joueur doit jouer
if(joueurActuel==1)
{
SDL_SetAlpha(pionUn, SDL_SRCALPHA, 255);
SDL_SetAlpha(pionDeux, SDL_SRCALPHA, 64);
}
else
{
SDL_SetAlpha(pionUn, SDL_SRCALPHA, 64);
SDL_SetAlpha(pionDeux, SDL_SRCALPHA, 255);
}
SDL_WaitEvent(&event);
switch(event.type)
{
case SDL_KEYDOWN :
switch(event.key.keysym.sym)
{
case SDLK_ESCAPE : // Retourne au menu principal
continuer=0;
break;
case SDLK_SPACE :
if(nombreDe==0)
nombreDe=(rand()%6)+1; // Nombre aléatoire entre 1 et 6 pour le dé
break;
case SDLK_UP :
if(joueurActuel==1 && nombreDe!=0)
{
rejouer=deplacement(ecran, pionUn, &positionUn, HAUT, nombreDe);
if(rejouer==0) // Si le joueur a pu se déplacer :
{
nombreDe=0; // Le dé est réinitialisé
rejouer=affichageQuestion(ecran, &positionUn, &camembert1); // La question est affichée
if(rejouer==0) // Si il n'était pas sur une case rejouer ou qu'il n'a pas bien répondu à la question, c'est au joueur 2
joueurActuel=2;
}
rejouer=0;
}
else if(joueurActuel==2 && nombreDe!=0)
{
rejouer=deplacement(ecran, pionDeux, &positionDeux, HAUT, nombreDe);
if(rejouer==0)
{
nombreDe=0;
rejouer=affichageQuestion(ecran, &positionDeux, &camembert2);
if(rejouer==0)
joueurActuel=1;
}
rejouer=0;
}
break;
case SDLK_DOWN :
if(joueurActuel==1 && nombreDe!=0)
{
rejouer=deplacement(ecran, pionUn, &positionUn, BAS, nombreDe);
if(rejouer==0)
{
nombreDe=0;
rejouer=affichageQuestion(ecran, &positionUn, &camembert1);
if(rejouer==0)
joueurActuel=2;
}
rejouer=0;
}
else if(joueurActuel==2 && nombreDe!=0)
{
rejouer=deplacement(ecran, pionDeux, &positionDeux, BAS, nombreDe);
if(rejouer==0)
{
nombreDe=0;
rejouer=affichageQuestion(ecran, &positionDeux, &camembert2);
if(rejouer==0)
joueurActuel=1;
}
rejouer=0;
}
break;
case SDLK_LEFT :
if(joueurActuel==1 && nombreDe!=0)
{
rejouer=deplacement(ecran, pionUn, &positionUn, GAUCHE, nombreDe);
if(rejouer==0)
{
nombreDe=0;
rejouer=affichageQuestion(ecran, &positionUn, &camembert1);
if(rejouer==0)
joueurActuel=2;
}
rejouer=0;
}
else if(joueurActuel==2 && nombreDe!=0)
{
rejouer=deplacement(ecran, pionDeux, &positionDeux, GAUCHE, nombreDe);
if(rejouer==0)
{
nombreDe=0;
rejouer=affichageQuestion(ecran, &positionDeux, &camembert2);
if(rejouer==0)
joueurActuel=1;
}
rejouer=0;
}
break;
case SDLK_RIGHT :
if(joueurActuel==1 && nombreDe!=0)
{
rejouer=deplacement(ecran, pionUn, &positionUn, DROITE, nombreDe);
if(rejouer==0)
{
nombreDe=0;
rejouer=affichageQuestion(ecran, &positionUn, &camembert1);
if(rejouer==0)
joueurActuel=2;
}
rejouer=0;
}
else if(joueurActuel==2 && nombreDe!=0)
{
rejouer=deplacement(ecran, pionDeux, &positionDeux, DROITE, nombreDe);
if(rejouer==0)
{
nombreDe=0;
rejouer=affichageQuestion(ecran, &positionDeux, &camembert2);
if(rejouer==0)
joueurActuel=1;
}
rejouer=0;
}
break;
}
break;
}
positionPionUn.x=positionUn.x * TAILLE_BLOC; // position réelle du premier pion
positionPionUn.y=positionUn.y * TAILLE_BLOC;
positionPionDeux.x=positionDeux.x * TAILLE_BLOC; // position réelle du deuxieme pion
positionPionDeux.y=positionDeux.y * TAILLE_BLOC;
if(nombreDe==1)
imageDe=SDL_LoadBMP("sprites/face_un.bmp");
else if(nombreDe==2)
imageDe=SDL_LoadBMP("sprites/face_deux.bmp");
else if(nombreDe==3)
imageDe=SDL_LoadBMP("sprites/face_trois.bmp");
else if(nombreDe==4) //Chargement des images du dé
imageDe=SDL_LoadBMP("sprites/face_quatre.bmp");
else if(nombreDe==5)
imageDe=SDL_LoadBMP("sprites/face_cinq.bmp");
else if(nombreDe==6)
imageDe=SDL_LoadBMP("sprites/face_six.bmp");
positionImageDe.x=11 * TAILLE_BLOC;
positionImageDe.y=8 * TAILLE_BLOC;
posPlateau=positionPlateau;
SDL_BlitSurface(plateau, NULL, ecran, &posPlateau);
SDL_BlitSurface(pionUn, NULL, ecran, &positionPionUn);
SDL_BlitSurface(pionDeux, NULL, ecran, &positionPionDeux);
position.x=0;
position.y=0;
SDL_BlitSurface(rectangle1, NULL, ecran, &position);
position.x=LARGEUR_FENETRE-rectangle2->w;
SDL_BlitSurface(rectangle2, NULL, ecran, &position);
/* Camemberts du joueur 1 */
if(camembert1[GEOGRAPHIE-1]==1)
SDL_BlitSurface(etoileG1, NULL, ecran, &posEtoileG1);
if(camembert1[HISTOIRE-1]==1)
SDL_BlitSurface(etoileH1, NULL, ecran, &posEtoileH1);
if(camembert1[DIVERTISSEMENT-1]==1)
SDL_BlitSurface(etoileD1, NULL, ecran, &posEtoileD1);
if(camembert1[ARTS_ET_LITTERATURE-1]==1)
SDL_BlitSurface(etoileAL1, NULL, ecran, &posEtoileAL1);
if(camembert1[SCIENCES_ET_NATURE-1]==1)
SDL_BlitSurface(etoileSN1, NULL, ecran, &posEtoileSN1);
if(camembert1[SPORTS_ET_LOISIRS-1]==1)
SDL_BlitSurface(etoileSL1, NULL, ecran, &posEtoileSL1);
/* Camemberts du joueur 2 */
if(camembert2[GEOGRAPHIE-1]==1)
SDL_BlitSurface(etoileG2, NULL, ecran, &posEtoileG2);
if(camembert2[HISTOIRE-1]==1)
SDL_BlitSurface(etoileH2, NULL, ecran, &posEtoileH2);
if(camembert2[DIVERTISSEMENT-1]==1)
SDL_BlitSurface(etoileD2, NULL, ecran, &posEtoileD2);
if(camembert2[ARTS_ET_LITTERATURE-1]==1)
SDL_BlitSurface(etoileAL2, NULL, ecran, &posEtoileAL2);
if(camembert2[SCIENCES_ET_NATURE-1]==1)
SDL_BlitSurface(etoileSN2, NULL, ecran, &posEtoileSN2);
if(camembert2[SPORTS_ET_LOISIRS-1]==1)
SDL_BlitSurface(etoileSL2, NULL, ecran, &posEtoileSL2);
/* Image du dé si la valeur est différente de 0 */
if(nombreDe!=0)
SDL_BlitSurface(imageDe, NULL, ecran, &positionImageDe);
SDL_Flip(ecran); // mise à jour de l'écran
}
SDL_FreeSurface(plateau);
SDL_FreeSurface(pionUn);
SDL_FreeSurface(pionDeux);
SDL_FreeSurface(imageDe);
SDL_FreeSurface(rectangle1);
SDL_FreeSurface(rectangle2);
}
int deplacement(SDL_Surface *ecran, SDL_Surface *pion, SDL_Rect *positionPion, int direction, int nbrDepl)
{
SDL_Rect positionFinalePion; // La position du dé
int sens;
srand(time(NULL));
switch(direction)
{
case HAUT :
sens=HAUT;
if(positionPion->y==BAS_PLATEAU && positionPion->x!=GAUCHE_PLATEAU && positionPion->x!=DROITE_PLATEAU)
sens=IMMOBILE;
for(nbrDepl; nbrDepl>0; nbrDepl--)
{
if(positionPion->y==HAUT_PLATEAU)
{
if(positionPion->x==GAUCHE_PLATEAU)
sens=DROITE;
else if(positionPion->x==DROITE_PLATEAU)
sens=GAUCHE;
else if(sens==HAUT)
sens=IMMOBILE;
}
if(sens==HAUT)
positionPion->y--;
else if(sens==GAUCHE)
positionPion->x--;
else if(sens==DROITE)
positionPion->x++;
else if(sens==IMMOBILE)
{
nbrDepl=0;
return 1;
}
positionFinalePion.x=positionPion->x * TAILLE_BLOC;
positionFinalePion.y=positionPion->y * TAILLE_BLOC;
SDL_BlitSurface(pion, NULL, ecran, &positionFinalePion);
SDL_Flip(ecran);
SDL_Delay(500);
}
break;
case BAS :
sens=BAS;
if(positionPion->y==HAUT_PLATEAU && positionPion->x!=GAUCHE_PLATEAU && positionPion->x!=DROITE_PLATEAU)
sens=IMMOBILE;
for(nbrDepl; nbrDepl>0; nbrDepl--)
{
if(positionPion->y==BAS_PLATEAU)
{
if(positionPion->x==GAUCHE_PLATEAU)
sens=DROITE;
else if(positionPion->x==DROITE_PLATEAU)
sens=GAUCHE;
else if(sens==BAS)
sens=IMMOBILE;
}
if(sens==BAS)
positionPion->y++;
else if(sens==GAUCHE)
positionPion->x--;
else if(sens==DROITE)
positionPion->x++;
else if(sens==IMMOBILE)
{
nbrDepl=0;
return 1;
}
positionFinalePion.x=positionPion->x * TAILLE_BLOC;
positionFinalePion.y=positionPion->y * TAILLE_BLOC;
SDL_BlitSurface(pion, NULL, ecran, &positionFinalePion);
SDL_Flip(ecran);
SDL_Delay(500);
}
break;
case GAUCHE :
sens=GAUCHE;
if(positionPion->x==DROITE_PLATEAU && positionPion->y!=HAUT_PLATEAU && positionPion->y!=BAS_PLATEAU)
sens=IMMOBILE;
for(nbrDepl; nbrDepl>0; nbrDepl--)
{
if(positionPion->x==GAUCHE_PLATEAU)
{
if(positionPion->y==HAUT_PLATEAU)
sens=BAS;
else if(positionPion->y==BAS_PLATEAU)
sens=HAUT;
else if(sens==GAUCHE)
sens=IMMOBILE;
}
if(sens==HAUT)
positionPion->y--;
else if(sens==BAS)
positionPion->y++;
else if(sens==GAUCHE)
positionPion->x--;
else if(sens==IMMOBILE)
{
nbrDepl=0;
return 1;
}
positionFinalePion.x=positionPion->x * TAILLE_BLOC;
positionFinalePion.y=positionPion->y * TAILLE_BLOC;
SDL_BlitSurface(pion, NULL, ecran, &positionFinalePion);
SDL_Flip(ecran);
SDL_Delay(500);
}
break;
case DROITE :
sens=DROITE;
if(positionPion->x==GAUCHE_PLATEAU && positionPion->y!=HAUT_PLATEAU && positionPion->y!=BAS_PLATEAU)
sens=IMMOBILE;
for(nbrDepl; nbrDepl>0; nbrDepl--)
{
if(positionPion->x==DROITE_PLATEAU)
{
if(positionPion->y==HAUT_PLATEAU)
sens=BAS;
else if(positionPion->y==BAS_PLATEAU)
sens=HAUT;
else if(sens==DROITE)
sens=IMMOBILE;
}
if(sens==HAUT)
positionPion->y--;
else if(sens==BAS)
positionPion->y++;
else if(sens==DROITE)
positionPion->x++;
else if(sens==IMMOBILE)
{
nbrDepl=0;
return 1;
}
positionFinalePion.x=positionPion->x * TAILLE_BLOC;
positionFinalePion.y=positionPion->y * TAILLE_BLOC;
SDL_BlitSurface(pion, NULL, ecran, &positionFinalePion);
SDL_Flip(ecran);
SDL_Delay(500);
}
break;
}
return 0;
}