Skip to content

Commit 563c9e0

Browse files
Add files via upload
1 parent 648e488 commit 563c9e0

File tree

8 files changed

+207
-149
lines changed

8 files changed

+207
-149
lines changed

Video04/game.c

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
#include "game.h"
2+
#include "init_sdl.h"
3+
#include "load_media.h"
4+
5+
void game_render_color(struct Game *g);
6+
void game_events(struct Game *g);
7+
void game_draw(struct Game *g);
8+
9+
bool game_new(struct Game **game) {
10+
*game = calloc(1, sizeof(struct Game));
11+
if (*game == NULL) {
12+
fprintf(stderr, "Error Calloc of New Game.\n");
13+
return false;
14+
}
15+
struct Game *g = *game;
16+
17+
if (!game_init_sdl(g)) {
18+
return false;
19+
}
20+
21+
if (!game_load_media(g)) {
22+
return false;
23+
}
24+
25+
g->is_running = true;
26+
27+
srand((unsigned)time(NULL));
28+
29+
return true;
30+
}
31+
32+
void game_free(struct Game **game) {
33+
if (*game) {
34+
struct Game *g = *game;
35+
36+
if (g->background) {
37+
SDL_DestroyTexture(g->background);
38+
g->background = NULL;
39+
}
40+
41+
if (g->renderer) {
42+
SDL_DestroyRenderer(g->renderer);
43+
g->renderer = NULL;
44+
}
45+
if (g->window) {
46+
SDL_DestroyWindow(g->window);
47+
g->window = NULL;
48+
}
49+
50+
SDL_Quit();
51+
52+
free(g);
53+
54+
g = NULL;
55+
*game = NULL;
56+
57+
printf("All Clean!\n");
58+
}
59+
}
60+
61+
void game_render_color(struct Game *g) {
62+
SDL_SetRenderDrawColor(g->renderer, (Uint8)rand(), (Uint8)rand(),
63+
(Uint8)rand(), 255);
64+
}
65+
66+
void game_events(struct Game *g) {
67+
while (SDL_PollEvent(&g->event)) {
68+
switch (g->event.type) {
69+
case SDL_EVENT_QUIT:
70+
g->is_running = false;
71+
break;
72+
case SDL_EVENT_KEY_DOWN:
73+
switch (g->event.key.scancode) {
74+
case SDL_SCANCODE_ESCAPE:
75+
g->is_running = false;
76+
break;
77+
case SDL_SCANCODE_SPACE:
78+
game_render_color(g);
79+
break;
80+
default:
81+
break;
82+
}
83+
break;
84+
default:
85+
break;
86+
}
87+
}
88+
}
89+
90+
void game_draw(struct Game *g) {
91+
SDL_RenderClear(g->renderer);
92+
93+
SDL_RenderTexture(g->renderer, g->background, NULL, NULL);
94+
95+
SDL_RenderPresent(g->renderer);
96+
}
97+
98+
void game_run(struct Game *g) {
99+
while (g->is_running) {
100+
game_events(g);
101+
102+
game_draw(g);
103+
104+
SDL_Delay(16);
105+
}
106+
}

Video04/game.h

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
#ifndef GAME_H
2+
#define GAME_H
3+
4+
#include "main.h"
5+
6+
struct Game {
7+
SDL_Window *window;
8+
SDL_Renderer *renderer;
9+
SDL_Texture *background;
10+
SDL_Event event;
11+
bool is_running;
12+
};
13+
14+
bool game_new(struct Game **game);
15+
void game_free(struct Game **game);
16+
void game_run(struct Game *g);
17+
18+
#endif

Video04/init_sdl.c

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
#include "init_sdl.h"
2+
3+
bool game_init_sdl(struct Game *g) {
4+
if (!SDL_Init(SDL_FLAGS)) {
5+
fprintf(stderr, "Error initializing SDL3: %s\n", SDL_GetError());
6+
return false;
7+
}
8+
9+
g->window = SDL_CreateWindow(WINDOW_TITLE, WINDOW_WIDTH, WINDOW_HEIGHT, 0);
10+
if (!g->window) {
11+
fprintf(stderr, "Error creating Window: %s\n", SDL_GetError());
12+
return false;
13+
}
14+
15+
g->renderer = SDL_CreateRenderer(g->window, NULL);
16+
if (!g->renderer) {
17+
fprintf(stderr, "Error creating Renderer: %s\n", SDL_GetError());
18+
return false;
19+
}
20+
21+
SDL_Surface *icon_surf = IMG_Load("images/C-logo.png");
22+
if (!icon_surf) {
23+
fprintf(stderr, "Error loading Surface: %s\n", SDL_GetError());
24+
return false;
25+
}
26+
27+
if (!SDL_SetWindowIcon(g->window, icon_surf)) {
28+
fprintf(stderr, "Error setting Window Icon: %s\n", SDL_GetError());
29+
SDL_DestroySurface(icon_surf);
30+
return false;
31+
}
32+
SDL_DestroySurface(icon_surf);
33+
34+
return true;
35+
}

Video04/init_sdl.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
#ifndef INIT_SDL_H
2+
#define INIT_SDL_H
3+
4+
#include "game.h"
5+
6+
bool game_init_sdl(struct Game *g);
7+
8+
#endif

Video04/load_media.c

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
#include "load_media.h"
2+
3+
bool game_load_media(struct Game *g) {
4+
g->background = IMG_LoadTexture(g->renderer, "images/background.png");
5+
if (!g->background) {
6+
fprintf(stderr, "Error loading Texture: %s\n", SDL_GetError());
7+
return false;
8+
}
9+
10+
return true;
11+
}

Video04/load_media.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
#ifndef LOAD_MEDIA_H
2+
#define LOAD_MEDIA_H
3+
4+
#include "game.h"
5+
6+
bool game_load_media(struct Game *g);
7+
8+
#endif

Video04/main.c

Lines changed: 3 additions & 149 deletions
Original file line numberDiff line numberDiff line change
@@ -1,158 +1,12 @@
1-
#include <SDL3/SDL.h>
2-
#include <SDL3/SDL_main.h>
3-
#include <SDL3_image/SDL_image.h>
4-
#include <stdbool.h>
5-
#include <stdio.h>
6-
#include <stdlib.h>
7-
#include <time.h>
8-
9-
#define SDL_FLAGS SDL_INIT_VIDEO
10-
11-
#define WINDOW_TITLE "Changing Colors"
12-
#define WINDOW_WIDTH 800
13-
#define WINDOW_HEIGHT 600
14-
15-
struct Game {
16-
SDL_Window *window;
17-
SDL_Renderer *renderer;
18-
bool is_running;
19-
SDL_Event event;
20-
SDL_Texture *background;
21-
};
22-
23-
bool game_load_media(struct Game *g);
24-
bool game_init_sdl(struct Game *g);
25-
bool game_new(struct Game *g);
26-
void game_free(struct Game *g);
27-
void game_render_color(struct Game *g);
28-
void game_events(struct Game *g);
29-
void game_draw(const struct Game *g);
30-
void game_run(struct Game *g);
31-
32-
bool game_init_sdl(struct Game *g) {
33-
if (!SDL_Init(SDL_FLAGS)) {
34-
fprintf(stderr, "Error initializing SDL: %s\n", SDL_GetError());
35-
return false;
36-
}
37-
38-
g->window = SDL_CreateWindow(WINDOW_TITLE, WINDOW_WIDTH, WINDOW_HEIGHT, 0);
39-
if (!g->window) {
40-
fprintf(stderr, "Error creating window: %s\n", SDL_GetError());
41-
return false;
42-
}
43-
44-
g->renderer = SDL_CreateRenderer(g->window, NULL);
45-
if (!g->renderer) {
46-
fprintf(stderr, "Error creating renderer: %s\n", SDL_GetError());
47-
return false;
48-
}
49-
50-
return true;
51-
}
52-
53-
bool game_load_media(struct Game *g) {
54-
g->background = IMG_LoadTexture(g->renderer, "images/background.png");
55-
if (!g->background) {
56-
fprintf(stderr, "Error creating Texture: %s\n", SDL_GetError());
57-
return false;
58-
}
59-
60-
return true;
61-
}
62-
63-
bool game_new(struct Game *g) {
64-
g->is_running = true;
65-
66-
if (!game_init_sdl(g)) {
67-
return false;
68-
}
69-
70-
if (!game_load_media(g)) {
71-
return false;
72-
}
73-
74-
srand((unsigned)time(NULL));
75-
76-
return true;
77-
}
78-
79-
void game_free(struct Game *g) {
80-
if (g->background) {
81-
SDL_DestroyTexture(g->background);
82-
g->background = NULL;
83-
}
84-
85-
if (g->renderer) {
86-
SDL_DestroyRenderer(g->renderer);
87-
g->renderer = NULL;
88-
}
89-
90-
if (g->window) {
91-
SDL_DestroyWindow(g->window);
92-
g->window = NULL;
93-
}
94-
95-
SDL_Quit();
96-
97-
printf("all clean!\n");
98-
}
99-
100-
void game_render_color(struct Game *g) {
101-
SDL_SetRenderDrawColor(g->renderer, (Uint8)rand() % 256,
102-
(Uint8)rand() % 256, (Uint8)rand() % 256, 255);
103-
}
104-
105-
void game_events(struct Game *g) {
106-
while (SDL_PollEvent(&g->event)) {
107-
switch (g->event.type) {
108-
case SDL_EVENT_QUIT:
109-
g->is_running = false;
110-
break;
111-
case SDL_EVENT_KEY_DOWN:
112-
switch (g->event.key.scancode) {
113-
case SDL_SCANCODE_ESCAPE:
114-
g->is_running = false;
115-
break;
116-
case SDL_SCANCODE_SPACE:
117-
game_render_color(g);
118-
break;
119-
default:
120-
break;
121-
}
122-
break;
123-
default:
124-
break;
125-
}
126-
}
127-
}
128-
129-
void game_draw(const struct Game *g) {
130-
SDL_RenderClear(g->renderer);
131-
132-
SDL_RenderTexture(g->renderer, g->background, NULL, NULL);
133-
134-
SDL_RenderPresent(g->renderer);
135-
}
136-
137-
void game_run(struct Game *g) {
138-
while (g->is_running) {
139-
140-
game_events(g);
141-
142-
game_draw(g);
143-
144-
SDL_Delay(16);
145-
}
146-
}
1+
#include "game.h"
1472

1483
int main(void) {
1494
bool exit_status = EXIT_FAILURE;
1505

151-
struct Game game = {0};
6+
struct Game *game = NULL;
1527

1538
if (game_new(&game)) {
154-
155-
game_run(&game);
9+
game_run(game);
15610

15711
exit_status = EXIT_SUCCESS;
15812
}

Video04/main.h

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
#ifndef MAIN_H
2+
#define MAIN_H
3+
4+
#include <SDL3/SDL.h>
5+
#include <SDL3/SDL_main.h>
6+
#include <SDL3_image/SDL_image.h>
7+
#include <stdbool.h>
8+
#include <stdio.h>
9+
#include <stdlib.h>
10+
#include <time.h>
11+
12+
#define SDL_FLAGS SDL_INIT_VIDEO
13+
14+
#define WINDOW_TITLE "Random Colors"
15+
#define WINDOW_WIDTH 800
16+
#define WINDOW_HEIGHT 600
17+
18+
#endif

0 commit comments

Comments
 (0)