feat: draw circle
This commit is contained in:
62
src/main.cpp
62
src/main.cpp
@@ -1,7 +1,57 @@
|
||||
#include <SDL3/SDL.h>
|
||||
#include <SDL3/SDL_events.h>
|
||||
#include <SDL3/SDL_render.h>
|
||||
#include <cstdio>
|
||||
#include <cstdlib>
|
||||
|
||||
bool key_event(SDL_Event e) {
|
||||
if (e.type == SDL_EVENT_KEY_DOWN) {
|
||||
if (e.key.key == SDLK_Q) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool event_handling(SDL_Event e) {
|
||||
while (SDL_PollEvent(&e)) {
|
||||
if (e.type == SDL_EVENT_QUIT) {
|
||||
return true;
|
||||
}
|
||||
if (key_event(e)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void draw_circle(SDL_Renderer *renderer, int centerX, int centerY, int radius) {
|
||||
int x = radius;
|
||||
int y = 0;
|
||||
int decision = 1 - x;
|
||||
|
||||
SDL_SetRenderDrawColor(renderer, 255, 0, 255, 255);
|
||||
while (x >= y) {
|
||||
SDL_RenderPoint(renderer, centerX + x, centerY + y);
|
||||
SDL_RenderPoint(renderer, centerX - x, centerY + y);
|
||||
SDL_RenderPoint(renderer, centerX + x, centerY - y);
|
||||
SDL_RenderPoint(renderer, centerX - x, centerY - y);
|
||||
SDL_RenderPoint(renderer, centerX + y, centerY + x);
|
||||
SDL_RenderPoint(renderer, centerX - y, centerY + x);
|
||||
SDL_RenderPoint(renderer, centerX + y, centerY - x);
|
||||
SDL_RenderPoint(renderer, centerX - y, centerY - x);
|
||||
|
||||
y++;
|
||||
|
||||
if (decision <= 0) {
|
||||
decision += 2 * y + 1;
|
||||
} else {
|
||||
x--;
|
||||
decision += 2 * (y - x + 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int main() {
|
||||
if (!SDL_Init(SDL_INIT_VIDEO)){
|
||||
std::printf("SDL_INIT() failed");
|
||||
@@ -11,7 +61,17 @@ int main() {
|
||||
SDL_Window *window;
|
||||
window = SDL_CreateWindow("Physics Sim", 720, 540, SDL_WINDOW_RESIZABLE);
|
||||
|
||||
SDL_Delay(5000);
|
||||
SDL_Renderer *renderer = SDL_CreateRenderer(window, NULL);
|
||||
|
||||
SDL_Event e;
|
||||
|
||||
bool exit = false;
|
||||
while (!exit) {
|
||||
exit = event_handling(e);
|
||||
draw_circle(renderer, 150, 150, 100);
|
||||
SDL_RenderPresent(renderer);
|
||||
}
|
||||
|
||||
SDL_Quit();
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user