6 #include "./platforms.h"
8 #define SCREEN_WIDTH 800
9 #define SCREEN_HEIGHT 600
11 #define GROUND_LEVEL 200.0f
13 int main(int argc, char *argv[])
15 (void) argc; /* unused */
16 (void) argv; /* unused */
20 if (SDL_Init(SDL_INIT_EVERYTHING) < 0) {
21 fprintf(stderr, "Could not initialize SDL: %s", SDL_GetError());
26 SDL_Window *window = SDL_CreateWindow("Nothing",
28 SCREEN_WIDTH, SCREEN_HEIGHT,
31 fprintf(stderr, "Could not create SDL window: %s", SDL_GetError());
33 goto sdl_create_window_fail;
36 SDL_Renderer *renderer = SDL_CreateRenderer(window, -1,
37 SDL_RENDERER_ACCELERATED |
38 SDL_RENDERER_PRESENTVSYNC);
39 if (renderer == NULL) {
40 fprintf(stderr, "Could not create SDL renderer: %s", SDL_GetError());
42 goto sdl_create_renderer_fail;
45 if (SDL_NumJoysticks() <= 0) {
46 fprintf(stderr, "Could not find any The Sticks of the Joy\n");
48 goto sdl_num_joysticks_fail;
51 SDL_Joystick *the_stick_of_joy = SDL_JoystickOpen(0);
52 if (the_stick_of_joy == NULL) {
53 fprintf(stderr, "Could not open 0th Stick of the Joy\n");
55 goto sdl_joystick_open_fail;
58 printf("Opened Joystick 0\n");
59 printf("Name: %s\n", SDL_JoystickNameForIndex(0));
60 printf("Number of Axes: %d\n", SDL_JoystickNumAxes(the_stick_of_joy));
61 printf("Number of Buttons: %d\n", SDL_JoystickNumButtons(the_stick_of_joy));
62 printf("Number of Balls: %d\n", SDL_JoystickNumBalls(the_stick_of_joy));
64 SDL_JoystickEventState(SDL_ENABLE);
66 // ------------------------------
68 struct player_t *player = create_player(100.0f, 0.0f);
70 perror("Could not create player");
72 goto create_player_fail;
75 const struct rect_t platforms_rects[] = {
77 .y = GROUND_LEVEL + 50.0f,
81 .y = GROUND_LEVEL + 50.0f,
82 .w = SCREEN_WIDTH - 150.0f,
85 .y = GROUND_LEVEL + 100.0f,
89 .y = GROUND_LEVEL + 100.0f,
93 .y = GROUND_LEVEL + 150.0f,
97 .y = GROUND_LEVEL + 150.0f,
101 struct platforms_t *platforms = create_platforms(
103 sizeof(platforms_rects) / sizeof(struct rect_t));
104 if (platforms == NULL) {
105 perror("Could not create platforms");
107 goto create_platforms_fail;
112 const Uint8 *keyboard_state = SDL_GetKeyboardState(NULL);
113 const Uint32 delay_ms = (Uint32) roundf(1000.0f / GAME_FPS);
116 while (SDL_PollEvent(&e)) {
123 switch (e.key.keysym.sym) {
130 case SDL_JOYBUTTONDOWN:
131 printf("Button: %d\n", e.jbutton.button);
132 if (e.jbutton.button == 1) {
140 if (keyboard_state[SDL_SCANCODE_A]) {
141 player_move_left(player);
142 } else if (keyboard_state[SDL_SCANCODE_D]) {
143 player_move_right(player);
144 } else if (SDL_JoystickGetAxis(the_stick_of_joy, 0) < 0) {
145 player_move_left(player);
146 } else if (SDL_JoystickGetAxis(the_stick_of_joy, 0) > 0) {
147 player_move_right(player);
152 update_player(player, platforms, delay_ms);
154 SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
155 SDL_RenderClear(renderer);
156 render_player(player, renderer);
157 render_platforms(platforms, renderer);
158 SDL_RenderPresent(renderer);
162 destroy_platforms(platforms);
163 create_platforms_fail:
164 destroy_player(player);
166 SDL_JoystickClose(the_stick_of_joy);
167 sdl_joystick_open_fail:
168 sdl_num_joysticks_fail:
169 SDL_DestroyRenderer(renderer);
170 sdl_create_renderer_fail:
171 SDL_DestroyWindow(window);
172 sdl_create_window_fail: