]> git.lizzy.rs Git - nothing.git/blob - src/main.c
3b9a174b1065adc4f8c750a581c6d1bef1a16546
[nothing.git] / src / main.c
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <SDL2/SDL.h>
4
5 #include "./player.h"
6 #include "./platforms.h"
7
8 #define SCREEN_WIDTH 800
9 #define SCREEN_HEIGHT 600
10 #define GAME_FPS 30
11 #define GROUND_LEVEL 200.0f
12
13 int main(int argc, char *argv[])
14 {
15     int exit_code = 0;
16
17     if (SDL_Init(SDL_INIT_VIDEO) < 0) {
18         fprintf(stderr, "Could not initialize SDL: %s", SDL_GetError());
19         exit_code = -1;
20         goto sdl_init_fail;
21     }
22
23     SDL_Window *window = SDL_CreateWindow("Nothing",
24                                           100, 100,
25                                           SCREEN_WIDTH, SCREEN_HEIGHT,
26                                           SDL_WINDOW_SHOWN);
27     if (window == NULL) {
28         fprintf(stderr, "Could not create SDL window: %s", SDL_GetError());
29         exit_code = -1;
30         goto sdl_create_window_fail;
31     }
32
33     SDL_Renderer *renderer = SDL_CreateRenderer(window, -1,
34                                                 SDL_RENDERER_ACCELERATED |
35                                                 SDL_RENDERER_PRESENTVSYNC);
36     if (renderer == NULL) {
37         fprintf(stderr, "Could not create SDL renderer: %s", SDL_GetError());
38         exit_code = -1;
39         goto sdl_create_renderer_fail;
40     }
41
42     struct player_t *player = create_player(100.0f, 0.0f);
43     if (player == NULL) {
44         perror("Could not create player");
45         exit_code = -1;
46         goto create_player_fail;
47     }
48
49     const struct rect_t platforms_rects[] = {
50         { .x = 0.0f,
51           .y = GROUND_LEVEL + 50.0f,
52           .w = 50.0f,
53           .h = 50.0f },
54         { .x = 150.0f,
55           .y = GROUND_LEVEL + 50.0f,
56           .w = SCREEN_WIDTH - 150.0f,
57           .h = 50.0f },
58         { .x = 0.0f,
59           .y = GROUND_LEVEL + 100.0f,
60           .w = 50.0f,
61           .h = 50.0f },
62         { .x = 150.0f,
63           .y = GROUND_LEVEL + 100.0f,
64           .w = 50.0f,
65           .h = 50.0f },
66         { .x = 0.0f,
67           .y = GROUND_LEVEL + 150.0f,
68           .w = 50.0f,
69           .h = 50.0f },
70         { .x = 150.0f,
71           .y = GROUND_LEVEL + 150.0f,
72           .w = 50.0f,
73           .h = 50.0f }
74     };
75     struct platforms_t *platforms = create_platforms(
76         platforms_rects,
77         sizeof(platforms_rects) / sizeof(struct rect_t));
78     if (platforms == NULL) {
79         perror("Could not create platforms");
80         exit_code = -1;
81         goto create_platforms_fail;
82     }
83
84     int quit = 0;
85
86     const Uint8 *keyboard_state = SDL_GetKeyboardState(NULL);
87     const Uint32 delay_ms = (Uint32) roundf(1000.0f / GAME_FPS);
88     SDL_Event e;
89     while (!quit) {
90         while (SDL_PollEvent(&e)) {
91             switch (e.type) {
92             case SDL_QUIT:
93                 quit = 1;
94                 break;
95
96             case SDL_KEYDOWN:
97                 switch (e.key.keysym.sym) {
98                 case SDLK_SPACE:
99                     player_jump(player);
100                     break;
101                 }
102             }
103
104         }
105
106         if (keyboard_state[SDL_SCANCODE_A]) {
107             player_move_left(player);
108         } else if (keyboard_state[SDL_SCANCODE_D]) {
109             player_move_right(player);
110         } else {
111             player_stop(player);
112         }
113
114         update_player(player, platforms, delay_ms);
115
116         SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
117         SDL_RenderClear(renderer);
118         render_player(player, renderer);
119         render_platforms(platforms, renderer);
120         SDL_RenderPresent(renderer);
121         SDL_Delay(delay_ms);
122     }
123
124     destroy_platforms(platforms);
125 create_platforms_fail:
126     destroy_player(player);
127 create_player_fail:
128     SDL_DestroyRenderer(renderer);
129 sdl_create_renderer_fail:
130     SDL_DestroyWindow(window);
131 sdl_create_window_fail:
132     SDL_Quit();
133 sdl_init_fail:
134     return exit_code;
135 }