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

C Discussion :

Déplacement Monstre en C


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Apprentie en programmation
    Inscrit en
    Novembre 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Apprentie en programmation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2017
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Déplacement Monstre en C
    Bonjour a tout le monde,
    Je programme actuellement un jeu avec la bibliothèque SDL 1.2 sur la base du sokaban game pour le déplacement et le décors (jeu disponible ici: https://uptobox.com/l9z1v1wnfpz5) mais j'ai un problème qui c'est posé quand j'ai essayer de rajouter des monstres....
    En effet l'objectif était de déplacer dans une direction aléatoire chaque monstre de façons indépendant mais sois le monstre ne bouge pas sois le jeu plante...
    le code de déplacement est actuellement celui ci:

    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
    void deplaceMobs(int carte[][NB_BLOCS_HAUTEUR], SDL_Rect *posi, int *PV)
    {
        int xdir = 0, ydir = 0;
     
        switch(rand()%4)
        {
        case 0:
            xdir = 1;
            break;
        case 1:
            xdir = -1;
            break;
        case 2:
            ydir = 1;
            break;
        case 3:
            ydir = -1;
            break;
        default:
            break;
        }
     
            if((carte[posi->x+xdir][posi->y+ydir]!=MUR && carte[posi->x+xdir][posi->y+ydir]!=MOB) && (carte[posi->x+xdir][posi->y+ydir]!=OBJECTIF && carte[posi->x+xdir][posi->y+ydir]!=PASSMUR)) {
                if(carte[posi->x+xdir][posi->y+ydir]==PLAYEUR)
                    (*PV)--;
                else
                {
                    carte[posi->x][posi->y]=CHEMIN;
                    carte[posi->x+xdir][posi->y+ydir]=MOB;
                }
           }
    }
    Le problème de ce code est que le jeu plante...
    Avec le debuggeur voici ce qui est afficher:

    Nom : erreur message.PNG
Affichages : 245
Taille : 4,7 Ko

    Nom : teste.PNG
Affichages : 243
Taille : 8,1 Ko

    Je ne comprend pas ce que cela veut dire....
    je lui envoie les mauvais paramètre?
    Actuellement je lui envoie ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(Coup)
    deplaceMobs(carte, &position, &PV);
    SDL_BlitSurface(Mobs, NULL, Screen, &position);
    Merci d'avance pour votre aide

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Si tes coordonnées de tableau sont "au bord", alors ajouter "1" va te sortir du tableau. Si cette adresse en dehors du tableau n'appartient pas à ton programme, l'OS va arrêter le programme.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  3. #3
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 376
    Points : 41 544
    Points
    41 544
    Par défaut
    La première chose à faire, c'est vérifier que carte[posi->x+xdir][posi->y+ydir] existe bel et bien.
    Vérifier que 0 <= posi->x+xdir && posi->x+xdir < NB_BLOCS_LARGEUR et 0 <= posi->y+ydir && posi->y+ydir < NB_BLOCS_HAUTEUR
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Apprentie en programmation
    Inscrit en
    Novembre 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Apprentie en programmation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2017
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par dinobogan Voir le message
    Si tes coordonnées de tableau sont "au bord", alors ajouter "1" va te sortir du tableau. Si cette adresse en dehors du tableau n'appartient pas à ton programme, l'OS va arrêter le programme.
    Non c'est pas cela le problème même si je sais que je doit contrôler se point mais même avec un seul monstre au milieu de l'écran le jeu plante alors que les limites sont respecter...

    Citation Envoyé par Médinoc Voir le message
    La première chose à faire, c'est vérifier que carte[posi->x+xdir][posi->y+ydir] existe bel et bien.
    Vérifier que 0 <= posi->x+xdir && posi->x+xdir < NB_BLOCS_LARGEUR et 0 <= posi->y+ydir && posi->y+ydir < NB_BLOCS_HAUTEUR
    Vérifier si la carte existe ? C'est a dire? Elle est bien charger et tout en plus je pense pas que se soit un problème avec l'envoi et la réception de la carte par la fonction car elle est basée sur le déplacement de mon joueur et lui marche très bien...
    D'ailleurs que veut dire la flèche jaune?

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 123
    Points : 33 023
    Points
    33 023
    Billets dans le blog
    4
    Par défaut
    Si c'est pas ça le problème, alors tu sais quel est le problème ?
    Non parce qu'un sigsev c'est exactement ça quoi que t'en penses, et si tu veux t'en assurer regarde justement les valeurs de tes variables quand il apparait.

    ps: PLAYEUR
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Apprentie en programmation
    Inscrit en
    Novembre 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Apprentie en programmation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2017
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Du calme j'ai juste dit "je pense" je dit pas que j'ai raison 😅
    J'ai dit sa car mon autre fonction au quelle j'envoie pratiquement la même chose marche bien de plus je ne connais pas cette erreur.
    Je vais essayer de vérifier si c'est pas la position qui est incorrect.

  7. #7
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 376
    Points : 41 544
    Points
    41 544
    Par défaut
    Je n'ai pas dit vérifier que la carte existe, mais vérifier que la case ciblée existe bien dans les limites de la carte.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Apprentie en programmation
    Inscrit en
    Novembre 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Apprentie en programmation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2017
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Merci tout le monde pour votre aide!j'ai pu voir que c'était une erreur de la position qui avais été modifié plus haut par erreur.
    Le problème est régler il faut juste corrigé les erreurs de la fonction mais le déplacement marche!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [API][MFC]Graphisme - Déplacement d'un image ???
    Par Alcarbone dans le forum MFC
    Réponses: 12
    Dernier message: 26/11/2003, 21h28
  2. Déplacement ou positionnement d'une fenêtre
    Par agl dans le forum C++Builder
    Réponses: 3
    Dernier message: 10/11/2003, 09h29
  3. Déplacement d'Objets
    Par NaDiA_SoFt dans le forum C++Builder
    Réponses: 6
    Dernier message: 20/09/2003, 14h28
  4. Déplacement "automatique" du curseur
    Par Amenofis dans le forum Composants VCL
    Réponses: 2
    Dernier message: 08/01/2003, 18h57
  5. Limiter le déplacement de la souris
    Par el_bouleto dans le forum C++Builder
    Réponses: 4
    Dernier message: 08/11/2002, 23h56

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