| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- //
- // menu.c
- // Mario Sokoban
- //
- // Created by Benoit Sida on 2014-02-15.
- // 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 "game.h"
- #include "level.h"
-
-
- int menu(SDL_Window *ecran, SDL_Surface *screen)
- {
- int choice = 0, running = 1, i = 0, j = 0, target_r = 0;
- int map[NB_BLOCS_LARGEUR][NB_BLOCS_HAUTEUR] = {0};
- SDL_Event event;
- SDL_Surface *mario[4] = {NULL};
- SDL_Surface *wall = NULL, *marioActuel = NULL, *box = NULL, *target = NULL, *boxOK = NULL, *menu = NULL;
- SDL_Rect position, posMario;
- wall = IMG_Load("sprites/mur.jpg");
- box = IMG_Load("sprites/caisse.jpg");
- boxOK = IMG_Load("sprites/caisse_ok.jpg");
- target = IMG_Load("sprites/objectif.png");
- menu = IMG_Load("sprites/menu.png");
- mario[HAUT] = IMG_Load("sprites/mario_haut.gif");
- mario[BAS] = IMG_Load("sprites/mario_bas.gif");
- mario[GAUCHE] = IMG_Load("sprites/mario_gauche.gif");
- mario[DROITE] = IMG_Load("sprites/mario_droite.gif");
- marioActuel = mario[BAS];
- if (loadLevel(0, 0, map) == 0) {
- exit(EXIT_FAILURE);
- }
- for (i = 0 ; i < NB_BLOCS_LARGEUR ; i++)
- {
- for (j = 0 ; j < NB_BLOCS_HAUTEUR ; j++)
- {
- if (map[i][j] == MARIO)
- {
- posMario.x = i;
- posMario.y = j;
- map[i][j] = VIDE;
- }
- }
- }
- while (running) {
- SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 139, 111, 71));
- target_r = 0;
- 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(map[i][j])
- {
- case WALL:
- SDL_BlitSurface(wall, NULL, screen, &position);
- break;
- case BOX:
- SDL_BlitSurface(box, NULL, screen, &position);
- break;
- case BOX_OK:
- SDL_BlitSurface(boxOK, NULL, screen, &position);
- break;
- case TARGET:
- SDL_BlitSurface(target, NULL, screen, &position);
- target_r = 1;
- break;
- }
- }
- } // Dessine la carte
- position.x = 0;
- position.y = 0;
- SDL_BlitSurface(menu, NULL, screen, &position);
- position.x = posMario.x * TAILLE_BLOC;
- position.y = posMario.y * TAILLE_BLOC;
- SDL_BlitSurface(marioActuel, NULL, screen, &position); // Place le joueur
- SDL_UpdateWindowSurface(ecran);
- if (!target_r) {
- choice = 1;
- running = 0; // Test de victoire
- }
- SDL_WaitEvent(&event);
- switch (event.type){
- case SDL_QUIT:
- exit(EXIT_SUCCESS);
- break;
- case SDL_KEYDOWN:
- switch (event.key.keysym.sym) {
- case SDLK_ESCAPE:
- exit(EXIT_SUCCESS);
- break;
- case SDLK_1:
- choice = 1;
- running = 0;
- break;
- case SDLK_2:
- choice = 2;
- running = 0;
- break;
- case SDLK_UP:
- marioActuel = mario[HAUT];
- mooveMario(map, &posMario, HAUT);
- break;
- case SDLK_DOWN:
- marioActuel = mario[BAS];
- mooveMario(map, &posMario, BAS);
- break;
- case SDLK_RIGHT:
- marioActuel = mario[DROITE];
- mooveMario(map, &posMario, DROITE);
- break;
- case SDLK_LEFT:
- marioActuel = mario[GAUCHE];
- mooveMario(map, &posMario, GAUCHE);
- break;
- }
- }
- } // Wait for action
- SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 139, 111, 71));
- SDL_UpdateWindowSurface(ecran);
- SDL_FreeSurface(wall);
- SDL_FreeSurface(box);
- SDL_FreeSurface(boxOK);
- SDL_FreeSurface(target);
- for (i = 0 ; i < 4 ; i++)
- SDL_FreeSurface(mario[i]); // Libère la mémoire
- return choice;
- }
|