Files
Sokoban/script/main.c
2025-01-08 16:14:28 +01:00

166 lines
5.2 KiB
C

/**
* \file main.c
*
* Le main permet de stocker et de lancer les fonctions permetant de lancer le jeu.
*/
#include "../include/display.h"
#include "../include/function.h"
#include "../include/read.h"
#include <SDL2/SDL.h>
#include <SDL2/SDL_image.h>
#include <SDL2/SDL_render.h>
#include <SDL2/SDL_mixer.h>
#include <time.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#define SIZE_PLAY 20
#define SIZE_MENU 200
// Définir une seed globale
unsigned int seed = 0;
int main ()
{
seed = (unsigned int)time(NULL);
dis display_user;
display_user.size_menu = SIZE_MENU;
display_user.size_box = SIZE_PLAY;
display_user.size_window = getMaxSize (display_user);
initSDL (&display_user);
vect *playerPos = (vect *)malloc (sizeof (vect));
vect *targets = {0};
int nbr_targets;
char **tab2d = creatArea2D (SIZE_PLAY, SIZE_PLAY);
score score_user = {0, 0, 0,0};
int num_fichier=0;
vect dim = {SIZE_PLAY, SIZE_PLAY};
int output = -3;
vect dim_menu = {0, 0};
vect pos = {4, 1};
char**menu = generatorMenu("maps", &dim_menu, &pos);
backgroundDisplay(&display_user,0);
vect null = {0, 0};
//output = inGameLoop (menu, &dim_menu, &pos, &null , 1,
// &display_user, &score_user, true);
nullScore(&score_user);
SDL_RenderClear(display_user.renderer);
//mixeur audio
// Initialisation de SDL_mixer
Mix_Init(MIX_INIT_MP3);
// Ouverture du mixeur audio
Mix_OpenAudio(22050, MIX_DEFAULT_FORMAT, 2, 4096);
// Charger une musique
Mix_Music* music_menu = Mix_LoadMUS("sfx/musicMenu.mp3");
Mix_Music* music_game = Mix_LoadMUS("sfx/levelPlay.mp3");
Mix_Music* music_editor = Mix_LoadMUS("sfx/editor.mp3");
Mix_Volume(-1,MIX_MAX_VOLUME); // Définit le volume maximal pour tous les canaux
Mix_VolumeMusic(MIX_MAX_VOLUME / 2);
// Loop pour le jeu entier menu et les jeux.
output = -3;
while(output != 0)
{
SDL_RenderClear(display_user.renderer);
if(output == -1)
{
Mix_PlayMusic(music_menu, -1);
backgroundDisplay(&display_user,0);
menu = generatorMenu("maps", &dim_menu, &pos);
pos.x = 4; pos.y = 1;
output = inGameLoop(menu, &dim_menu, &pos, &null, 1, &display_user, &score_user, true);
nullScore(&score_user);
}
else if(output == -2)
{
Mix_PlayMusic(music_editor, -1);
backgroundDisplay(&display_user,2);
output = inEditorLoop(tab2d, &dim, playerPos, &display_user,&score_user ,num_fichier);
}
else if(output == -3)
{
Mix_PlayMusic(music_menu, -1);
backgroundDisplay(&display_user,3);
output = titleScreen(&display_user);
}
else
{
Mix_PlayMusic(music_game, -1);
backgroundDisplay(&display_user,1);
score_user.before = time(NULL);
char txt[30] = "";
if(output <= 3)
{
snprintf(txt, 30, "maps/original_%d.txt", output);
}
else
{
snprintf(txt, 30, "maps/custom_%d.txt", output - 4);
}
if(access(txt, F_OK)==0)
{
if (targets != NULL) free(targets);
if (tab2d != NULL) free2D(tab2d, SIZE_PLAY);
tab2d = creatArea2D(SIZE_PLAY, SIZE_PLAY);
targets = fileToTab2D(txt, tab2d, SIZE_PLAY, playerPos, &nbr_targets);
output = inGameLoop(tab2d, &dim, playerPos, targets, nbr_targets, &display_user, &score_user, false);
SDL_RenderClear(display_user.renderer);
score_user.after = time(NULL);
if(output != -1000) winOrLoseLoop(&display_user, &score_user, output==1);
output = -1;
}
else{
char path[256];
snprintf(path, sizeof(path), "maps/custom_%d.txt", output-4);
num_fichier = output-4;
FILE *src = fopen("maps/viergemap.txt", "r");
FILE *file = fopen(path, "w");
char tmp[1024]; // Tampon pour lire le contenu
size_t bytesRead;
// Lire le contenu du fichier source et l'écrire dans le fichier destination
while ((bytesRead = fread(tmp, 1, sizeof(tmp), src)) > 0) {
fwrite(tmp, 1, bytesRead, file);
}
fclose(src);
fclose(file);
tab2d = creatArea2D(SIZE_PLAY, SIZE_PLAY);
targets = fileToTab2D(txt, tab2d, SIZE_PLAY, playerPos, &nbr_targets);
output = -2;
}
}
}
//screenDisplay(tab2d, SIZE_PLAY, SIZE_PLAY);
SDL_DestroyWindow (display_user.window);
SDL_DestroyRenderer (display_user.renderer);
if (tab2d != NULL)free2D (tab2d, SIZE_PLAY);
if (playerPos != NULL)free (playerPos);
if (targets != NULL)free (targets);
Mix_FreeMusic(music_editor);
Mix_FreeMusic(music_game);
Mix_FreeMusic(music_menu);
Mix_CloseAudio();
SDL_Quit ();
return 0;
}