#include #include using namespace std; SDL_Color color = {.r = 255, .g = 255, .b = 255}; const int WIDTH = 800, HEIGHT = 600; void DrawHalfCircle(SDL_Renderer *renderer, int centreX, int centreY, int radius, int a = 0, int minx = 0, int miny = 0) { const int diameter = (radius * 2); int x = (radius - 1); int y = 0; int tx = 1; int ty = 1; int error = (tx - diameter); while (x >= y) { SDL_RenderDrawPoint(renderer, centreX + x, centreY + y); if (a == 0) { SDL_RenderDrawPoint(renderer, centreX - x, centreY + y); } else if (a == 1) { if (centreX - x > minx && centreY + y > miny) { SDL_RenderDrawPoint(renderer, centreX - x, centreY + y); } } SDL_RenderDrawPoint(renderer, centreX + y, centreY + x); SDL_RenderDrawPoint(renderer, centreX - y, centreY + x); if (error <= 0) { ++y; error += ty; ty += 2; } if (error > 0) { --x; tx += 2; error += (tx - diameter); } } } void DrawARightCurve(SDL_Renderer * renderer, int32_t centreX, int32_t centreY, int32_t radius) { const int32_t diameter = (radius * 2); int32_t x = (radius - 1); int32_t y = 0; int32_t tx = 1; int32_t ty = 1; int32_t error = (tx - diameter); while (x >= y) { SDL_RenderDrawPoint(renderer, centreX + x, centreY - y); SDL_RenderDrawPoint(renderer, centreX + x, centreY + y); if (error <= 0) { ++y; error += ty; ty += 2; } if (error > 0) { --x; tx += 2; error += (tx - diameter); } } } void DrawALeftCurve(SDL_Renderer * renderer, int32_t centreX, int32_t centreY, int32_t radius) { const int32_t diameter = (radius * 2); int32_t x = (radius - 1); int32_t y = 0; int32_t tx = 1; int32_t ty = 1; int32_t error = (tx - diameter); while (x >= y) { SDL_RenderDrawPoint(renderer, centreX - x, centreY - y); SDL_RenderDrawPoint(renderer, centreX - x, centreY + y); if (error <= 0) { ++y; error += ty; ty += 2; } if (error > 0) { --x; tx += 2; error += (tx - diameter); } } } void DrawACurve(SDL_Renderer * renderer, int32_t centreX, int32_t centreY, int32_t radius) { const int32_t diameter = (radius * 2); int32_t x = (radius - 1); int32_t y = 0; int32_t tx = 1; int32_t ty = 1; int32_t error = (tx - diameter); while (x >= y) { SDL_RenderDrawPoint(renderer, centreX - y, centreY - x); if (error <= 0) { ++y; error += ty; ty += 2; } if (error > 0) { --x; tx += 2; error += (tx - diameter); } } } void Draw_FilledCircle(SDL_Renderer *renderer, int x, int y, int radius, SDL_Color color) { SDL_SetRenderDrawColor(renderer, color.r, color.g, color.b, color.a); for (int w = 0; w < radius * 2; w++) { for (int h = 0; h < radius * 2; h++) { int dx = radius - w; int dy = radius - h; if ((dx*dx + dy*dy) <= (radius * radius)) { SDL_RenderDrawPoint(renderer, x + dx, y + dy); } } } } int main (int argc, char *argv[] ){ SDL_Init(SDL_INIT_EVERYTHING); SDL_Window *window = SDL_CreateWindow("Hello SDL World", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, WIDTH, HEIGHT, SDL_WINDOW_ALLOW_HIGHDPI); SDL_Renderer *renderer = SDL_CreateRenderer(window, 1, SDL_RENDERER_ACCELERATED); if (NULL == window) { cout << "could not create window: " << SDL_GetError() << endl; return 1; } SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255); //body DrawALeftCurve(renderer, 697, 473, 332); DrawACurve(renderer, 493, 288, 57); SDL_RenderDrawLine(renderer, 492, 232, 938, 232); SDL_RenderDrawLine(renderer, 938, 232, 1002, 150); SDL_RenderDrawLine(renderer, 1002, 150, 1070, 232); DrawHalfCircle(renderer, 1098, 232, 20); DrawHalfCircle(renderer, 1162, 232, 20); DrawHalfCircle(renderer, 1224, 232, 20); SDL_RenderDrawLine(renderer, 1070, 232, 1253, 232); SDL_RenderDrawLine(renderer, 1253, 232, 1322, 150); SDL_RenderDrawLine(renderer, 1322, 150, 1389, 232); DrawARightCurve(renderer, 1147, 470,340); DrawHalfCircle(renderer, 1352, 708, 35); SDL_RenderDrawLine(renderer, 1317, 708, 1167, 708); DrawHalfCircle(renderer, 1132, 708, 35); SDL_RenderDrawLine(renderer, 1097, 708, 752, 708); DrawHalfCircle(renderer, 717, 708, 35); SDL_RenderDrawLine(renderer, 682, 708, 532, 708); DrawHalfCircle(renderer, 497, 708, 35); DrawHalfCircle(renderer, 548, 232, 70); DrawHalfCircle(renderer, 740, 232, 70); //eyes Draw_FilledCircle(renderer, 1050, 320, 27, color); Draw_FilledCircle(renderer, 1270, 320, 27, color); //nose SDL_RenderDrawLine(renderer, 1160, 300, 1160, 333); SDL_RenderDrawLine(renderer, 1160, 333, 1165, 336); SDL_RenderDrawLine(renderer, 1165, 336, 1170, 340); SDL_RenderDrawLine(renderer, 1170, 340, 1175, 341); SDL_RenderDrawLine(renderer, 1175, 341, 1194, 341); SDL_RenderDrawLine(renderer, 1160, 333, 1155, 336); SDL_RenderDrawLine(renderer, 1155, 336, 1150, 340); SDL_RenderDrawLine(renderer, 1150, 340, 1145, 341); SDL_RenderDrawLine(renderer, 1145, 341, 1126, 341); //right whiskers SDL_RenderDrawLine(renderer, 1445, 300, 1550, 260); SDL_RenderDrawLine(renderer, 1455, 320, 1560, 290); //left whiskers SDL_RenderDrawLine(renderer, 950, 320, 840, 290); SDL_RenderDrawLine(renderer, 950, 340, 840, 330); //tail SDL_RenderDrawLine(renderer, 368, 434, 357, 430); SDL_RenderDrawLine(renderer, 357, 430, 338, 419); SDL_RenderDrawLine(renderer, 338, 419, 322, 409); SDL_RenderDrawLine(renderer, 322, 409, 307, 397); SDL_RenderDrawLine(renderer, 307, 397, 302, 392); SDL_RenderDrawLine(renderer, 302, 392, 284, 377); SDL_RenderDrawLine(renderer, 284, 377, 274, 363); SDL_RenderDrawLine(renderer, 274, 363, 268, 352); SDL_RenderDrawLine(renderer, 268, 352, 265, 344); SDL_RenderDrawLine(renderer, 265, 344, 265, 333); SDL_RenderDrawLine(renderer, 265, 333, 268, 327); SDL_RenderDrawLine(renderer, 268, 327, 271, 323); SDL_RenderDrawLine(renderer, 271, 323, 276, 318); SDL_RenderDrawLine(renderer, 276, 318, 285, 314); SDL_RenderDrawLine(renderer, 285, 314, 295, 312); SDL_RenderDrawLine(renderer, 295, 312, 310, 314); SDL_RenderDrawLine(renderer, 310, 314, 330, 322); SDL_RenderDrawLine(renderer, 330, 322, 353, 332); SDL_RenderDrawLine(renderer, 353, 332, 371, 342); SDL_RenderDrawLine(renderer, 371, 342, 387, 352); SDL_RenderDrawLine(renderer, 274, 363, 280, 357); SDL_RenderDrawLine(renderer, 280, 357, 286, 351); SDL_RenderDrawLine(renderer, 286, 351, 292, 342); SDL_RenderDrawLine(renderer, 292, 342, 298, 333); SDL_RenderDrawLine(renderer, 298, 333, 304, 324); SDL_RenderDrawLine(renderer, 304, 324, 310, 315); SDL_RenderDrawLine(renderer, 370, 342, 363, 352); SDL_RenderDrawLine(renderer, 363, 352, 358, 362); SDL_RenderDrawLine(renderer, 358, 362, 351, 372); SDL_RenderDrawLine(renderer, 351, 372, 344, 382); SDL_RenderDrawLine(renderer, 344, 382, 337, 392); SDL_RenderDrawLine(renderer, 337, 392, 320, 410); SDL_RenderPresent(renderer); SDL_Event windowEvent; while (true) { if (SDL_PollEvent(&windowEvent)) { if (SDL_QUIT == windowEvent.type) { break; } } } SDL_DestroyWindow(window); SDL_Quit(); return EXIT_SUCCESS; }