-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.c
119 lines (84 loc) · 2.74 KB
/
main.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#define TARGET_FPS 60 // nombre de fps visé (defaut : 60)
#define DEVMODE false // active le mode développeur (console + log)
#include <ncurses.h>
#include <stdbool.h>
#include <stdlib.h>
#include <time.h>
#include "affichage/affichage.h"
#include "affichage/console.h"
#include "gameplay/gameplay.h"
#include "map/map.h"
#include "moteur/frames.h"
#include "moteur/logger.h"
#include "moteur/input.h"
#include "gameplay/joueur.h"
bool enCours = true; // Cette variable est vraie tant que le jeu est en marche
int x_fin;
/* Point d'entrée du programme */
int main() {
// Initialise la bibliothèque Ncurses avec les paramètres que l'on souhaite
initCurses();
// Le menu est affiché jusqu'à que le joueur presse une touche
afficherMenu();
getch();
// On débute l'initialisation du jeu en effaçant le menu
clear();
// Initialise l'affichage du jeu et la console
if(DEVMODE) {
initConsole();
initFichierLog();
}
initAffichageJeu();
// Initialise le compteur de frames
initFrames(TARGET_FPS);
// Initialise la map
map instanceMap;
instanceMap = chargementMap();
// Initialise le joueur
int spawn_x = 0;
int spawn_y = 0;
x_fin = posFin(instanceMap);
posSpawnJoueur(&spawn_x, &spawn_y, instanceMap);
defSpawn(spawn_x, spawn_y);
joueur j = initJoueurSpawn();
// Transforme getch en appel non-bloquant
nodelay(stdscr, true);
// Autorise l'utilisation des flèches du clavier
keypad(stdscr, true);
// Variable compteur (compte le temps nécessaire au calculs et à l'affichage)
clock_t start, end;
/* Boucle principale du programme :
- Physique
- Affichage
- Detection victoire
- Limitation des FPS
*/
while (enCours) {
start = clock(); // compteur de début
actualisationMouvements(&j, instanceMap);
affichageJeu(j, instanceMap);
// Envoi puis traitement de l'entrée utilisateur
inputControle(getch(), &enCours, &j, instanceMap);
if (j.position.x >= x_fin) {
victoireJoueur(&j, instanceMap);
}
end = clock(); // compteur de fin
napms(ecartFrameMs - 1000 * (float)(end - start) / CLOCKS_PER_SEC); // attends le temps entre deux frames (moins le temps nécessaire au traitement)
frameSuivante();
}
// Arret du jeu
if(DEVMODE) {
libererMemoireConsole();
fermerFichierLog();
}
libererMemoireAffichage();
libererMemoireMap(instanceMap);
endwin();
return 0;
}
/* Fonction à appeler pour mettre fin au programme */
void arretJeu() {
afficherMessageConsole("Arrêt du jeu...", INFOMSG);
enCours = false;
return;
}