Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#26 Le 05/11/2006, à 12:13

Bogoris

Re : [Résolu] Problème avec la compilation de Code::Blocks

Ah ouais toohardforyou j'avais aussi essayé de l'ouvrir avec Code::Blocks mais j'avais pas réussi hmm
Je pense que de toute manière faut faire ça avec le Makefile...
Il me semble que j'allais dire une connerie... lol
J'allais te demander si tu avais connu le projet sur le Site du Zéro, mais c'est toi le créateur de 2H4U, non ?

Hors ligne

#27 Le 05/11/2006, à 15:08

Piwaï[INSA]

Re : [Résolu] Problème avec la compilation de Code::Blocks

Tout à fait smile . Il t'a plus ?

C'est une des choses qui m'a motivé à passer sous Linux, pour tester le jeu en fait. Rmk, j'ai essayé de le faire fonctionner sous Mac, mais chui jamais passé sous Mac :s ... Lol ptet que ca coute un poil trop cher smile .

J'espère qu'ils vont pas trop tarder pour la version stable de Code::Blocks...

Sinon, j'ai remarqué que dans mon projet cdb, j'ai inclu les lib sdl au projet sous windows, en indiquant des chemins absolus. Je suppose qu'il faut les changer, mais faut que je regarde quoi mettre à la place...


http://www.piwai.info
Découvrez 2H4U (Too Hard For You) : http://www.sourceforge.net/projects/toohardforyou
et OpenGF : http://www.sourceforge.net/projects/opengf

Hors ligne

#28 Le 05/11/2006, à 19:57

Bogoris

Re : [Résolu] Problème avec la compilation de Code::Blocks

Piwaï[INSA] a écrit :

Tout à fait smile . Il t'a plus ?

Bah en fait j'ai désespérément essayé de le faire fonctionner sous Linux mais je sais pas vraiment compiler en console  sad  (sauf les pilotes de mon modem tongue).
C'est vrai que j'aurais pû essayer de l'installer sous Windows mais j'essayais de me désolidariser un max de Windows donc...
Mais le fait que tu aies toi aussi Ubuntu fait que je ne désespère pas de l'essayer un jour sous Linux  smile .

Dernière modification par Bogoris (Le 05/11/2006, à 19:58)

Hors ligne

#29 Le 08/11/2006, à 00:36

zedtux

Re : [Résolu] Problème avec la compilation de Code::Blocks

Ben je l'aime bien ton jeu Piwaï[INSA] mais dommage que l'on puisse pas changer la config clavier... car j'avais un clavier qwerty, et j'avais séléctionné azerty... du coup pour jouer... hmm

mais sinon, nikel ! wink


RECOLLER VOS FICHIERS XTM AVEC TUXTREMSPLIT !!
Adhérant April numéro 4985 [Rejoindre l'April moi aussi !].

Hors ligne

#30 Le 08/11/2006, à 14:46

Piwaï[INSA]

Re : [Résolu] Problème avec la compilation de Code::Blocks

Donc, quelques réponses, qui ont peu de rapport avec le sujet original de ce post :

1) Pour le compiler sous Linux, il suffit d'aller avec un terminal dans le dossier /scripts de 2H4U, puis de taper make.

Normalement le makefile doit se charger de tout.


http://www.piwai.info
Découvrez 2H4U (Too Hard For You) : http://www.sourceforge.net/projects/toohardforyou
et OpenGF : http://www.sourceforge.net/projects/opengf

Hors ligne

#31 Le 09/11/2006, à 20:32

Bogoris

Re : [Résolu] Problème avec la compilation de Code::Blocks

Piwaï[INSA] a écrit :

Donc, quelques réponses, qui ont peu de rapport avec le sujet original de ce post :

1) Pour le compiler sous Linux, il suffit d'aller avec un terminal dans le dossier /scripts de 2H4U, puis de taper make.

Normalement le makefile doit se charger de tout.

Ah okay...
En fait moi je trouvais pas l'exécutable qui était en fait dans le dossier racine... (je l'avais pas vu ^^).

Donc en fait ton jeu est très sympa.
Il manque juste une petite chose selon moi : pouvoir tourner les pièces (dommage pour un casse-briques).
Sinon, je trouvais déjà le concept de mélanger un tétris et un casse-brique novateur, mais en plus la réalisation est vraiment pas mal smile (les carrés grisés et tout, quoique pour les carrés, j'ai pas compris tout de suite parce que je m'attendait à ce qu'ils disparraisent wink ).

Je viens de finir mon premier essai :
- Score : 18790
- Niveau : 1
- Lignes à faire (c'est quoi ?) : 10
- Lignes : 10

Sinon la musique est sympa aussi, qui l'a faite ? smile

Bogoris

PS: deuxième partie : je viens de comprendre pourquoi les cases étaient grisées plutôt que de disparaître...
PPS: Ah mais si en fait, on peut tourner les blocs... {révélation de l'année 2006}
PPPS: Comment tu fais en SDL pour savoir quand quelqu'un appuie simultanément sur deux touches ?
PPPPS: 3ème partie, score : 236780, niveau: 10, ligne à faire: 1, lignes:  154.
Le docteur Kamawashi t'as pas appelé pour le mettre dans son programme d'entraînement célébral ? Sur Nintendo DS ça doit déchirer 8)
Encore félicitations à toi, ça a dû te demander énormément de travail tout ça o_O

Dernière modification par Bogoris (Le 09/11/2006, à 21:10)

Hors ligne

#32 Le 14/11/2006, à 14:51

Piwaï[INSA]

Re : [Résolu] Problème avec la compilation de Code::Blocks

-> MERCI big_smile

Effectivement, on peut faire tourner les pièces lol. On peut les faire descendre plus vite (s), voir meme les faire descendre d'un coup (espace). Les fichiers d'aide, ca sert tongue .

La musique, elle vient directement d'un site de téléchargement de musiques libres.

Lignes à faire, c'est le nombre de lignes restant à faire pour passer au niveau suivant.

Lol, les cases sont grisées, pour permettre de continuer à faire des lignes avec le Tetris. Une ligne remplie de cases grisées (ou vides) est détruite.

Pour la SDL, j'ai une pile d'évenements, je la vide à chaque tour de boucle. Il suffit de voir comment fonctionne la SDL (cf les excellents tutos du site du zéro : www.siteduzero.com).

Voila, bonne continuation. Un jour, peut-etre, 2H4U existera en réseau... Quand j'aurai du temps, et des cours de réseau...


http://www.piwai.info
Découvrez 2H4U (Too Hard For You) : http://www.sourceforge.net/projects/toohardforyou
et OpenGF : http://www.sourceforge.net/projects/opengf

Hors ligne

#33 Le 14/11/2006, à 19:36

Bogoris

Re : [Résolu] Problème avec la compilation de Code::Blocks

On devrait peut-être créer un autre sujet sur ce superbe jeu pour continuer à en parler parce que là je crois qu'on a trop dérivé... (j'ose pas le créer vu que c'est ton jeu wink ). Remarques peut-être qu'il existe déjà un topic sur ubuntu-fr.org ?

Une pile d'évènement donc ?
Je me demandais comment tu faisais ça mais j'ai ma petite idée...
Moi en fait je fais un switch avec des break; pour gérer les évènements.
Or toi tu dois faire une structure avec des if à la suite, et même pas des elseif, je me tompe ?

@+

Bogoris

Hors ligne

#34 Le 16/11/2006, à 17:26

ssderrthu

Re : [Résolu] Problème avec la compilation de Code::Blocks

zedtux a écrit :

Et pour en faire un paquage deb ??? Comment faire ??

Car le recompiler sous edgy 64, ca me saoul tongue

Quand tu créer un paquet, tu compiles de toute manière, sauf qu'à la place de l'installer dans ton système de fichier, tu l'installes dans un paquet.

#35 Le 17/11/2006, à 11:12

Piwaï[INSA]

Re : [Résolu] Problème avec la compilation de Code::Blocks

Voici en gros le code pour la pile d'évenements :

	SDL_Event event;

	while ( SDL_PollEvent( &event ) )

	{

		switch ( event.type )

		{

		case SDL_KEYDOWN:


                        //Une touche est enfoncée
			KeyDown( event.key.keysym.sym );

			break;


 
		case SDL_KEYUP:

               //Une touche est relachée	
		KeyUp( event.key.keysym.sym );

			break;



		case SDL_QUIT:

			m_bQuit = true;

			break;



        //Si on minimize la fenêtre, le jeu passera en pause.

		case SDL_ACTIVEEVENT:

			if ( (event.active.state & SDL_APPACTIVE) || (event.active.state & SDL_APPINPUTFOCUS)) {

				if ( event.active.gain ) {

					m_bMinimized = false;

					WindowActive();

				} else {

					m_bMinimized = true;

					WindowInactive();

				}

			}

			break;

		} 

	}

Donc c'est bien un switch, mais dans un while qui vide la pile d'évenements.

Sinon, j'essayerai bien de faire un paquet pour ubuntu, jvai chercher de la doc la dessus smile, ca doit po etre bien compliqué...

@++

Piwaï


http://www.piwai.info
Découvrez 2H4U (Too Hard For You) : http://www.sourceforge.net/projects/toohardforyou
et OpenGF : http://www.sourceforge.net/projects/opengf

Hors ligne

#36 Le 17/11/2006, à 18:23

Bogoris

Re : [Résolu] Problème avec la compilation de Code::Blocks

Creer un paquet

Piwaï a écrit :

Donc c'est bien un switch, mais dans un while qui vide la pile d'évenements.

Hum... pourquoi vider la pile d'évènements ? Ça sert à quoi ?
Et ça peut marcher aussi avec un SDL_wait_event() ?
Mais en fait, la pile d'évènements, c'est quoi ?
Un truc que toi tu as inventé ? Tu stockes des trucs dans des variables ? hmm

Merci encore et merci d'avance smile.

Dernière modification par Bogoris (Le 17/11/2006, à 18:23)

Hors ligne

#37 Le 18/11/2006, à 18:17

Piwaï[INSA]

Re : [Résolu] Problème avec la compilation de Code::Blocks

En fait, une pile c'est... Et bien, comme une pile d'assiettes.
Je ne sais plus s'il s'agit ici d'une pile ou d'une queue (en fait c'est ptet plutot une queue), mais voici le principe en gros

Mon programme s'effectue dans une boucle.

A chaque tour de boucle, je dois traiter tous les évènements extérieurs qui agissent sur le programme : quelqu'un appuie sur une touche, ferme la fenêtre, minimise la fenêtre, bouge la souris...

Donc, dès qu'un tel évènement se produit, le système d'exploitation l'ajoute à la queue d'évenements. Ensuite, avec SDL_PollEvent, je vide la queue, message par message.

Exemple : entre 2 tour de  boucle, l'utilisateur a appuyé sur 1 touche, puis minimisé la fenetre. J'ai donc 2 évenements dans ma queue. Quand je fais poll event la première fois, je récupère l'évenement touche enfoncée. Puis quand je le fais la 2e fois, je récupère la fenetre minimisée. Et ainsi de suite jusqu'a ce qu'il n'y ai plus d'évenements a traiter, d'ou le while smile..

J'espère avoir bien expliqué... Sinon, une petite recherche sur Wiki devrait te permettre d'en apprendre plus sur les piles et les queues d'évenements.


http://www.piwai.info
Découvrez 2H4U (Too Hard For You) : http://www.sourceforge.net/projects/toohardforyou
et OpenGF : http://www.sourceforge.net/projects/opengf

Hors ligne

#38 Le 18/11/2006, à 21:45

Bogoris

Re : [Résolu] Problème avec la compilation de Code::Blocks

Merci des informations... je crois que je commence à comprendre  smile .
J'ai regardé les différences entre SDL_WaitEvent et SDL_PollEvent dans la documentation française téléchargeable et en fait SDL_WaitEvent() consiste à attendre un évenement (d'où le nom ^^) alors que SDL_PollEvent(), c'est questionner la file d'évènements.

J'ai donc fait ce petit code là :

#include <stdlib.h>
#include <stdio.h>
#include <SDL/SDL.h>
#include <SDL/SDL_image.h>


int main(int argc, char *argv[])
{
    long const SCREEN_WIDTH = 400;
    long const SCREEN_HEIGHT = 300;

    if (SDL_Init(SDL_INIT_VIDEO) == -1) // Démarrage de la SDL. Si erreur alors...
    {
        fprintf(stderr, "Erreur d'initialisation de la SDL : %s\n", SDL_GetError()); // Ecriture de l'erreur
        exit(EXIT_FAILURE); // On quitte le programme
    }

    // Titre de la fenêtre
    SDL_WM_SetCaption("Ma super fenêtre SDL !", NULL);

    // Ouverture du mode vidéo et création de la surface "ecran"
    SDL_Surface *ecran = NULL; // Le pointeur qui va stocker la surface de l'écran
    ecran = SDL_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
    if (ecran == NULL) // Si l'ouverture a échoué, on écrit l'erreur et on arrête
    {
        fprintf(stderr, "Impossible de charger le mode vidéo : %s\nq", SDL_GetError());
        exit(EXIT_FAILURE);
    }

    SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 122, 50));

    // Fond

    SDL_Surface *fond = NULL;
    fond = SDL_CreateRGBSurface(SDL_HWSURFACE, SCREEN_WIDTH, SCREEN_HEIGHT, 32, 0, 0, 0, 0);
    SDL_FillRect(fond, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));

    SDL_Rect position_fond;
    position_fond.x = 0;
    position_fond.y = 0;


    // Zozor

    SDL_Surface *zozor = NULL;
    zozor = SDL_LoadBMP("zozor.bmp");
    SDL_SetColorKey(zozor, SDL_SRCCOLORKEY, SDL_MapRGB(zozor->format, 0, 0, 255));

    SDL_Rect position_zozor;
    position_zozor.x = 0;
    position_zozor.y = 0;


    // Déplacer Zozor
    typedef struct DeplacerZozor DeplacerZozor;
    struct DeplacerZozor
    {
        int haut;
        int droite;
        int bas;
        int gauche;
    };
    // Initialisation des variables
    DeplacerZozor AuClavier;
    AuClavier.haut = 0;
    AuClavier.droite = 0;
    AuClavier.bas = 0;
    AuClavier.gauche = 0;

    // Répétition des touches
    SDL_EnableKeyRepeat(10, 10);

    int continuer = 1;
    SDL_Event event;

    while (continuer)
    {
        // On attend tous les évènements, on les enregistre

        while (SDL_PollEvent(&event)) /* Récupèration de l'évènement dans event */
        {
            switch(event.type) /* Test du type d'évènement */
            {
                case SDL_QUIT: /* Si c'est un évènement de type "Quitter" */
                    continuer = 0;
                    break;

                case SDL_KEYDOWN: /* Si appui d'une touche */
                    switch (event.key.keysym.sym)
                    {
                        case SDLK_ESCAPE: /* Appui sur la touche Echap, on arrête le programme */
                            continuer = 0;
                            break;
                        case SDLK_UP:
                            if (position_zozor.y > 0)
                            {
                                AuClavier.haut = 1;
                            }
                            break;
                        case SDLK_DOWN:
                            AuClavier.bas = 1;
                            break;
                        case SDLK_LEFT:
                            if (position_zozor.x > 0)
                            {
                                AuClavier.gauche = 1;
                            }
                            break;
                        case SDLK_RIGHT:
                            AuClavier.droite = 1;
                            break;
                        default:
                            break;
                    }
                    break;
                default:
                    break;
            }
        }


        // On traite les évènements

        if (AuClavier.haut)
            position_zozor.y--;
        if (AuClavier.droite)
            position_zozor.x++;
        if (AuClavier.bas)
            position_zozor.y++;
        if (AuClavier.gauche)
            position_zozor.x--;

        // On nettoie les évènements

        AuClavier.haut = 0;
        AuClavier.droite = 0;
        AuClavier.bas = 0;
        AuClavier.gauche = 0;


        SDL_BlitSurface(fond, NULL, ecran, &position_fond);
        SDL_BlitSurface(zozor, NULL, ecran, &position_zozor);

        SDL_Flip(ecran);
    }

    SDL_FreeSurface(zozor);
    SDL_FreeSurface(fond);
    SDL_Quit();

    return EXIT_SUCCESS;
}

