Création d'un jeu 2D en SDL
Fermé
Trager
Messages postés
299
Date d'inscription
samedi 8 septembre 2012
Statut
Membre
Dernière intervention
23 juillet 2017
-
4 mars 2015 à 13:03
Trager Messages postés 299 Date d'inscription samedi 8 septembre 2012 Statut Membre Dernière intervention 23 juillet 2017 - 5 mars 2015 à 20:07
Trager Messages postés 299 Date d'inscription samedi 8 septembre 2012 Statut Membre Dernière intervention 23 juillet 2017 - 5 mars 2015 à 20:07
A voir également:
- Création d'un jeu 2D en SDL
- 94 jeu - Télécharger - Puzzle & Réflexion
- Creation compte gmail - Guide
- Création compte google - Guide
- Media creation tool - Télécharger - Systèmes d'exploitation
- Création groupe whatsapp - Guide
3 réponses
Trager
Messages postés
299
Date d'inscription
samedi 8 septembre 2012
Statut
Membre
Dernière intervention
23 juillet 2017
4 mars 2015 à 16:18
4 mars 2015 à 16:18
up?
dsy73
Messages postés
9252
Date d'inscription
dimanche 22 août 2010
Statut
Contributeur
Dernière intervention
23 octobre 2020
2 482
5 mars 2015 à 05:35
5 mars 2015 à 05:35
Salut
"ça ne marche pas" : tu devrais donner plus de détails.
"ça ne marche pas" : tu devrais donner plus de détails.
Trager
Messages postés
299
Date d'inscription
samedi 8 septembre 2012
Statut
Membre
Dernière intervention
23 juillet 2017
5 mars 2015 à 20:07
5 mars 2015 à 20:07
J'ai résolu les problèmes précédant et maintenant j'aimerais créer un tableau pour afficher plusieurs missiles à la fois, leur donner une vitesse vy et permettre l'apparition d'un nouveau missile toutes les deux secondes mais je ne vois pas comment y parvenir, où le placer, comment le définir... Auriez-vous des exemples, des conseils ou autres pour m'aider?
merci d'avance
mon code actuel:
merci d'avance
mon code actuel:
#include <stdlib.h>
#include <stdio.h>
#include <SDL.h>
#include <time.h>
#define HEIGHT 600 // Hauteur
#define WIDTH 400 // Largeur
enum {GAUCHE, DROITE};
SDL_Event event;
SDL_Surface *ecran = NULL, *menu = NULL, *perso[2] = {NULL}, *persoActuel = NULL, *missile = NULL; // 2 surfaces pour 2 directions du perso
SDL_Rect positionMenu, positionJoueur, positionMissile, positionBouton1;
int continuer = 1;
int jouer = 1;
int nombreMissiles;
int tirage()
{
int i;
i=rand()%350;
return i;
}
void Init()
{
SDL_Init(SDL_INIT_VIDEO);
srand(time(NULL));
SDL_WM_SetIcon(SDL_LoadBMP("sdl_icone.bmp"), NULL);
SDL_WM_SetCaption("Projet-Jeu", NULL);
ecran = SDL_SetVideoMode(WIDTH, HEIGHT, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
menu = SDL_LoadBMP("menu.bmp");
perso[DROITE] = SDL_LoadBMP("perso.bmp");// Chargement des sprites (décors, personnage...)
perso[GAUCHE] = SDL_LoadBMP("perso2.bmp");
missile = SDL_LoadBMP("missile.bmp");
persoActuel = perso[DROITE];
positionBouton1.x = 97;
positionBouton1.y = 262;
positionMenu.x = 0;
positionMenu.y = 0;
positionJoueur.x = 180;
positionJoueur.y = 500;
// Activation de la répétition des touches
SDL_EnableKeyRepeat(10, 10);
}
void missiles()
{
positionMissile.x = tirage();
positionMissile.y = 0;
}
void Clic()
{
switch(jouer)
{
case 1:
{
if (event.button.button == SDL_BUTTON_LEFT)
if(event.button.x > positionBouton1.x && event.button.x < positionBouton1.x + 200 && event.button.y > positionBouton1.y && event.button.y < positionBouton1.y + 80) // Test des coordonnées de la souris pour savoir si ellessont au meme emplacement que le bouton 1
{
jouer=0;
}
}
break;
}
}
void switchEvent()
{
switch(event.type)
{
case SDL_QUIT:
continuer = 0;
break;
case SDL_MOUSEBUTTONUP:
Clic();
missiles();
break;
case SDL_KEYDOWN:
switch(event.key.keysym.sym)
{
case SDLK_ESCAPE:
jouer = 1;
break;
case SDLK_RIGHT:
persoActuel = perso[DROITE];
if (positionJoueur.x > 305)
break;
positionJoueur.x++;
break;
case SDLK_LEFT:
persoActuel = perso[GAUCHE];
positionJoueur.x--;
default:
break;
}
break;
}
}
void Actualisation()
{
}
void Affichage()
{
/* On efface l'écran */
SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
SDL_BlitSurface(menu, NULL, ecran, &positionMenu);
if (jouer==0)
{
SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
/* On place notre perso à sa nouvelle position */
SDL_BlitSurface(persoActuel, NULL, ecran, &positionJoueur);
SDL_BlitSurface(missile, NULL, ecran, &positionMissile);
}
if(continuer==0)
{
jouer = 1;
SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
SDL_BlitSurface(menu, NULL, ecran, &positionMenu);
}
/* On met à jour l'affichage */
SDL_Flip(ecran);
}
void GesFrame()
{
}
void Fin()
{
SDL_FreeSurface(menu);
SDL_Quit();
}
int main(int argc, char *argv[])
{
Init();
while (continuer)
{
while (SDL_PollEvent(&event))
{
switchEvent(); // Traitement des évènements
}
Actualisation(); // Mise à jour des positions en fonction du traitement des évènements
Affichage(); // Blit puis Flip
GesFrame(); // Gestion du nombre d'affichages / seconde
}
Fin(); // Free, Quit ...
return EXIT_SUCCESS;
}