Bloqué programmation en C++ Space invaders.

Fermé
Utilisateur anonyme - Modifié par gabrielpsp le 6/04/2011 à 16:30
 Utilisateur anonyme - 14 avril 2011 à 16:20
Bonjour,


j'essai de codé un jeu simple en 8 bits, style Space Invaders en version (pour l'instant), extrement simplifié.
J'ai crée trois fichiers en gros : le main.cpp, le constantes.h et le jeu.h, plus toutes les bibliotheque dans mon fichier principale.
Je travail sur Notepad++ et je compile avec CodeBlocks.
Dans le main.cpp, j'ai écrit pour effectuer les initialisations de la SDL, de donner un titre à la fenêtre ainsi qu'une icône. De donner un menu avec une image. (exit : appuyé sur echap (sa sa marche dans mon code) et play, appuyé sur entrer. (sa ca ne marche pas car j'ai encore rien dans mon fichier jeu) Ce fichier sert uniquement a sa.
Le seul truc, c'est que je sais pas vraiment quoi faire maintenant !!!
De plus, comment faire en sorte que lorsque j'appuie sur entrer dans le menu, je commence a jouer (et donc passer du fichier main.cpp à jeu.h ?)

Voici mon code :

#ifdef __cplusplus
#include <cstdlib>
#else
#include <stdlib.h>
#endif
#ifdef __APPLE__
#include <SDL/SDL.h>
#else
#include <SDL.h>
#endif
#include <stdlib.h>
#include <stdio.h>



#include "constantes.h"
#include "jeu.h"



int main(int argc, char *argv[])
{
SDL_Surface *ecran = NULL, *menu = NULL;
SDL_Rect positionMenu;
SDL_Event event;

int continuer = 1;

SDL_Init(SDL_INIT_VIDEO);

SDL_WM_SetIcon(SDL_LoadBMP("ship2.bmp"), NULL); // Icone du jeu (fenetre uniquement)

ecran = SDL_SetVideoMode(640, 400, 32, SDL_HWSURFACE | SDL_DOUBLEBUF | SDL_RESIZABLE);

SDL_WM_SetCaption("SPACE INVADERS", NULL);

menu = SDL_LoadBMP("menu.bmp");
positionMenu.x = 0;
positionMenu.y = 0;

SDL_ShowCursor(SDL_DISABLE);
SDL_EnableKeyRepeat(7, 7); /* Activation de la répétition des touches */


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: // Veut arrêter le jeu
continuer = 0;
break;

/* ajouter fonction pour pouvoir jouer, touche 1 par exemple
ex : case SDLK_KP1: // Demande à jouer
jouer(ecran);
break; */

}
break;
}

// Effacement de l'écran
SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 0, 0, 0));
SDL_BlitSurface(menu, NULL, ecran, &positionMenu);
SDL_Flip(ecran);
}

return EXIT_SUCCESS;
}
A voir également:

1 réponse

Utilisateur anonyme
14 avril 2011 à 16:20
Bonjour,
pour que ton jeu réagisse lorsque tu appuieras sur entrée, il faut mettre la touche
SDLK_RETURN qui correspond à entrée ou sur le keypad SDLK_KP_ENTER
après il te reste à créer la fonction jouer() (je l'aurais plutôt créée dans jeu.c et non jeu.h, après chacun sa façon de faire)

ça devrait te donner un code comme celui-ci pour le main.cpp:

#ifdef __cplusplus 
#include <cstdlib> 
#else 
#include <stdlib.h> 
#endif 
#ifdef __APPLE__ 
#include <SDL/SDL.h> 
#else 
#include <SDL.h> 
#endif 
#include <stdlib.h> 
#include <stdio.h> 



#include "constantes.h" 
#include "jeu.h" 



int main(int argc, char *argv[]) 
{ 
SDL_Surface *ecran = NULL, *menu = NULL; 
SDL_Rect positionMenu; 
SDL_Event event; 

int continuer = 1; 

SDL_Init(SDL_INIT_VIDEO); 

SDL_WM_SetIcon(SDL_LoadBMP("ship2.bmp"), NULL); // Icone du jeu (fenetre uniquement) 

ecran = SDL_SetVideoMode(640, 400, 32, SDL_HWSURFACE | SDL_DOUBLEBUF | SDL_RESIZABLE); 

SDL_WM_SetCaption("SPACE INVADERS", NULL); 

menu = SDL_LoadBMP("menu.bmp"); 
positionMenu.x = 0; 
positionMenu.y = 0; 

SDL_ShowCursor(SDL_DISABLE); 
SDL_EnableKeyRepeat(7, 7); /* Activation de la répétition des touches */ 


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: // Veut arrêter le jeu 
continuer = 0; 
break; 


case SDLK_KP_ENTER: // Demande à jouer 
jouer(ecran); 
break;

case SDLK_RETURN: // Demande à jouer 
jouer(ecran); 
break;

} 
break; 
} 

// Effacement de l'écran 
SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 0, 0, 0)); 
SDL_BlitSurface(menu, NULL, ecran, &positionMenu); 
SDL_Flip(ecran); 
} 

SDL_FreeSurface(ecran);
SDL_FreeSurface(menu);
SDL_Quit();

exit (EXIT_SUCCESS); 
}


bonne chance, si tu rencontres encore un problème pour ton code, envoie moi un message
0