Mais en fait, tout ce qu'il fait ça fait pareil, à savoir : Zozor ne peut pas bouger en diagonale.

Mais je pense que ça doit venir du fait que toi tu ne sort de la boucle qu'au bout d'un certain temps (genre 500 milisecondes) grâce au temps géré par la SDL.
Je me trompe ?

Hors ligne

#39 Le 18/11/2006, à 22:15

Piwaï[INSA]

Re : [Résolu] Problème avec la compilation de Code::Blocks

Hum. Je ne crois pas.

Honetement je ne sais pas trop quoi te dire.

Essaie d'enlever le EnableKeyRepeat(10,10) au début,

tu enlève aussi la partie "// On nettoie les évènements".

Enfin, après :  case SDL_KEYDOWN: /* Si appui d'une touche */

Tu ajoute une section :
case SDL_KEYUP: /* Si relache une touche */
Dans laquelle tu gère les évenements de touche relachée.

Comme ca, tant qu'on laisse une touche enfoncée, le personnage avancera.
Après, il faudra en plus définir une vitesse de déplacement, dépendant du temps, au lieu des x++,y++,x-- et y--....

Mais tu ferais mieux de poser ces questions sur les forums sdz smile


http://www.piwai.info
Découvrez 2H4U (Too Hard For You) : http://www.sourceforge.net/projects/toohardforyou
et OpenGF : http://www.sourceforge.net/projects/opengf

