Bonjour tout le monde: je suis en train de crée un jeu de pacman en SDL et en suivant le shéma de construction du mario sokoban car je trouve que ces deux jeu fonctionne quasiment pareil a part que dans pacman y'a pas a gerer les caisse et que si pacman touche un objectif on le remplace par du vide
Je n'ai pas encore mis de fontome... Un lot de problème a la fois sinon on si retrouve plus...
Je n'ai aucun probleme a la compilation mais a l'éxécution
Bon je vous donne mon code source (c'est quasiment le même qu'avec sokoban)
// Chargement du niveau if(!chargerNiveau(carte))
exit(EXIT_FAILURE); // On arrête le jeu si on n'a pas pu charger le niveau
// Recherche de la position de Pacman au départ for(i = 0 ; i < NB_BLOCS_HAUTEUR ; i++) { for(j = 0 ; j < NB_BLOCS_LARGEUR ; j++) { if(carte[i][j] == PACMAN)// Si Pacman se trouve à cette position sur la carte {
positionJoueur.x = i;
positionJoueur.y = j;
carte[i][j] = VIDE; } } }
// Activation de la répétition des touches
SDL_EnableKeyRepeat(50, 50);
while(continuer) {
SDL_WaitEvent(&event); switch(event.type) { case SDL_QUIT:
continuer = 0; break; case SDL_KEYDOWN: switch(event.key.keysym.sym) { case SDLK_ESCAPE:
continuer = 0; break; case SDLK_UP:
pacmanActuel = pacman[HAUT];
deplacerJoueur(carte, &positionJoueur, HAUT); break; case SDLK_DOWN:
pacmanActuel = pacman[BAS];
deplacerJoueur(carte, &positionJoueur, BAS); break; case SDLK_RIGHT:
pacmanActuel = pacman[DROITE];
deplacerJoueur(carte, &positionJoueur, DROITE); break; case SDLK_LEFT:
pacmanActuel = pacman[GAUCHE];
deplacerJoueur(carte, &positionJoueur, GAUCHE); break; } break; }
switch(carte[i][j]) { case MUR:
SDL_BlitSurface(mur, NULL, ecran, &position); break; case OBJECTIF:
SDL_BlitSurface(objectif, NULL, ecran, &position);
objectifsRestants = 1; break; } } } // Si on n'a trouvé aucun objectif sur la carte, c'est qu'on a gagné if(!objectifsRestants)
continuer = 0; //on place le joueur
position.x = positionJoueur.x * TAILLE_BLOC;
position.y = positionJoueur.y * TAILLE_BLOC;
SDL_BlitSurface(pacmanActuel, NULL, ecran, &position);
SDL_Flip(ecran);
// Désactivation de la répétition des touches (remise à 0)
SDL_EnableKeyRepeat(0, 0);
//libere la mémoire
SDL_FreeSurface(mur);
SDL_FreeSurface(objectif); for(i=0; i<4; i++)
SDL_FreeSurface(pacman[i]);
}
}
void deplacerJoueur(int carte[][NB_BLOCS_HAUTEUR], SDL_Rect *pos, int direction) { switch(direction) { case HAUT: if(pos->y - 1 < 0)//si le joueur depasse l'écran on arrete break; if(carte[pos->x][pos->y-1] == MUR)//si il y a un mur on arrete break; if(carte[pos->x][pos->y-1] == OBJECTIF)//si il y a un objectif on le remplace par du vide
carte[pos->x][pos->y-1] = VIDE;
pos->y--;
case BAS: if(pos->y + 1 > NB_BLOCS_HAUTEUR)//si le joueur depasse l'écran on arrete break; if(carte[pos->x][pos->y+1] == MUR)//si il y a un mur on arrete break; if(carte[pos->x][pos->y+1] == OBJECTIF)//si il y a un objectif on le remplace par du vide
carte[pos->x][pos->y+1] = VIDE;
pos->y++;
case GAUCHE: if(pos->x - 1 < 0)//si le joueur depasse l'écran on arrete break; if(carte[pos->x-1][pos->y] == MUR)//si il y a un mur on arrete break; if(carte[pos->x-1][pos->y] == OBJECTIF)//si il y a un objectif on le remplace par du vide
carte[pos->x-1][pos->y] = VIDE;
pos->x--;
case DROITE: if(pos->x + 1 > NB_BLOCS_LARGEUR)//si le joueur depasse l'écran on arrete break; if(carte[pos->x + 1][pos->y] == MUR)//si il y a un mur on arrete break; if(carte[pos->x+1][pos->y] == OBJECTIF)//si il y a un objectif on le remplace par du vide
carte[pos->x+1][pos->y] = VIDE;
pos->x++; } }
Le menu s'affiche correctement et quand j'appuis sur 1 le jeu se lance et la rien ne vas plus les image affiché ne correspondent pas au chiffre du niveaux.lvl et dès qu'un evennement se produit (quel qu'il soit) ma fenetre s'éteind
Est ce que quelqu'un voudrait bien me répondre svp merci d'avance pour ceux qui auront le courage de plonger dans mon code
Si vous avez besoin d'autre information n'hésitez pas
1 - Tu oublie de fermer la boucle while avant la desactivation de la repetition des touches ( fonction d'ailleur inutile)
S'il reste un probleme n'essite pas je crois que si tu corrige celui ci sa iras deja mieux
probleme avec mon pacman
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.