All pastes #1328645 Raw Edit

editeur.c

public cpp v1 · immutable
#1328645 ·published 2009-02-06 03:15 UTC
rendered paste body
/*editeur.c---------Par mateo21, pour Le Site du Zér0 (www.siteduzero.com)Rôle : gestion de l'éditeur de niveaux.*/#include <stdio.h>#include <SDL/SDL.h>#include <SDL/SDL_image.h>#include "include/constantes.h"#include "include/editeur.h"#include "include/fichiers.h"#include "include/jeu.h"void editeur(SDL_Surface* ecran){    SDL_Surface *mur = NULL, *caisse = NULL, *objectif = NULL, *mario = NULL;    SDL_Rect position;    SDL_Event event;    int continuer = 1, clicGaucheEnCours = 0, clicDroitEnCours = 0;    int objetActuel = MUR, i = 0, j = 0;    int carte[NB_BLOCS_LARGEUR][NaB_BLOCS_HAUTEUR] = {0};    // Chargement des objets et du niveau    mur = IMG_Load("img/mur.jpg");    caisse = IMG_Load("img/caisse.jpg");    objectif = IMG_Load("img/objectif.png");    mario = IMG_Load("img/mario_bas.gif");    if (!chargerNiveau(carte))        exit(EXIT_FAILURE);    // Boucle infinie de l'éditeur    while (continuer)    {        SDL_WaitEvent(&event);        switch(event.type)        {            case SDL_QUIT:                continuer = 0;                break;            case SDL_MOUSEBUTTONDOWN:                if (event.button.button == SDL_BUTTON_LEFT)                {                    // On met l'objet actuellement choisi (mur, caisse...) à l'endroit du clic                    carte[event.button.x / TAILLE_BLOC][event.button.y / TAILLE_BLOC] = objetActuel;                    clicGaucheEnCours = 1; // On active un booléen pour retenir qu'un bouton est enfoncé                }                else if (event.button.button == SDL_BUTTON_RIGHT) // Le clic droit sert à effacer                {                    carte[event.button.x / TAILLE_BLOC][event.button.y /TAILLE_BLOC] = VIDE;                    clicDroitEnCours = 1;                }                break;            case SDL_MOUSEBUTTONUP: // On désactive le booléen qui disait qu'un bouton était enfoncé                if (event.button.button == SDL_BUTTON_LEFT)                    clicGaucheEnCours = 0;                else if (event.button.button == SDL_BUTTON_RIGHT)                    clicDroitEnCours = 0;                break;            case SDL_MOUSEMOTION:                if (clicGaucheEnCours) // Si on déplace la souris et que le bouton gauche de la souris est enfoncé                {                    carte[event.motion.x / TAILLE_BLOC][event.motion.y / TAILLE_BLOC] = objetActuel;                }                else if (clicDroitEnCours) // Pareil pour le bouton droit de la souris                {                    carte[event.motion.x / TAILLE_BLOC][event.motion.y / TAILLE_BLOC] = VIDE;                }                break;            case SDL_KEYDOWN:                switch(event.key.keysym.sym)                {                    case SDLK_ESCAPE:                        continuer = 0;						goto bye;                        break;                    case SDLK_s:                        sauvegarderNiveau(carte);                        break;                    case SDLK_c:                        chargerNiveau(carte);                        break;                    case SDLK_KP1:                        objetActuel = MUR;                        break;                    case SDLK_KP2:                        objetActuel = CAISSE;                        break;                    case SDLK_KP3:                        objetActuel = OBJECTIF;                        break;                    case SDLK_KP4:                        objetActuel = MARIO;                        break;                }                break;        }        // Effacement de l'écran        SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));        // Placement des objets à l'écran        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 OBJECTIF:                        SDL_BlitSurface(objectif, NULL, ecran, &position);                        break;                    case MARIO:                        SDL_BlitSurface(mario, NULL, ecran, &position);                        break;                }            }        }        // Mise à jour de l'écran        SDL_Flip(ecran);    }bye:    SDL_FreeSurface(mur);    SDL_FreeSurface(caisse);    SDL_FreeSurface(objectif);    SDL_FreeSurface(mario);}