Problme langage c joueur objectif
badboys54
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour,
je suis en train de realiser mon petit jeu en 2d et je voudrais que si le personnage se trouve sur la meme case qu'un objectif le jeux affiche un message bravo et que sa passe au niveau superieur mais je ne sais pas comment faire pour afficher un message si le joueur et sur la meme case que un objectif .
merci
je suis en train de realiser mon petit jeu en 2d et je voudrais que si le personnage se trouve sur la meme case qu'un objectif le jeux affiche un message bravo et que sa passe au niveau superieur mais je ne sais pas comment faire pour afficher un message si le joueur et sur la meme case que un objectif .
merci
A voir également:
- Problme langage c joueur objectif
- Langage ascii - Guide
- Langage binaire - Guide
- Objectif tarot - Forum Jeux PC
- Objectif 55 200 quelle utilisation - Forum Nikon
- Pascal langage - Télécharger - Édition & Programmation
22 réponses
oui j'ai imaginer ce code mais sa ne marche pas :
if (mario=objectif)
continuer = 0;
si mario ( le nom du joueur ) et egale a objectif alors sa arrete mais moi se que je voudrais c'est que si mario se trouve sur un objectif ( au meme emplacement ) alors sa affiche bravo et sa passe au 2 e niveau
if (mario=objectif)
continuer = 0;
si mario ( le nom du joueur ) et egale a objectif alors sa arrete mais moi se que je voudrais c'est que si mario se trouve sur un objectif ( au meme emplacement ) alors sa affiche bravo et sa passe au 2 e niveau
Deja ca serait if(mario == objectif)
Bon en fait le probleme c'est que tu sais pas comment faire pour gerer plusieurs niveau dans ton jeu ??
Bon en fait le probleme c'est que tu sais pas comment faire pour gerer plusieurs niveau dans ton jeu ??
si sa je sais faire mais que si mario est sur la meme case qu'un objectif alors sa affiche bravo et sa change de niveau je ne sais pas faire . ce que je ne sais pas c'est afficher le bravo si mario est sur un objectif et chnager de niveau
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Ben pour savoir si mario est sur la meme case, tu compare sa position avec la position de la case de l'obj. Normalement t'as une variable type SDL_Rect qui contient la position de mario. S'ils il est dessus t'affiche une image au milieu de l'ecran avec ecrit bravo... (pendant 3secondes par exemple et apres tu supprimes l'image)
Ensuite si tu sais gerer les niveau tu dois savoir ce qu'est un fichier de niveau, et comment le charger, donc apres avoir afficher bravo tu charge le fichier de niveau suivant
Ensuite si tu sais gerer les niveau tu dois savoir ce qu'est un fichier de niveau, et comment le charger, donc apres avoir afficher bravo tu charge le fichier de niveau suivant
ok voici la variable mario :
SDL_Surface *mario[4] = {NULL};
donc je fais :
if (mario==objectif)
la j'ecrire bravo ;
et apres je charge c'est sa
SDL_Surface *mario[4] = {NULL};
donc je fais :
if (mario==objectif)
la j'ecrire bravo ;
et apres je charge c'est sa
ok voici la variable mario :
SDL_Surface *mario[4] = {NULL};
donc je fais :
if (mario==objectif)
la j'ecrire bravo ;
et apres je charge c'est sa
SDL_Surface *mario[4] = {NULL};
donc je fais :
if (mario==objectif)
la j'ecrire bravo ;
et apres je charge c'est sa
Nan normalement pour positionner mario t'as une variable de type SDL_Rect pas SDL_surface
on va dire que posmario est la position de mario et posobj est la position de l'objectif:
if(posmario.x == posobj.x && posmario.y == posobj.y)
//ici t'affiche bravo
et tu charge le nouveau niveau
apres ca peut dependre de la facon dont tu deplace mario
on va dire que posmario est la position de mario et posobj est la position de l'objectif:
if(posmario.x == posobj.x && posmario.y == posobj.y)
//ici t'affiche bravo
et tu charge le nouveau niveau
apres ca peut dependre de la facon dont tu deplace mario
ok merci je vais essayer mais voila que sa m'affiche un ecran tous blanc a la place de m'affiche l'ecran de jeu , pourquoi . voila le code du jeu ( il est long ) :
#include <stdlib.h> #include <stdio.h> #include <SDL.h> #include <SDL_image.h> #include "fichier.h" #include "jonnysolojouer.h" #include "fichiers.h" void jonnysolojouer(SDL_Surface* ecran) { SDL_Surface *mario[4] = {NULL}; // 4 surfaces pour chacune des directions de mario SDL_Surface *mur = NULL, *caisse = NULL, *caisseOK = NULL, *objectif = NULL, *marioActuel = NULL; SDL_Rect position, positionJoueur; SDL_Event event; int continuer = 1, objectifsRestants = 0, i = 0, j = 0; int carte[NB_BLOCS_LARGEUR][NB_BLOCS_HAUTEUR] = {0}; // Chargement des sprites (décors, personnage...) mur = IMG_Load("mur.jpg"); caisse = IMG_Load("caisse.jpg"); caisseOK = IMG_Load("caisse_ok.jpg"); objectif = IMG_Load("objectif.png"); mario[BAS] = IMG_Load("mario_bas.gif"); mario[GAUCHE] = IMG_Load("mario_gauche.gif"); mario[HAUT] = IMG_Load("mario_haut.gif"); mario[DROITE] = IMG_Load("mario_droite.gif"); marioActuel = mario[BAS]; // Mario sera dirigé vers le bas au départ // 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 Mario au départ for (i = 0 ; i < NB_BLOCS_LARGEUR ; i++) { for (j = 0 ; j < NB_BLOCS_HAUTEUR ; j++) { if (carte[i][j] == MARIO) // Si Mario 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(100, 100); 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: marioActuel = mario[HAUT]; deplacerJoueur(carte, &positionJoueur, HAUT); break; case SDLK_DOWN: marioActuel = mario[BAS]; deplacerJoueur(carte, &positionJoueur, BAS); break; case SDLK_RIGHT: marioActuel = mario[DROITE]; deplacerJoueur(carte, &positionJoueur, DROITE); break; case SDLK_LEFT: marioActuel = mario[GAUCHE]; deplacerJoueur(carte, &positionJoueur, GAUCHE); break; } break; } // Effacement de l'écran SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255)); // Placement des objets à l'écran objectifsRestants = 0; for (i = 0 ; i < NB_BLOCS_LARGEUR ; i++) { for (j = 0 ; j < NB_BLOCS_HAUTEUR ; j++) { position.x = i * TAILLE_BLOC; position.y = j * TAILLE_BLOC; switch(carte[i][j]) { case MUR: SDL_BlitSurface(mur, NULL, ecran, &position); break; case CAISSE: SDL_BlitSurface(caisse, NULL, ecran, &position); break; case CAISSE_OK: SDL_BlitSurface(caisseOK, 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 à la bonne position position.x = positionJoueur.x * TAILLE_BLOC; position.y = positionJoueur.y * TAILLE_BLOC; SDL_BlitSurface(marioActuel, NULL, ecran, &position); SDL_Flip(ecran); } // Désactivation de la répétition des touches (remise à 0) SDL_EnableKeyRepeat(0, 0); // Libération des surfaces chargées SDL_FreeSurface(mur); SDL_FreeSurface(caisse); SDL_FreeSurface(caisseOK); SDL_FreeSurface(objectif); for (i = 0 ; i < 4 ; i++) SDL_FreeSurface(mario[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 dépasse l'écran, on arrête break; if (carte[pos->x][pos->y - 1] == MUR) // S'il y a un mur, on arrête break; // Si on veut pousser une caisse, il faut vérifier qu'il n'y a pas de mur derrière (ou une autre caisse, ou la limite du monde) if ((carte[pos->x][pos->y - 1] == CAISSE || carte[pos->x][pos->y - 1] == CAISSE_OK) && (pos->y - 2 < 0 || carte[pos->x][pos->y - 2] == MUR || carte[pos->x][pos->y - 2] == CAISSE || carte[pos->x][pos->y - 2] == CAISSE_OK)) break; // Si on arrive là, c'est qu'on peut déplacer le joueur ! // On vérifie d'abord s'il y a une caisse à déplacer deplacerCaisse(&carte[pos->x][pos->y - 1], &carte[pos->x][pos->y - 2]); pos->y--; // On peut enfin faire monter le joueur (oufff !) break; case BAS: if (pos->y + 1 >= NB_BLOCS_HAUTEUR) break; if (carte[pos->x][pos->y + 1] == MUR) break; if ((carte[pos->x][pos->y + 1] == CAISSE || carte[pos->x][pos->y + 1] == CAISSE_OK) && (pos->y + 2 >= NB_BLOCS_HAUTEUR || carte[pos->x][pos->y + 2] == MUR || carte[pos->x][pos->y + 2] == CAISSE || carte[pos->x][pos->y + 2] == CAISSE_OK)) break; deplacerCaisse(&carte[pos->x][pos->y + 1], &carte[pos->x][pos->y + 2]); pos->y++; break; case GAUCHE: if (pos->x - 1 < 0) break; if (carte[pos->x - 1][pos->y] == MUR) break; if ((carte[pos->x - 1][pos->y] == CAISSE || carte[pos->x - 1][pos->y] == CAISSE_OK) && (pos->x - 2 < 0 || carte[pos->x - 2][pos->y] == MUR || carte[pos->x - 2][pos->y] == CAISSE || carte[pos->x - 2][pos->y] == CAISSE_OK)) break; deplacerCaisse(&carte[pos->x - 1][pos->y], &carte[pos->x - 2][pos->y]); pos->x--; break; case DROITE: if (pos->x + 1 >= NB_BLOCS_LARGEUR) break; if (carte[pos->x + 1][pos->y] == MUR) break; if ((carte[pos->x + 1][pos->y] == CAISSE || carte[pos->x + 1][pos->y] == CAISSE_OK) && (pos->x + 2 >= NB_BLOCS_LARGEUR || carte[pos->x + 2][pos->y] == MUR || carte[pos->x + 2][pos->y] == CAISSE || carte[pos->x + 2][pos->y] == CAISSE_OK)) break; deplacerCaisse(&carte[pos->x + 1][pos->y], &carte[pos->x + 2][pos->y]); pos->x++; break; } } void deplacerCaisse(int *premiereCase, int *secondeCase) { if (*premiereCase == CAISSE || *premiereCase == CAISSE_OK) { if (*secondeCase == OBJECTIF) *secondeCase = CAISSE_OK; else *secondeCase = CAISSE; if (*premiereCase == CAISSE_OK) *premiereCase = OBJECTIF; else *premiereCase = VIDE; } }
Attend t'es entrain de refaire le Mario Sokoban du site du zero, t'as le code tout fait sur le site du zero et tu trouve le moyen de poser des question ici ?
J'arrive pas à me faire aux codes sources des autres. Cherche un peu la ou t'as changer des choses, regarde les sdl_blitsurface, sdl_fip si ils sont bien placé...
Le mieux de tout serait de faire un jeu qui vienne de toi (il y en a des facile a faire comme Snake, pacman, un spaceshooter, ...)
pour code de base prend pluto celui ou il est quesiton de bouger zozor. T'enleve tou ce qui concerne zozor et tu fais ton truc
Le mieux de tout serait de faire un jeu qui vienne de toi (il y en a des facile a faire comme Snake, pacman, un spaceshooter, ...)
pour code de base prend pluto celui ou il est quesiton de bouger zozor. T'enleve tou ce qui concerne zozor et tu fais ton truc
pour code de base prend pluto celui ou il est quesiton de bouger zozor. T'enleve tou ce qui concerne zozor et tu fais ton truc
ok mais sa m'affiche toujours le probleme avec 'ecran blanc je ne sais pas pourquoii sa m'affiche un ecran blanc
j'ai reolu mon probleme de fichier ( c'etait un mauvais placement des fichier ) mais pas monprobleme de condition . je me suis arreter avec sa :
if(positionJoueur.x == OBJECTIF && positionJoueur.y == OBJECTIF)
continuer = 0;
j'ai mis continue=0 mais ensuit je changerais c'est pour voir sic sa marche mais sa ne marche pas
je n'ai pas pas de position y et x pour objet
if(positionJoueur.x == OBJECTIF && positionJoueur.y == OBJECTIF)
continuer = 0;
j'ai mis continue=0 mais ensuit je changerais c'est pour voir sic sa marche mais sa ne marche pas
je n'ai pas pas de position y et x pour objet
j'ai essayer de refaire le code un petit peu mieux mais sa ne marche toujours pas le voila :
case OBJECTIF:
SDL_BlitSurface(objectif, NULL, ecran, &position);
objectifsRestants = 1;
objectifatteind.x = position.x;
objectifatteind.y = position.y; // je voulais que objectifatteinds est la meme valeur que position.x et position.y
et apres j'ai modifier sa :
if(positionJoueur.x == objectifatteind.x && positionJoueur.y == objectifatteind.y)
continuer = 0;
mais sa ne marche toujours pas !
case OBJECTIF:
SDL_BlitSurface(objectif, NULL, ecran, &position);
objectifsRestants = 1;
objectifatteind.x = position.x;
objectifatteind.y = position.y; // je voulais que objectifatteinds est la meme valeur que position.x et position.y
et apres j'ai modifier sa :
if(positionJoueur.x == objectifatteind.x && positionJoueur.y == objectifatteind.y)
continuer = 0;
mais sa ne marche toujours pas !