-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.c
123 lines (109 loc) · 3.45 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
120
121
122
123
/*
** EPITECH PROJECT, 2023
** bsmyhunter
** File description:
** main.c
*/
#include "./include/csfml.h"
#include "./include/game.h"
static void sort_text_list(game_t *game)
{
text_list_t *previous_text_list = NULL;
text_list_t *current_text_list = game->display->text_list;
text_list_t *next_text_list = NULL;
while (current_text_list != NULL) {
next_text_list = current_text_list->next;
current_text_list->next = previous_text_list;
previous_text_list = current_text_list;
current_text_list = next_text_list;
}
game->display->text_list = previous_text_list;
}
static void sort_sprite_list(game_t *game)
{
sprite_list_t *previous_sprite_list = NULL;
sprite_list_t *current_sprite_list = game->display->sprite_list;
sprite_list_t *next_sprite_list = NULL;
while (current_sprite_list != NULL) {
next_sprite_list = current_sprite_list->next;
current_sprite_list->next = previous_sprite_list;
previous_sprite_list = current_sprite_list;
current_sprite_list = next_sprite_list;
}
game->display->sprite_list = previous_sprite_list;
}
void sort_state_element(game_t *game)
{
sort_sprite_list(game);
sort_text_list(game);
}
static void on_a_button(game_t *game)
{
if (game->state == MENU && game->state_changed == 0)
on_a_menu_button(game);
if (game->state == PAUSE && game->state_changed == 0)
on_a_pause_button(game);
if (game->state == SETTING && game->state_changed == 0)
on_a_setting_button(game);
if (game->state == GAME_OVER && game->state_changed == 0)
on_a_game_over_button(game);
}
static void update_window(game_t *game)
{
void (*display_state[])(game_t *) = {&display_menu, &display_in_game,
&display_pause, &display_setting, &display_game_over};
if (game->state_changed == 1) {
game->on_button = 0;
game->button_id = 0;
destroy_all_texts(game, game->display->text_list);
destroy_all_sprites(game, game->display->sprite_list);
display_state[game->state](game);
sort_state_element(game);
game->state_changed = 0;
}
}
static void display_window(game_t *game)
{
sfRenderWindow_clear(game->window, sfBlack);
update_window(game);
while (game->state_changed == 0 &&
sfRenderWindow_pollEvent(game->window, &game->event)) {
analyse_events(game, game->event);
}
on_a_button(game);
sfRenderWindow_drawSprite(game->window, game->display->background, NULL);
if (game->state == IN_GAME && game->state_changed == 0)
update_game(game);
display_sprites(game);
display_texts(game);
sfRenderWindow_display(game->window);
}
int init_game(int eric_mode)
{
game_t *game = create_game(eric_mode);
if (!game->window) {
return EXIT_FAILURE;
}
srand(time(NULL));
while (sfRenderWindow_isOpen(game->window)) {
display_window(game);
}
destroy_game(game);
return EXIT_SUCCESS;
}
int main(int argc, char **argv)
{
int eric_mode = 0;
if (argc != 1) {
if (my_strcmp(argv[1], "-h") == 0 || my_strcmp(argv[1], "--help") == 0)
return show_help();
if (my_strcmp(argv[1], "-e") == 0 || my_strcmp(argv[1], "--eric") == 0)
eric_mode = 1;
else {
my_putstr_error("my_hunter: invalid option\n"
"Try './my_hunter --help' for more information.\n");
return 84;
}
}
return init_game(eric_mode);
}