| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192 |
- //
- // editor.c
- // Mario Sokoban
- //
- // Created by Benoit Sida on 2014-02-16.
- // Copyright (c) 2014 Benoit Sida. All rights reserved.
- //
-
- #include <stdio.h>
- #include <stdlib.h>
- #include <SDL2/SDL.h>
- #include <SDL2_image/SDL_image.h>
- #include "constantes.h"
- #include "level.h"
-
- void editor(SDL_Window *ecran, SDL_Surface *screen)
- {
- SDL_Surface *wall = NULL, *box = NULL, *target = NULL, *mario = NULL, *draw = NULL, *boxOK = NULL, *object = NULL;
- SDL_Rect position, posStart, posPointer;
- SDL_Event event;
- int running = 1, i = 0, j = 0, leftClicOn = 0, rightClicOn = 0, curObject = WALL, continuer = 0, start = 0;
- int map[NB_BLOCS_LARGEUR][NB_BLOCS_HAUTEUR] = {0};
- wall = IMG_Load("sprites/mur.jpg");
- box = IMG_Load("sprites/caisse.jpg");
- target = IMG_Load("sprites/objectif.png");
- mario = IMG_Load("sprites/mario_bas.gif");
- draw = IMG_Load("sprites/draw.png");
- boxOK = IMG_Load("sprites/caisse_ok.jpg");
- if (loadLevel(0, 0, map) == 0) {
- exit(EXIT_FAILURE);
- }
- position.x = 0;
- position.y = 0;
- SDL_BlitSurface(draw, NULL, screen, &position);
- SDL_UpdateWindowSurface(ecran);
- while (!continuer) {
- SDL_WaitEvent(&event);
- switch(event.type)
- {
- case SDL_QUIT:
- exit(EXIT_SUCCESS);
- break;
- case SDL_KEYDOWN:
- switch(event.key.keysym.sym)
- {
- case SDLK_ESCAPE:
- running = 0;
- break;
- case SDLK_RETURN:
- continuer = 1;
- break;
- case SDLK_SPACE:
- continuer = 1;
- break;
- }
- break;
- } // Acton du joueur
- }
- while (running) {
- SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 139, 111, 71));
- 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;
-
- if (map[i][j] == MARIO) {
- start = 1;
- posStart.x = position.x;
- posStart.y = position.y;
- }
- switch(map[i][j])
- {
- case WALL:
- SDL_BlitSurface(wall, NULL, screen, &position);
- break;
- case BOX:
- SDL_BlitSurface(box, NULL, screen, &position);
- break;
- case MARIO:
- SDL_BlitSurface(mario, NULL, screen, &position);
- break;
- case TARGET:
- SDL_BlitSurface(target, NULL, screen, &position);
- break;
- case BOX_OK:
- SDL_BlitSurface(boxOK, NULL, screen, &position);
- break;
- }
- }
- } // Dessine la map
- switch (curObject) {
- case WALL:
- object = wall;
- break;
- case BOX:
- object = box;
- break;
- case MARIO:
- object = mario;
- break;
- case TARGET:
- object = target;
- break;
- case BOX_OK:
- object = boxOK;
- break;
- }
- SDL_BlitSurface(object, NULL, screen, &posPointer);
- SDL_UpdateWindowSurface(ecran);
- SDL_WaitEvent(&event);
- switch(event.type)
- {
- case SDL_QUIT:
- exit(EXIT_FAILURE);
- break;
- case SDL_KEYDOWN:
- switch(event.key.keysym.sym) {
- case SDLK_ESCAPE:
- running = 0;
- break;
- case SDLK_s:
- saveLevel(map);
- break;
- case SDLK_l:
- loadLevel(0, 0, map);
- break;
- case SDLK_1:
- curObject = WALL;
- break;
- case SDLK_2:
- curObject = BOX;
- break;
- case SDLK_3:
- curObject = TARGET;
- break;
- case SDLK_4:
- curObject = MARIO;
- break;
- case SDLK_5:
- curObject = BOX_OK;
- break;
- }
- break;
- case SDL_MOUSEBUTTONDOWN:
- if (event.button.button == SDL_BUTTON_LEFT)
- {
- if (curObject == MARIO) {
- map[posStart.x/TAILLE_BLOC][posStart.y/TAILLE_BLOC] = VIDE;
- start = 0;
- }
- map[event.button.x / TAILLE_BLOC][event.button.y / TAILLE_BLOC] = curObject;
- leftClicOn = 1;
- }
- else if (event.button.button == SDL_BUTTON_RIGHT)
- {
- map[event.button.x / TAILLE_BLOC][event.button.y /TAILLE_BLOC] = VIDE;
- rightClicOn = 1;
- }
- break;
- case SDL_MOUSEBUTTONUP:
- if (event.button.button == SDL_BUTTON_LEFT)
- leftClicOn = 0;
- else if (event.button.button == SDL_BUTTON_RIGHT)
- rightClicOn = 0;
- break;
- case SDL_MOUSEMOTION:
- if (leftClicOn)
- {
- if (curObject == MARIO) {
- break;
- }
- map[event.motion.x / TAILLE_BLOC][event.motion.y / TAILLE_BLOC] = curObject;
- }
- else if (rightClicOn) //
- {
- map[event.motion.x / TAILLE_BLOC][event.motion.y / TAILLE_BLOC] = VIDE;
- }
- else {
- posPointer.x = event.motion.x;
- posPointer.y = event.motion.y;
- break;
- }
- break;
- } // Acton du joueur
- } // Boucle principale
- SDL_FreeSurface(wall);
- SDL_FreeSurface(box);
- SDL_FreeSurface(target);
- SDL_FreeSurface(mario); // Libère la mémoire
- }
|