Hors ligne

#40 Le 18/11/2006, à 23:07

Bogoris

Re : [Résolu] Problème avec la compilation de Code::Blocks

C'est bon, j'ai tout compris, merci beaucoup.
Donc je peux faire avec SDL_PollEvent, ici, sans la gestion de la vitesse (car j'ai pas encore appris à maîtriser le temps avec la SDL), et du coup, la vitesse doit dépendre de l'ordi ^^ :

#include <stdlib.h>
#include <stdio.h>
#include <SDL/SDL.h>
#include <SDL/SDL_image.h>


int main(int argc, char *argv[])
{
    long const SCREEN_WIDTH = 400;
    long const SCREEN_HEIGHT = 300;

    if (SDL_Init(SDL_INIT_VIDEO) == -1) // Démarrage de la SDL. Si erreur alors...
    {
        fprintf(stderr, "Erreur d'initialisation de la SDL : %s\n", SDL_GetError()); // Ecriture de l'erreur
        exit(EXIT_FAILURE); // On quitte le programme
    }

    // Titre de la fenêtre
    SDL_WM_SetCaption("Ma super fenêtre SDL !", NULL);

    // Ouverture du mode vidéo et création de la surface "ecran"
    SDL_Surface *ecran = NULL; // Le pointeur qui va stocker la surface de l'écran
    ecran = SDL_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
    if (ecran == NULL) // Si l'ouverture a échoué, on écrit l'erreur et on arrête
    {
        fprintf(stderr, "Impossible de charger le mode vidéo : %s\nq", SDL_GetError());
        exit(EXIT_FAILURE);
    }

    SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 122, 50));

    // Fond

    SDL_Surface *fond = NULL;
    fond = SDL_CreateRGBSurface(SDL_HWSURFACE, SCREEN_WIDTH, SCREEN_HEIGHT, 32, 0, 0, 0, 0);
    SDL_FillRect(fond, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));

    SDL_Rect position_fond;
    position_fond.x = 0;
    position_fond.y = 0;


    // Zozor

    SDL_Surface *zozor = NULL;
    zozor = SDL_LoadBMP("zozor.bmp");
    SDL_SetColorKey(zozor, SDL_SRCCOLORKEY, SDL_MapRGB(zozor->format, 0, 0, 255));

    SDL_Rect position_zozor;
    position_zozor.x = 0;
    position_zozor.y = 0;


    // Déplacer Zozor
    typedef struct DeplacerZozor DeplacerZozor;
    struct DeplacerZozor
    {
        int haut;
        int droite;
        int bas;
        int gauche;
    };
    // Initialisation des variables
    DeplacerZozor AuClavier;
    AuClavier.haut = 0;
    AuClavier.droite = 0;
    AuClavier.bas = 0;
    AuClavier.gauche = 0;

    int continuer = 1;
    SDL_Event event;

    while (continuer)
    {
        // On attend tous les évènements, on les enregistre

        while (SDL_PollEvent(&event)) /* Récupèration de l'évènement dans event */
        {
            switch(event.type) /* Test du type d'évènement */
            {
                case SDL_QUIT: /* Si c'est un évènement de type "Quitter" */
                    continuer = 0;
                    break;

                case SDL_KEYUP:
                    switch (event.key.keysym.sym)
                    {
                        case SDLK_UP:
                            AuClavier.haut = 0;
                            break;
                        case SDLK_DOWN:
                            AuClavier.bas = 0;
                            break;
                        case SDLK_LEFT:
                            AuClavier.gauche = 0;
                            break;
                        case SDLK_RIGHT:
                            AuClavier.droite = 0;
                            break;
                        default:
                            break;
                    }
                    break;

                case SDL_KEYDOWN: /* Si appui d'une touche */
                    switch (event.key.keysym.sym)
                    {
                        case SDLK_ESCAPE: /* Appui sur la touche Echap, on arrête le programme */
                            continuer = 0;
                            break;
                        case SDLK_UP:
                            if (position_zozor.y > 0)
                            {
                                AuClavier.bas = 0;
                                AuClavier.haut = 1;
                            }
                            break;
                        case SDLK_DOWN:
                            AuClavier.haut = 0;
                            AuClavier.bas = 1;
                            break;
                        case SDLK_LEFT:
                            if (position_zozor.x > 0)
                            {
                                AuClavier.droite = 0;
                                AuClavier.gauche = 1;
                            }
                            break;
                        case SDLK_RIGHT:
                            AuClavier.gauche = 0;
                            AuClavier.droite = 1;
                            break;
                        default:
                            break;
                    }
                    break;
                default:
                    break;
            }
        }


        // On traite les évènements

        if (AuClavier.haut)
            position_zozor.y--;
        if (AuClavier.droite)
            position_zozor.x++;
        if (AuClavier.bas)
            position_zozor.y++;
        if (AuClavier.gauche)
            position_zozor.x--;


        SDL_BlitSurface(fond, NULL, ecran, &position_fond);
        SDL_BlitSurface(zozor, NULL, ecran, &position_zozor);

        SDL_Flip(ecran);
    }

    SDL_FreeSurface(zozor);
    SDL_FreeSurface(fond);
    SDL_Quit();

    return EXIT_SUCCESS;
}

