IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SDL Discussion :

Problème également avec IMG_Load


Sujet :

SDL

  1. #61
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 91
    Points : 67
    Points
    67
    Par défaut
    A oui bien vu !

    Je fais (un truc comme sa) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    int nombreDeCaseLargeur = LARGEUR_ECRAN / 15;
    xRandom = (rand() % (LARGEUR_ECRAN - nombreDeCaseLargeur + 15));
    Est-ce que c'est un truc dans ce genre ?

    A+

  2. #62
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 104
    Points : 113
    Points
    113
    Par défaut
    oui c'est exactement ça dont je voulais parler

  3. #63
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 91
    Points : 67
    Points
    67
    Par défaut
    Je vais aller bien lire en profondeur ce tuto (mieux que je l'ai lu la première fois :p), et je vais essayer de faire un truc.

    Je reposterais demain si j'ai des soucis

    Encore merci pour votre aide (peu de gens auraient tenu 5 pages à aider un nouveau en programmation )

    A+

  4. #64
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 104
    Points : 113
    Points
    113
    Par défaut
    c'est normal voyons, dis moi ce que tu auras fait demain et si tu à d'autres problèmes postes les sur ce même topic.

  5. #65
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 91
    Points : 67
    Points
    67
    Par défaut
    Me revoilou :p

    J'ai réussis à réglé le problème des pommes (je sais pas trop comment -> j'ai bidouillé :p).

    Par contre même en lisant attentivement le cours du site, je n'arrive pas à faire ma propre formule pour gérer le positionnement aléatoire de la pomme.

    J'aimerais que à partir de ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    xRandom = (rand() % (LARGEUR_ECRAN - 1 + 1)) + 15;
    yRandom = (rand() % (HAUTEUR_ECRAN - 1 + 1)) + 15;
    J'arrive à faire apparaitre une pomme à un abscisse et ordonnée qui soit un multiple de 15 (pour que mon serpent puisse passer dessus), qu'il ne puisse pas être mis en dehors de l'écran, et qu'il soit générer à un endroit où n'est pas le serpent (pour pas que le serpent masque la pomme).

    Une autre question, comment faire pour savoir si un nombre divisé par 5 (par exemple) est un entier ?
    Tout les 5 pommes mangés, je veux augmenter la vitesse, donc il faut que je sache si le nombre actuel de pomme mangé divisé par 5 donne un entier (et donc j'augmente la vitesse).

    A+

  6. #66
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    J'arrive à faire apparaitre une pomme à un abscisse et ordonnée qui soit un multiple de 15
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    xRandom = (rand() % (LARGEUR_ECRAN / 15)) * 15;
    yRandom = (rand() % (HAUTEUR_ECRAN / 15)) * 15;
    comment faire pour savoir si un nombre divisé par 5 (par exemple) est un entier ?
    Avec le reste de la division entière (opérateur modulo %) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (NbPommesMangees % 5 == 0)
    {
        // NbPommesMangees est un multiple de 5
    }

  7. #67
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 104
    Points : 113
    Points
    113
    Par défaut
    Une autre question, comment faire pour savoir si un nombre divisé par 5 (par exemple) est un entier ?
    Tout les 5 pommes mangés, je veux augmenter la vitesse, donc il faut que je sache si le nombre actuel de pomme mangé divisé par 5 donne un entier (et donc j'augmente la vitesse).
    pourquoi ce compliquer la vie, tu fait simplement dans ta boucle principal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    while (pomme == 5)
    {
    vitesse += 100;
    pomme = 0;
    }

  8. #68
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 91
    Points : 67
    Points
    67
    Par défaut
    Vous êtes des chefs, mais alors là vraiment MERCI.

    J'ai jamais vu un forum aussi sympa, ou les réponses sont rapides, clair net et ... précis

    Avec ces deux lignes de codes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    xRandom = (rand() % (LARGEUR_ECRAN / 15)) * 15;
    yRandom = (rand() % (HAUTEUR_ECRAN / 15)) * 15;
    On est sur que la pomme ne sera pas blittée en dehors de l'écran ?

    Encore merci !

    A+ et .... bonne nuit :p

    EDIT: LeTsIrGoD >> Je n'y avais pas pensé, tu as raison sa va résoudre mon problème

  9. #69
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 104
    Points : 113
    Points
    113
    Par défaut
    On est sur que la pomme ne sera pas blittée en dehors de l'écran ?
    oui car on divise la largeur et la hauteur par carrée de 15 pixels donc ça ne pourras pas sortir de l'ecran.

  10. #70
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 91
    Points : 67
    Points
    67
    Par défaut
    Bonjour

    J'ai réussis à gérer la vitesse du serpent, et maintenant j'essaie de faire en sorte que la pomme ne soit pas blitté au même endroit que le serpent (plus le serpent sera grand, et plus il y aura de chance que la pomme soit blitter dessus).

    J'ai coder un truc un peu barbare (avec un do ... while).
    Voici ce que j'ai fais (sa marche pas bien sur :p)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    do
                {
                    /* Je fais sa pour éviter que la pomme soit choisit là
                    où il y a le serpent, comme sa on est sur que la pomme
                    ne sera jamais caché par le serpent ! */
                    positionPomme.x = (rand() % (LARGEUR_ECRAN / 15)) * 15;
                    positionPomme.y = (rand() % (HAUTEUR_ECRAN / 15)) * 15;
                }while(for(i=0;i <= nombreDeCorp;i++)
                {
                    positionSerpent[i].x != positionPomme.x;
                    positionSerpent[i].y != positionPomme.y;
                });
    En faite je commence avec mon do ... et ensuite dans mon while j'essaie de lui dire que si la pomme est sur le serpent, on refait un tirage (jusqu'a ce que la pomme ne soit pas sur lui )

    Quel est la meilleur manière de coder sa ?

    A+

  11. #71
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 104
    Points : 113
    Points
    113
    Par défaut
    le mieu à faire n'est pas comme ça, tu devrait plutot tester la sortis de ton nombre aleatoire x et y et si ça n'est pas egal a la position d'un membre du serpent on continue sinon ça ne fait rien et ça attend un prochain tour de boucle principal. (ça te permet de gérer un affichage des pommes un peu moin systématique).

  12. #72
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 91
    Points : 67
    Points
    67
    Par défaut
    Oui, j'y avais pensé, mais j'avais peur que sa fasse un vide et pendant 1 secondes il n'y est pas de pomme

    Si je souhaite faire un pause quand le joueur appuie sur entré, comment je fais pour tout stoper (que plus rien ne bouge :p) ?

    A+

  13. #73
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 104
    Points : 113
    Points
    113
    Par défaut
    tu block ta boucle principal est tu met vitesse serpent à 0 comme ça le serpent n'avance plus et les pommes n'apparaissent plus.

  14. #74
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Pour ton problème de boucle, il suffit de placer le test (ta boucle for) dans une fonction.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    bool InSerpent(int X, int Y)
    {
        for(i=0;i <= nombreDeCorp;i++)
        {
            if ((positionSerpent[i].x == X) && (positionSerpent[i].y == Y))
                return true;
        }
     
        return false;
    }
     
    ...
     
    do
    {
        // Générer les coordonnées de la pomme
     
    } while (InSerpent(positionPomme.x, positionPomme.y));

  15. #75
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 104
    Points : 113
    Points
    113
    Par défaut
    Si je souhaite faire un pause quand le joueur appuie sur entré, comment je fais pour tout stoper (que plus rien ne bouge :p) ?
    mieu tu pourrais faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    //...
    case : SDLK_Return
    vitesseSerpent = 0;
    blitterLesPommes : 0;
    break;
    //...
    et dans ta boucle à l'endroit ou tu blitte la pomme tu entour d'un if :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if (blitterLesPommes)
    {
    //... fonction random 
    //...
    }

  16. #76
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 91
    Points : 67
    Points
    67
    Par défaut
    Merci de vos réponses (on va y arriver :p)

    Laurent Gomila >> Dans mon main.h il y a ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    #ifndef MAIN_H
     
    #include <stdlib.h>
    #include <stdio.h>
    #include <SDL/SDL.h>
    #include <SDL/SDL_image.h>
    #include <SDL/SDL_ttf.h>
    #include <FMOD/fmod.h>
     
    #define LARGEUR_ECRAN 450
    #define HAUTEUR_ECRAN 375
    #define NBRE_DE_BIT   32
    #define HAUTEUR_SPRITE 15
    #define LARGEUR_SPRITE 15
    #define LARGEUR_CADRE_GAMEOVER 200
    #define HAUTEUR_CADRE_GAMEOVER 200
     
    /* On défini une variable "Point" qui nous servira pour avoir toutes
    les coordonnées des parties du serpent et aussi des Pommes etc. */
    typedef struct
    {
        int x;
        int y;
    }Position;
     
    //Les directions dans lesquels le serpent peut aller
    enum{BAS,GAUCHE,DROITE,HAUT};
     
    /* PROTOTYPE DES FONCTIONS */
    void deplacerSerpent(int direction, SDL_Rect positionSerpent[], SDL_Rect *positionPomme, int *nombreDeCorp, int *gameOver, int *pomme);
    bool pommeDansSerpent(int X, int Y, int nombreDeCorp);
    #endif /* !MAIN_H */
    Et mon compile me met : Syntax error before "pommeDansSerpent".
    Je ne vois pas ce qui ne va pas ?

    LeTsIrGoD >> Je vais tester

    A+

  17. #77
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 104
    Points : 113
    Points
    113
    Par défaut
    c'est normal tu programme en C donc tu n'as pas le type bool comme en C++
    donc met un type long ou int à la place.

  18. #78
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Si tu compiles en C non 99 tu n'as probablement pas le type bool, utilise int.

  19. #79
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 91
    Points : 67
    Points
    67
    Par défaut
    Ok, voila ce que j'ai fais (je pensais que bool existait en C :s) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    int pommeDansSerpent(int X, int Y, int nombreDeCorp, SDL_Rect positionSerpent[])
    {
        int i = 0;
        for(i=0;i <= nombreDeCorp;i++)
        {
            if ((positionSerpent[i].x == X) && (positionSerpent[i].y == Y))
                //Sa veut dire que la pomme est sur le serpent
                return 0;
        }
        //On retourne 1 (car c'est bon)
        return 1;
    }
    Et quand j'appelle la fonction je fais sa :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    do
                {
                    /* Je fais sa pour éviter que la pomme soit choisit là
                    où il y a le serpent, comme sa on est sur que la pomme
                    ne sera jamais caché par le serpent ! */
                    positionPomme.x = (rand() % (LARGEUR_ECRAN / 15)) * 15;
                    positionPomme.y = (rand() % (HAUTEUR_ECRAN / 15)) * 15;
                }while(pommeDansSerpent(positionPomme.x,positionPomme.y,nombreDeCorp,&positionSerpent) < 1);
    Je test si la fonction retourne 0 ou pas (si elle retourne 0 alors on fait un autre tirage !).

    Sinon pour la pause, j'ai même pas besoin de la variable blitterLesPommes, car si mon serpent n'avance plus (car j'ai réduit la vitesse), alors on est sur qu'il ne pourra pas aller manger la pomme (étant donné qu'il avance pas).

    J'essaie de faire ce que tu m'a dit (pour la pause )

    A+

  20. #80
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 104
    Points : 113
    Points
    113
    Par défaut
    ça veut dire que pendant la pause les pommes continueront de ce bitter à un endroit aleatoire ? je te conseille quand même de faire comme si ça blocker aussi l'affichage des pommes pour croire vraiment que le jeu est en "pause".

Discussions similaires

  1. Problème avec IMG_load
    Par erreipnaej dans le forum SDL
    Réponses: 11
    Dernier message: 16/11/2008, 11h41
  2. Problème mémoire avec une dll par chargement dynamique
    Par widze19 dans le forum C++Builder
    Réponses: 6
    Dernier message: 15/12/2003, 14h20
  3. problèmes bizarres avec jdbc
    Par jaimepasteevy dans le forum PostgreSQL
    Réponses: 8
    Dernier message: 12/12/2003, 13h00
  4. Problème requête avec UNION et ORDER BY
    Par Yann21 dans le forum Langage SQL
    Réponses: 12
    Dernier message: 12/12/2003, 12h02
  5. problème JSP avec JBuilder et Weblogic 7
    Par viny dans le forum JBuilder
    Réponses: 2
    Dernier message: 24/04/2003, 09h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo