blob: 51a488e0e2d609907da2055f6fb915b9ee7e6b2c (
plain)
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
|
#include <stdio.h>
#include <stdbool.h>
#define FBGL_IMPLEMENTATION
#include "fbgl.h"
#define RECT_WIDTH 50
#define RECT_HEIGHT 30
#define MOVE_STEP 10
#define BG_COLOR 0x000000 // Black
#define RECT_COLOR 0xFFFFFF // White
int main(void)
{
// Initialize framebuffer
fbgl_t framebuffer;
if (fbgl_init(NULL, &framebuffer) != 0) {
fprintf(stderr, "Failed to initialize framebuffer\n");
return EXIT_FAILURE;
}
// Initialize keyboard
if (fbgl_keyboard_init() != 0) {
fprintf(stderr, "Failed to initialize keyboard\n");
fbgl_destroy(&framebuffer);
return EXIT_FAILURE;
}
atexit(fbgl_keyboard_clean); // Cleanup on exit
atexit((void (*)(void))fbgl_destroy, &framebuffer);
// Initial rectangle position
fbgl_point_t top_left = {framebuffer.width / 2 - RECT_WIDTH / 2, framebuffer.height / 2 - RECT_HEIGHT / 2};
fbgl_point_t bottom_right = {top_left.x + RECT_WIDTH, top_left.y + RECT_HEIGHT};
// Main loop
while (!fbgl_check_esc_key()) {
// Update keyboard state
fbgl_keyboard_update();
// Clear screen
fbgl_set_bg(&framebuffer, BG_COLOR);
// Move rectangle based on key input
if (fbgl_key_down('w')) {
top_left.y -= MOVE_STEP;
bottom_right.y -= MOVE_STEP;
}
if (fbgl_key_down('s')) {
top_left.y += MOVE_STEP;
bottom_right.y += MOVE_STEP;
}
if (fbgl_key_down('a')) {
top_left.x -= MOVE_STEP;
bottom_right.x -= MOVE_STEP;
}
if (fbgl_key_down('d')) {
top_left.x += MOVE_STEP;
bottom_right.x += MOVE_STEP;
}
// Ensure rectangle stays within screen bounds
if (top_left.x < 0) {
top_left.x = 0;
bottom_right.x = RECT_WIDTH;
}
if (top_left.y < 0) {
top_left.y = 0;
bottom_right.y = RECT_HEIGHT;
}
if (bottom_right.x > framebuffer.width) {
bottom_right.x = framebuffer.width;
top_left.x = framebuffer.width - RECT_WIDTH;
}
if (bottom_right.y > framebuffer.height) {
bottom_right.y = framebuffer.height;
top_left.y = framebuffer.height - RECT_HEIGHT;
}
// Draw the rectangle
fbgl_draw_rectangle_filled(top_left, bottom_right, RECT_COLOR, &framebuffer);
// Refresh frame (add a delay if needed)
usleep(16000); // ~60 FPS
}
// Cleanup
fbgl_keyboard_clean();
fbgl_destroy(&framebuffer);
return EXIT_SUCCESS;
}
|