Ou alors, autre possibilité : avec SDL_WaitEvent() : dans ce cas là, je garde la répétition des touches car si je ne la mets pas, Zozor n'avance plus après avoir avancé de son premier pixel dans une direction car il ne se passe plus d'évènements une fois la touche enfoncée (il faudrait alors la ré-enfoncer) :

#include <stdlib.h>
#include <stdio.h>
#include <SDL/SDL.h>
#include <SDL/SDL_image.h>


int main(int argc, char *argv[])
{
    long const SCREEN_WIDTH = 400;
    long const SCREEN_HEIGHT = 300;

    if (SDL_Init(SDL_INIT_VIDEO) == -1) // Démarrage de la SDL. Si erreur alors...
    {
        fprintf(stderr, "Erreur d'initialisation de la SDL : %s\n", SDL_GetError()); // Ecriture de l'erreur
        exit(EXIT_FAILURE); // On quitte le programme
    }

    // Titre de la fenêtre
    SDL_WM_SetCaption("Ma super fenêtre SDL !", NULL);

    // Ouverture du mode vidéo et création de la surface "ecran"
    SDL_Surface *ecran = NULL; // Le pointeur qui va stocker la surface de l'écran
    ecran = SDL_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
    if (ecran == NULL) // Si l'ouverture a échoué, on écrit l'erreur et on arrête
    {
        fprintf(stderr, "Impossible de charger le mode vidéo : %s\nq", SDL_GetError());
        exit(EXIT_FAILURE);
    }

    SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 122, 50));

    // Fond

    SDL_Surface *fond = NULL;
    fond = SDL_CreateRGBSurface(SDL_HWSURFACE, SCREEN_WIDTH, SCREEN_HEIGHT, 32, 0, 0, 0, 0);
    SDL_FillRect(fond, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));

    SDL_Rect position_fond;
    position_fond.x = 0;
    position_fond.y = 0;


    // Zozor

    SDL_Surface *zozor = NULL;
    zozor = SDL_LoadBMP("zozor.bmp");
    SDL_SetColorKey(zozor, SDL_SRCCOLORKEY, SDL_MapRGB(zozor->format, 0, 0, 255));

    SDL_Rect position_zozor;
    position_zozor.x = 0;
    position_zozor.y = 0;


    // Déplacer Zozor
    typedef struct DeplacerZozor DeplacerZozor;
    struct DeplacerZozor
    {
        int haut;
        int droite;
        int bas;
        int gauche;
    };
    // Initialisation des variables
    DeplacerZozor AuClavier;
    AuClavier.haut = 0;
    AuClavier.droite = 0;
    AuClavier.bas = 0;
    AuClavier.gauche = 0;

    int continuer = 1;
    SDL_Event event;

    // Répétition des touches
    SDL_EnableKeyRepeat(10, 10);

    while (continuer)
    {
        // On attend tous les évènements, on les enregistre

        SDL_WaitEvent(&event); /* Récupèration de l'évènement dans event */
        switch(event.type) /* Test du type d'évènement */
        {
            case SDL_QUIT: /* Si c'est un évènement de type "Quitter" */
                continuer = 0;
                break;

            case SDL_KEYUP:
                switch (event.key.keysym.sym)
                {
                    case SDLK_UP:
                        AuClavier.haut = 0;
                        break;
                    case SDLK_DOWN:
                        AuClavier.bas = 0;
                        break;
                    case SDLK_LEFT:
                        AuClavier.gauche = 0;
                        break;
                    case SDLK_RIGHT:
                        AuClavier.droite = 0;
                        break;
                    default:
                        break;
                }
                break;

            case SDL_KEYDOWN: /* Si appui d'une touche */
                switch (event.key.keysym.sym)
                {
                    case SDLK_ESCAPE: /* Appui sur la touche Echap, on arrête le programme */
                        continuer = 0;
                        break;
                    case SDLK_UP:
                        if (position_zozor.y > 0)
                        {
                            AuClavier.bas = 0;
                            AuClavier.haut = 1;
                        }
                        break;
                    case SDLK_DOWN:
                        AuClavier.haut = 0;
                        AuClavier.bas = 1;
                        break;
                    case SDLK_LEFT:
                        if (position_zozor.x > 0)
                        {
                            AuClavier.droite = 0;
                            AuClavier.gauche = 1;
                        }
                        break;
                    case SDLK_RIGHT:
                        AuClavier.gauche = 0;
                        AuClavier.droite = 1;
                        break;
                    default:
                        break;
                }
                break;
            default:
                break;
        }


        // On traite les évènements

        if (AuClavier.haut)
            position_zozor.y--;
        if (AuClavier.droite)
            position_zozor.x++;
        if (AuClavier.bas)
            position_zozor.y++;
        if (AuClavier.gauche)
            position_zozor.x--;


        SDL_BlitSurface(fond, NULL, ecran, &position_fond);
        SDL_BlitSurface(zozor, NULL, ecran, &position_zozor);

        SDL_Flip(ecran);
    }

    SDL_FreeSurface(zozor);
    SDL_FreeSurface(fond);
    SDL_Quit();

    return EXIT_SUCCESS;
}

