"Par contre si je veux mettre un peu de couleur dans tout ça. Disons un dégradé de rouge clair à vert foncé. Je dois faire une variable pour chaque couleur? ( je parle du rouge, du vert et du bleu.)"
Tu n'as pas l'air de trop comprendre ce que tu fais
Regarde un peu cette fonction :
SDL_FillRect(lignes[i], NULL, SDL_MapRGB(ecran -> format, i, i, i));
Les trois derniers i correspondent aux composantes RGB (Red, Green, Blue). Quand une composante vaut 0 alors elle est noir, si elle vaut 255 alors elle complètement allumée. Par exemple 255, 0, 0 allume le rouge à fond et éteint le vert et le bleu donc ça donnera du rouge pétant. De même 0, 0, 255 donnera du bleu pétant. Ensuite tu peux combiner les couleurs : 255, 255, 0 donnera du jaune (= rouge + vert).
Puis tu peux faire varier l'intensité de chacune des couleurs, d'où pour avoir du rouge foncé on pourra utiliser 128, 0, 0.
Tu comprends maintenant que pour avoir ton dégradé noir vers blanc tu faisais progresser la couleur de (0, 0, 0) (= noir) vers (255, 255, 255) (= blanc).
Si tu veux avoir un dégradé de noir vers rouge, il faut passer de (0, 0, 0) à (255, 0, 0) et de rouge à bleu ça donnera de (255, 0, 0) à (0, 0, 255).
Au niveau du code pour passer du rouge au bleu il te suffit de remplacer ta fonction :
SDL_FillRect(lignes[i], NULL, SDL_MapRGB(ecran -> format, i, i, i));
Par celle-ci :
SDL_FillRect(lignes[i], NULL, SDL_MapRGB(ecran -> format, 255-i, 0, i));
Si tu veux raffiner un peu plus en faisant du rouge clair à vert foncé, ce sera un chouia plus compliqué, il faut trouver un moyen de passer de (255, 128, 128) à (0, 128, 0) (par exemple).
Une solution à l'arrache :
SDL_FillRect(lignes[i], NULL, SDL_MapRGB(ecran -> format, 255-i, 128, 128-i/2));
Le mieux est encore d'écrire une fonction qui prend en paramètre ta couleur de départ et ta couleur d'arrivée, mais ça te demandera un petit peu de réflexion.