2025-11-30 15:40:46 +01:00
|
|
|
/* src/main.c
|
|
|
|
|
* Point d'entrée du programme Taquin.
|
|
|
|
|
* Gère la boucle principale des événements et la transition de vue (Menu -> Jeu).
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
#include "menu_view.h"
|
|
|
|
|
#include <graph.h> /* La bibliothèque IUT */
|
|
|
|
|
#include <stdlib.h> /* Pour EXIT_SUCCESS */
|
|
|
|
|
#include <stdio.h> /* Pour printf */
|
|
|
|
|
|
|
|
|
|
/* Constantes de la fenêtre (doivent être disponibles partout) */
|
|
|
|
|
#define WINDOW_WIDTH 800
|
|
|
|
|
#define WINDOW_HEIGHT 600
|
|
|
|
|
|
|
|
|
|
/* Temps de rafraîchissement (pour économiser le CPU) */
|
|
|
|
|
#define REFRESH_CYCLE 50000L /* 50 ms */
|
|
|
|
|
|
|
|
|
|
int main(void)
|
|
|
|
|
{
|
|
|
|
|
menu_state_t menu_state;
|
|
|
|
|
unsigned long next_update;
|
|
|
|
|
|
|
|
|
|
/* 1. Initialisation de l'environnement IUT */
|
|
|
|
|
InitialiserGraphique();
|
|
|
|
|
CreerFenetre(10, 10, WINDOW_WIDTH, WINDOW_HEIGHT);
|
|
|
|
|
|
|
|
|
|
menu_init(&menu_state);
|
|
|
|
|
|
|
|
|
|
next_update = Microsecondes() + REFRESH_CYCLE;
|
|
|
|
|
|
|
|
|
|
/* 2. Boucle du Menu (tant que le joueur n'a pas validé ou quitté) */
|
|
|
|
|
while (menu_state.ready_to_play == 0)
|
|
|
|
|
{
|
|
|
|
|
/* Gestion du temps et Rendu (dessin) */
|
|
|
|
|
if (Microsecondes() > next_update)
|
|
|
|
|
{
|
|
|
|
|
menu_render(&menu_state);
|
|
|
|
|
|
|
|
|
|
/* FORCER L'AFFICHAGE : Copier l'écran 0 vers l'écran 0
|
|
|
|
|
(Technique souvent nécessaire avec XLib pour forcer le rafraîchissement) */
|
|
|
|
|
CopierZone(0, 0, 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT, 0, 0);
|
|
|
|
|
|
|
|
|
|
next_update = Microsecondes() + REFRESH_CYCLE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Gestion des événements Souris */
|
|
|
|
|
if (SourisCliquee())
|
|
|
|
|
{
|
|
|
|
|
/* _X et _Y sont mis à jour par SourisCliquee() */
|
|
|
|
|
menu_handle_mouse_click(&menu_state);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Gestion des événements Clavier */
|
|
|
|
|
menu_handle_key(&menu_state);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* 3. Sortie */
|
|
|
|
|
if (menu_state.ready_to_play == 1) {
|
|
|
|
|
printf("Configuration valide. Image %d choisie, grille %d x %d. Lancement du jeu...\n",
|
|
|
|
|
menu_state.selected_image + 1, menu_state.rows, menu_state.cols);
|
|
|
|
|
|
|
|
|
|
/* TODO: Appeler game_init, game_shuffle et la boucle de jeu (GRANDE PARTIE 2) */
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
FermerGraphique();
|
|
|
|
|
return EXIT_SUCCESS;
|
|
|
|
|
}
|