sa ferme la fentre automatiquement

sa ferme la fentre automatiquement - C - Programmation

Marsh Posté le 20-01-2009 à 13:08:10    

bonjour
je suis en train de crée mon petit jeux en 2d et voila que j'ai un menu et quand on clique sur j pour jouer sa dois ouvrir la fentr de jeux mais a la place sa ferme la fentre automatiquement . voila le code de la page qui mene vers le jeux et  le code du jeux ( c'est un copier/coller  du site du zero mais je cont le modifier )  
jonnysolo.c  

Code :
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <SDL.h>
  4. #include <SDL_image.h>
  5. #include "fichier.h"
  6. #include "jonnysolo.h"
  7. #include "jonnysolojouer.h"
  8. void jonnysolo(SDL_Surface* ecran)
  9. {
  10.     SDL_Surface *ecrans=NULL, *menu = NULL;
  11.     SDL_Rect positionMenu;
  12.     SDL_Event event;
  13.     int continuer = 1;
  14.     SDL_Init(SDL_INIT_VIDEO);
  15.     ecrans = SDL_SetVideoMode(LARGEUR_FENETRE, HAUTEUR_FENETRE, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
  16.     menu = IMG_Load("image/explication.jpg" );
  17.     positionMenu.x = 0;
  18.     positionMenu.y = 0;
  19.     while (continuer)
  20.     {
  21.         SDL_WaitEvent(&event);
  22.         switch(event.type)
  23.         {
  24.             case SDL_QUIT:
  25.                 continuer = 0;
  26.                 break;
  27.             case SDL_KEYDOWN:
  28.                 switch(event.key.keysym.sym)
  29.                 {
  30.                         break;
  31.      case SDLK_j: // Veut arrêter le jeu
  32.                         jonnysolojouer(ecran);
  33.                         break;
  34.                 }
  35.                 break;
  36.         }
  37.         SDL_FillRect(ecrans, NULL, SDL_MapRGB(ecrans->format, 0, 0, 0));
  38.         SDL_BlitSurface(menu, NULL, ecrans, &positionMenu);
  39.         SDL_Flip(ecrans);
  40.     }
  41.     SDL_FreeSurface(menu);
  42.     SDL_Quit();
  43. }


et voila le code de la page jonnysolo.c  

Code :
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <SDL.h>
  4. #include <SDL_image.h>
  5. #include "fichier.h"
  6. #include "jonnysolojouer.h"
  7. #include "fichiers.h"
  8. void jonnysolojouer(SDL_Surface* ecran)
  9. {
  10.     SDL_Surface *mario[4] = {NULL}; // 4 surfaces pour chacune des directions de mario
  11.     SDL_Surface *mur = NULL, *caisse = NULL, *caisseOK = NULL, *objectif = NULL, *marioActuel = NULL;
  12.     SDL_Rect position, positionJoueur;
  13.     SDL_Event event;
  14.     int continuer = 1, objectifsRestants = 0, i = 0, j = 0;
  15.     int carte[NB_BLOCS_LARGEUR][NB_BLOCS_HAUTEUR] = {0};
  16.     // Chargement des sprites (décors, personnage...)
  17.     mur = IMG_Load("mur.jpg" );
  18.     objectif = IMG_Load("objectif.png" );
  19.     mario[BAS] = IMG_Load("DarkKnight-Front.gif" );
  20.     mario[GAUCHE] = IMG_Load("DarkKnight-Left.gif" );
  21.     mario[HAUT] = IMG_Load("DarkKnight-Back.gif" );
  22.     mario[DROITE] = IMG_Load("mario_droite.gif" );
  23.     marioActuel = mario[BAS]; // Mario sera dirigé vers le bas au départ
  24.     // Chargement du niveau
  25.     if (!chargerNiveau(carte))
  26.         exit(EXIT_FAILURE); // On arrête le jeu si on n'a pas pu charger le niveau
  27.     // Recherche de la position de Mario au départ
  28.     for (i = 0 ; i < NB_BLOCS_LARGEUR ; i++)
  29.     {
  30.         for (j = 0 ; j < NB_BLOCS_HAUTEUR ; j++)
  31.         {
  32.             if (carte[i][j] == MARIO) // Si Mario se trouve à cette position sur la carte
  33.             {
  34.                 positionJoueur.x = i;
  35.                 positionJoueur.y = j;
  36.                 carte[i][j] = VIDE;
  37.             }
  38.         }
  39.     }
  40.     // Activation de la répétition des touches
  41.     SDL_EnableKeyRepeat(100, 100);
  42.     while (continuer)
  43.     {
  44.         SDL_WaitEvent(&event);
  45. switch(event.type)
  46. {
  47.     case SDL_QUIT:
  48.         continuer = 0;
  49.         break;
  50.     case SDL_KEYDOWN:
  51.         switch(event.key.keysym.sym)
  52.         {
  53.             case SDLK_ESCAPE:
  54.                 continuer = 0;
  55.                 break;
  56.             case SDLK_UP:
  57.                 marioActuel = mario[HAUT];
  58.                 deplacerJoueur(carte, &positionJoueur, HAUT);
  59.                 break;
  60.             case SDLK_DOWN:
  61.                 marioActuel = mario[BAS];
  62.                 deplacerJoueur(carte, &positionJoueur, BAS);
  63.                 break;
  64.             case SDLK_RIGHT:
  65.                 marioActuel = mario[DROITE];
  66.                 deplacerJoueur(carte, &positionJoueur, DROITE);
  67.                 break;
  68.             case SDLK_LEFT:
  69.                 marioActuel = mario[GAUCHE];
  70.                 deplacerJoueur(carte, &positionJoueur, GAUCHE);
  71.                 break;
  72.         }
  73.         break;
  74. }
  75.         // Effacement de l'écran
  76.         SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
  77.         // Placement des objets à l'écran
  78.         objectifsRestants = 0;
  79.         for (i = 0 ; i < NB_BLOCS_LARGEUR ; i++)
  80.         {
  81.             for (j = 0 ; j < NB_BLOCS_HAUTEUR ; j++)
  82.             {
  83.                 position.x = i * TAILLE_BLOC;
  84.                 position.y = j * TAILLE_BLOC;
  85.                 switch(carte[i][j])
  86.                 {
  87.                     case MUR:
  88.                         SDL_BlitSurface(mur, NULL, ecran, &position);
  89.                         break;
  90.                     case CAISSE:
  91.                         SDL_BlitSurface(caisse, NULL, ecran, &position);
  92.                         break;
  93.                     case CAISSE_OK:
  94.                         SDL_BlitSurface(caisseOK, NULL, ecran, &position);
  95.                         break;
  96.                     case OBJECTIF:
  97.                         SDL_BlitSurface(objectif, NULL, ecran, &position);
  98.                         objectifsRestants = 1;
  99.                         break;
  100.                 }
  101.             }
  102.         }
  103.         // Si on n'a trouvé aucun objectif sur la carte, c'est qu'on a gagné
  104.         if (!objectifsRestants)
  105.             continuer = 0;
  106.         // On place le joueur à la bonne position
  107.         position.x = positionJoueur.x * TAILLE_BLOC;
  108.         position.y = positionJoueur.y * TAILLE_BLOC;
  109.         SDL_BlitSurface(marioActuel, NULL, ecran, &position);
  110.         SDL_Flip(ecran);
  111.     }
  112.     // Désactivation de la répétition des touches (remise à 0)
  113.     SDL_EnableKeyRepeat(0, 0);
  114.     // Libération des surfaces chargées
  115.     SDL_FreeSurface(mur);
  116.     SDL_FreeSurface(caisse);
  117.     SDL_FreeSurface(caisseOK);
  118.     SDL_FreeSurface(objectif);
  119.     for (i = 0 ; i < 4 ; i++)
  120.         SDL_FreeSurface(mario[i]);
  121. }
  122. void deplacerJoueur(int carte[][NB_BLOCS_HAUTEUR], SDL_Rect *pos, int direction)
  123. {
  124.     switch(direction)
  125.     {
  126.         case HAUT:
  127.             if (pos->y - 1 < 0) // Si le joueur dépasse l'écran, on arrête
  128.                 break;
  129.             if (carte[pos->x][pos->y - 1] == MUR) // S'il y a un mur, on arrête
  130.                 break;
  131.             // 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)
  132.             if ((carte[pos->x][pos->y - 1] == CAISSE || carte[pos->x][pos->y - 1] == CAISSE_OK) &&
  133.                 (pos->y - 2 < 0 || carte[pos->x][pos->y - 2] == MUR ||
  134.                 carte[pos->x][pos->y - 2] == CAISSE || carte[pos->x][pos->y - 2] == CAISSE_OK))
  135.                 break;
  136.             // Si on arrive là, c'est qu'on peut déplacer le joueur !
  137.             // On vérifie d'abord s'il y a une caisse à déplacer
  138.             deplacerCaisse(&carte[pos->x][pos->y - 1], &carte[pos->x][pos->y - 2]);
  139.             pos->y--; // On peut enfin faire monter le joueur (oufff !)
  140.             break;
  141.         case BAS:
  142.             if (pos->y + 1 >= NB_BLOCS_HAUTEUR)
  143.                 break;
  144.             if (carte[pos->x][pos->y + 1] == MUR)
  145.                 break;
  146.             if ((carte[pos->x][pos->y + 1] == CAISSE || carte[pos->x][pos->y + 1] == CAISSE_OK) &&
  147.                 (pos->y + 2 >= NB_BLOCS_HAUTEUR || carte[pos->x][pos->y + 2] == MUR ||
  148.                 carte[pos->x][pos->y + 2] == CAISSE || carte[pos->x][pos->y + 2] == CAISSE_OK))
  149.                 break;
  150.             deplacerCaisse(&carte[pos->x][pos->y + 1], &carte[pos->x][pos->y + 2]);
  151.             pos->y++;
  152.             break;
  153.         case GAUCHE:
  154.             if (pos->x - 1 < 0)
  155.                 break;
  156.             if (carte[pos->x - 1][pos->y] == MUR)
  157.                 break;
  158.             if ((carte[pos->x - 1][pos->y] == CAISSE || carte[pos->x - 1][pos->y] == CAISSE_OK) &&
  159.                 (pos->x - 2 < 0 || carte[pos->x - 2][pos->y] == MUR ||
  160.                 carte[pos->x - 2][pos->y] == CAISSE || carte[pos->x - 2][pos->y] == CAISSE_OK))
  161.                 break;
  162.             deplacerCaisse(&carte[pos->x - 1][pos->y], &carte[pos->x - 2][pos->y]);
  163.             pos->x--;
  164.             break;
  165.         case DROITE:
  166.             if (pos->x + 1 >= NB_BLOCS_LARGEUR)
  167.                 break;
  168.             if (carte[pos->x + 1][pos->y] == MUR)
  169.                 break;
  170.             if ((carte[pos->x + 1][pos->y] == CAISSE || carte[pos->x + 1][pos->y] == CAISSE_OK) &&
  171.                 (pos->x + 2 >= NB_BLOCS_LARGEUR || carte[pos->x + 2][pos->y] == MUR ||
  172.                 carte[pos->x + 2][pos->y] == CAISSE || carte[pos->x + 2][pos->y] == CAISSE_OK))
  173.                 break;
  174.             deplacerCaisse(&carte[pos->x + 1][pos->y], &carte[pos->x + 2][pos->y]);
  175.             pos->x++;
  176.             break;
  177.     }
  178. }
  179. void deplacerCaisse(int *premiereCase, int *secondeCase)
  180. {
  181.     if (*premiereCase == CAISSE || *premiereCase == CAISSE_OK)
  182.     {
  183.         if (*secondeCase == OBJECTIF)
  184.             *secondeCase = CAISSE_OK;
  185.         else
  186.             *secondeCase = CAISSE;
  187.         if (*premiereCase == CAISSE_OK)
  188.             *premiereCase = OBJECTIF;
  189.         else
  190.             *premiereCase = VIDE;
  191.     }
  192. }


merci

Reply

Marsh Posté le 20-01-2009 à 13:08:10   

Reply

Marsh Posté le 20-01-2009 à 13:43:12    

Merci de faire des efforts sur l'orthographe. Tu as un clavier 102 touches, et non un clavier de téléphone.

 

Et merci également de nous expliquer le problème que tu rencontres. Quelle est la question ?


Message édité par Elmoricq le 20-01-2009 à 13:44:11
Reply

Marsh Posté le 20-01-2009 à 13:52:45    

Citation :

Message édité par Elmoricq le 20-01-2009 à 13:44:11


 
Mais tu fais vraiment jamais rien correctement :/


---------------
When it comes to business/legal topics, just assume almost everyone commenting has no idea what they’re taking about and have no background in these subjects because that’s how it really is. Harkonnen 8-> Elmoricq 8====>
Reply

Marsh Posté le 20-01-2009 à 13:55:23    

Dion a écrit :

Citation :

Message édité par Elmoricq le 20-01-2009 à 13:44:11

 

Mais tu fais vraiment jamais rien correctement :/

 

Je n'ai pas utilisé le pseudo "Modération" pour me cacher, mais pour signaler que cette remarque valait avertissement, ce que ne montre pas forcément mon compte.
Et je suis légèrement au courant que le nom du pseudo s'affiche dans le post édité, hein. [:petrus75]


Message édité par Elmoricq le 20-01-2009 à 13:55:46
Reply

Marsh Posté le 20-01-2009 à 13:57:06    

Mais t'as pensé à faire un post correct du premier coup quand tu utilises le compte modération ?


---------------
When it comes to business/legal topics, just assume almost everyone commenting has no idea what they’re taking about and have no background in these subjects because that’s how it really is. Harkonnen 8-> Elmoricq 8====>
Reply

Marsh Posté le 20-01-2009 à 14:00:07    

Non, et je m'en moque, le but du pseudo "Modération" est de laisser un avertissement visible.
 
Sur ce, fin du HS. Si tu souhaites poursuivre cette conversation, go sur blabla@prog. Laissons ce topic tranquille.

Reply

Marsh Posté le 20-01-2009 à 15:44:54    

Elmoricq a écrit :

Non, et je m'en moque, le but du pseudo "Modération" est de laisser un avertissement visible.
 
Sur ce, fin du HS. Si tu souhaites poursuivre cette conversation, go sur blabla@prog. Laissons ce topic tranquille.


En parlant de modération, pourquoi il n'a ni avatar ni smiley?


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 20-01-2009 à 16:25:25    

Harko il a quand meme un peu plus de cran qu'Elmoricq
 


---------------
When it comes to business/legal topics, just assume almost everyone commenting has no idea what they’re taking about and have no background in these subjects because that’s how it really is. Harkonnen 8-> Elmoricq 8====>
Reply

Marsh Posté le 20-01-2009 à 18:13:56    

bon et pour mon probleme . je voudrais savoir pourquoi la fentre se ferme automatiquement et comment resoudre le probleme

Reply

Marsh Posté le 20-01-2009 à 19:53:02    

Comme tu as bien compris ce que tu as pompé, je suppose que tu as vu de suite que l'appui sur la touche "j" provoquait l'appel de la fonction "johnnysolojouer", et que dans cette fonction, il y a une condition de sortie (lignes 32 et 33 de johnnysolo.c)
Et donc, je suppose aussi que tu as bien vérifié que la fonction "chargerNiveau" renvoyait true et pas false, condition pour que le programme continue normalement sans fermer sa fenêtre principale ?
Et je suppose aussi que tu t'es bien assuré que les ressources mentionnées de la ligne 22 à la ligne 27 sont bien présentes dans le même répertoire que ton exécutable ?

 
Spoiler :

tiens c'est marrant, je ne vois aucune fonction "chargerNiveau" dans ton source...


Message édité par Harkonnen le 20-01-2009 à 19:54:37

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 20-01-2009 à 19:53:02   

Reply

Marsh Posté le 21-01-2009 à 12:38:41    

merci pour les ninformations car il me manquer le fichier niveau.lvl indispensable sinon sa fermmer la fentre donc merci pour votre aide

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed