Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1249 connectés 

  FORUM HardWare.fr
  Programmation
  C

  sa ferme la fentre automatiquement

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

sa ferme la fentre automatiquement

n°1840408
max1395
Posté le 20-01-2009 à 13:08:10  profilanswer
 

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

mood
Publicité
Posté le 20-01-2009 à 13:08:10  profilanswer
 

n°1840422
Modération
Posté le 20-01-2009 à 13:43:12  answer
 

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
n°1840428
Dion
Acceuil
Posté le 20-01-2009 à 13:52:45  profilanswer
 

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====>
n°1840431
Elmoricq
Modérateur
Posté le 20-01-2009 à 13:55:23  profilanswer
 

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
n°1840434
Dion
Acceuil
Posté le 20-01-2009 à 13:57:06  profilanswer
 

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====>
n°1840440
Elmoricq
Modérateur
Posté le 20-01-2009 à 14:00:07  profilanswer
 

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.

n°1840553
masklinn
í dag viðrar vel til loftárása
Posté le 20-01-2009 à 15:44:54  profilanswer
 

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
n°1840596
Dion
Acceuil
Posté le 20-01-2009 à 16:25:25  profilanswer
 

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====>
n°1840652
max1395
Posté le 20-01-2009 à 18:13:56  profilanswer
 

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

n°1840694
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 20-01-2009 à 19:53:02  profilanswer
 

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)
mood
Publicité
Posté le 20-01-2009 à 19:53:02  profilanswer
 

n°1841056
max1395
Posté le 21-01-2009 à 12:38:41  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  sa ferme la fentre automatiquement

 

Sujets relatifs
PHP&SQL : Cryptage MD5 Joomla & Page loginRester au bas de la fentre IE avec VBS
Decompresser automatiquement les fichiers qui l'ont pas déjà été(réglé)afficher une grande image en vraie taille automatiquement
[C#] Excel : Verification classeur fermécode::blocks, fentre d'erreurs disparue
remplir automatiquement des formulairesGénérer un numéro d'une certaine forme automatiquement VBA
changer la taille du heap automatiquement[VBA] Boîte qui se ferme toute seule au bout de 5 s.
Plus de sujets relatifs à : sa ferme la fentre automatiquement


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR