Programmation en C (SDL)

Résolu/Fermé
Aurélien49 Messages postés 59 Date d'inscription lundi 28 janvier 2008 Statut Membre Dernière intervention 21 mai 2011 - 22 sept. 2009 à 11:11
Aurélien49 Messages postés 59 Date d'inscription lundi 28 janvier 2008 Statut Membre Dernière intervention 21 mai 2011 - 2 nov. 2009 à 00:18
Bonjour à tous. Je suis débutant en programmation et je suis actuellement le cours en c de Matéo21 sur Le Site Du Zero. Je voudrais savoir comment créer une surface rectangle via une fonction. La fenêtre principale est créée dans le "main" et je souhaiterai que ma fonction "void fctrectangle(SDL_Surface * adr)" affiche un rectangle sur la fenêtre principale lors d'un appel. J'espère avoir été assez clair, merci à tous. Lens49 :)

#include <stdlib.h>
#include <stdio.h>
#include <SDL/SDL.h>
#define LARGEURF 640
#define HAUTEURF 480
#define LARGEURR 220
#define HAUTEURR 180

void pause();
void fctrectangle(SDL_Surface * adr);

int main(int argc, char *argv[])
{
SDL_Surface *ecran = NULL;

SDL_Init(SDL_INIT_VIDEO);
ecran = SDL_SetVideoMode(LARGEURF, HAUTEURF, 32, SDL_HWSURFACE);
SDL_WM_SetCaption("Ma super fenêtre SDL !", NULL);
SDL_Flip(ecran);

fctrectangle(&ecran);

pause();

SDL_Quit();

return EXIT_SUCCESS;
}

void fctrectangle(SDL_Surface * adr)
{
SDL_Surface *rectangle = NULL;
SDL_Rect position;

rectangle = SDL_CreateRGBSurface(SDL_HWSURFACE, LARGEURR, HAUTEURR, 32, 0, 0, 0, 0); // Allocation de la surface
SDL_FillRect(adr, NULL, SDL_MapRGB(adr->format, 17, 206, 112));

position.x = (LARGEURF / 2) - (LARGEURR / 2); // La surface sera centrée
position.y = (HAUTEURF / 2) - (HAUTEURR / 2);

SDL_FillRect(rectangle, NULL, SDL_MapRGB(adr->format, 50, 255, 25)); // Remplissage de la surface avec du blanc
SDL_BlitSurface(rectangle, NULL, adr, &position); // Collage de la surface sur l'écran

SDL_FreeSurface(rectangle); // Libération de la surface

pause();
}

void pause()
{
int continuer = 1;
SDL_Event event;

while (continuer)
{
SDL_WaitEvent(&event);
switch(event.type)
{
case SDL_QUIT:
continuer = 0;
}
}
}

Merci d'avance, Lens49
A voir également:

8 réponses

Bonjour à tous. Merci pour vos commentaires, mais si on fait abstraction du type de librairie que j'utilise, je suis devant un problème de programmation de langage C. Je veux simplement comprendre ce que je n'arrive pas à voir. Pour les plus rebutés contre la SDL, imaginez vous que se soit une autre librairie à la mode.

Merci à tous les programmeurs qui m'aideront concrètement.

Lens49
3
> je suis actuellement le cours en c de Matéo21 sur Le Site Du Zero.

Un conseil : arrête de suite, c'est nul !
Ca n'a rien à voir avec un "cours" : ce sont des étudiants qui se prennent pour des formateurs alors qu'ils n'ont jamais programmé professionnellement en C de leur vie !!!
Lis le K&R si tu veux apprendre sérieusement le C

Et que vient faire la SDL là dedans ? (c'est une lib 2D complètement obsolète et sans accélération hard que personne n'utilise..)
0
Oui, tu ne vas rien apprendre avec ce site pour enfants de 8 ans.
Au contraire, avec toutes les erreurs (voire monstruosités) qu'il y a, tu resteras nul toute ta vie.
et la SDL n'a rien àvoir avec le C (c'est hallucinant d'imposer la SDL dans un pseudo cours de C !)

Télécharge le Deitel ou K&R pour le C, c'est le top, qu'ont lu tous les développeurs pros à leurs débuts.
0
SDL est mort et enterré (on n'est plus en 1980 à faire des jeux en 2D !!!)
Utilise DirectX ou OpenGL
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
22 sept. 2009 à 14:23
belle ribambelle de connerie. Première page de SDL :
Simple DirectMedia Layer is a cross-platform multimedia library designed to provide low level access to audio, keyboard, mouse, joystick, 3D hardware via OpenGL, and 2D video framebuffer. It is used by MPEG playback software, emulators, and many popular games, including the award winning Linux port of "Civilization: Call To Power."
et le nombre de jeux l'utilisant : http://www.libsdl.org/games.php?order=name&category=-1&completed=100&os=-1&match_name=&perpage=50
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Aurélien49 Messages postés 59 Date d'inscription lundi 28 janvier 2008 Statut Membre Dernière intervention 21 mai 2011 3
23 sept. 2009 à 01:17
Bonjour à tous, le problème de mon programme ma été expliqué sur un autre forum. La personne qui ma aidé n'a pas fait de commentaire sur le choix que j'ai fait d'utiliser tel ou tel bibliothèque, mais clairement et directement montré que l'erreur venait de la manipulation de pointeurs.
En effet "Char Snipeur" tu as raison, j'ai visité le lien que tu as mis en commentaire, et les exemples montres tout à fait que la SDL n'est pas morte.

Résumons: je souhaitais de l'aide en programmation et non des commentaires superflus.

Bien à vous, Lens49
0
salut, vous pouvez ré-expliquer s'il vous plait
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
23 sept. 2009 à 08:11
Si tu es nouveau sur le site Aurélien, sache que les 3 réponses que tu as eu sont dues à un type qui pourri le forum depuis quelques mois (il y en a qui n'ont rien de mieux à faire). La plupart du temps, tu recevra réellement de l'aide.
Pour ma part, je n'utilise pas SDL et je n'ai pas vu d'erreur C dans ton code.
à l'avenir, lorsque tu mets du code, utilise les balise de code (après italique et souligné dans la barre d'édition lorsque tu tape du texte) qui permet de conserver l'indentation et donc une meilleur lisibilité.
0
Aurélien49 Messages postés 59 Date d'inscription lundi 28 janvier 2008 Statut Membre Dernière intervention 21 mai 2011 3
2 nov. 2009 à 00:18
Merci. Je prend note pour mes futurs post au sujet de l'indentation.

Lens49
0