Et là la vitesse de départ dépend de SDL_KEY_REPEAT.

Bon bah c'est bon j'ai plus de question, merci beaucoup pour ton aide smile .

Piwaï a écrit :

Mais tu ferais mieux de poser ces questions sur les forums sdz smile

C'est bien vrai tongue .

Merci encore big_smile

Hors ligne

#41 Le 18/11/2006, à 23:41

Piwaï[INSA]

Re : [Résolu] Problème avec la compilation de Code::Blocks

De rien smile

Sinon, j'ai un prob avec Code::blocks sous Linux: j'ai créé un nouveau projet (un autre mini jeu sdl), j'ai tout bien fait et tout, il m'ouvre bien les fichiers, mais le seul qu'il affiche, c'est main.c. Autrement dit, quand j'ouvre les autres, il me les ouvre comme s'il n'y avait rien dedans. Cependant, quand je lui demande de compiler, tout passe niquel (rmk, c'est indépendant, il utilise GCC). Ce qui est bizarre, c'est qu'il ne m'affiche que main.c, alors que celui ci se trouve dans le meme dossier que les autres, et j'ai vérifié dans le fichier xml monprojet.cpb, main.c est ajouté de la meme manière que les autres... bizarre...

Dernière modification par Piwaï[INSA] (Le 18/11/2006, à 23:43)


http://www.piwai.info
Découvrez 2H4U (Too Hard For You) : http://www.sourceforge.net/projects/toohardforyou
et OpenGF : http://www.sourceforge.net/projects/opengf

Hors ligne

#42 Le 19/11/2006, à 10:14

Bogoris

Re : [Résolu] Problème avec la compilation de Code::Blocks

Étrange... hmm
Faudrait peut-être aller demander tout ça sur les forums de Code::Blocks neutral.

Hors ligne