diff --git a/src/main.cpp b/src/main.cpp index 0bd512a..44bbe90 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,7 +1,57 @@ #include +#include +#include #include #include +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; }