Я пытаюсь реализовать простое цветовое колесо в c с использованием SDL. Программа должна напечатать последовательность разноцветных полос, которые прокручиваются по экрану и l oop возвращаются к началу, когда они пересекают весь экран, фактически делая своего рода прокручиваемый цветной «круг». То, что у меня есть, не совсем правильно работает, а также не особенно многоразово. Может кто-нибудь посоветовать мне, как исправить то, что у меня есть с более компактным решением? Вот что у меня есть:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <math.h>
#include <SDL2/SDL.h>
static const int width = 800;
static const int height = 600;
static const int rectW = width/4;
void sdlT()
{
// Initialize SDL
SDL_Init(SDL_INIT_VIDEO);
// Create a SDL window
SDL_Window *window = SDL_CreateWindow("Hello, SDL2", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, width, height, SDL_WINDOW_OPENGL);
// Create a renderer
SDL_Renderer *renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
bool running = true;
SDL_Event event;
int x = 0;
int y = 0;
int count = 0;
while(running)
{
// Check for events
while(SDL_PollEvent(&event))
{
//close SDL if user clicks window 'x'
if(event.type == SDL_QUIT)
{
running = false;
}
}
// Clear screen
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
SDL_RenderClear(renderer);
SDL_Rect rect = {0, y, x < rectW ? x : x-rectW*count, height};
SDL_Rect rect2 = {x, y, rectW, height};
SDL_Rect rect3 = {x+rectW, y, rectW, height};
SDL_Rect rect4 = {x+rectW*count, y, rectW, height};
SDL_SetRenderDrawColor(renderer, 0, 0, 255, 255);
if(x < rectW){
SDL_RenderFillRect(renderer, &rect);//fills w/ current color
}else if(x >= rectW && x < (rectW *2)){
SDL_RenderFillRect(renderer, &rect2);
}else if(x>=(rectW *2) && x < (rectW *3)){
SDL_RenderFillRect(renderer, &rect3);
}else if (x>=(rectW *3) && x < (rectW *4)){
SDL_RenderFillRect(renderer, &rect4);
}
SDL_SetRenderDrawColor(renderer, 0, 255, 0, 255);
if(x < rectW){
SDL_RenderFillRect(renderer, &rect2);//fills w/ current color
}else if(x >= rectW && x < (rectW *2)){
SDL_RenderFillRect(renderer, &rect3);
}else if(x>=(rectW *2) && x < (rectW *3)){
SDL_RenderFillRect(renderer, &rect4);
}else if (x>=(rectW *3) && x < (rectW *4)){
SDL_RenderFillRect(renderer, &rect);
}
SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255);
if(x < rectW){
SDL_RenderFillRect(renderer, &rect3);//fills w/ current color
}else if(x >= rectW && x < (rectW *2)){
SDL_RenderFillRect(renderer, &rect4);
}else if(x>=(rectW *2) && x < (rectW *3)){
SDL_RenderFillRect(renderer, &rect);
}else if (x>=(rectW *3) && x < (rectW *4)){
SDL_RenderFillRect(renderer, &rect2);
}
SDL_SetRenderDrawColor(renderer, 0, 255, 255, 255);
if(x < rectW){
SDL_RenderFillRect(renderer, &rect4);//fills w/ current color
}else if(x >= rectW && x < (rectW *2)){
SDL_RenderFillRect(renderer, &rect);
}else if(x>=(rectW *2) && x < (rectW *3)){
SDL_RenderFillRect(renderer, &rect2);
}else if (x>=(rectW *3) && x < (rectW *4)){
SDL_RenderFillRect(renderer, &rect3);
}
// Show what was drawn
SDL_RenderPresent(renderer);
x++;
if(x >= rectW){
count++;
x= 0;
}
}
// Release resources
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window);
SDL_Quit();
}