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 :

Changement de coordonnées non pris en compte


Sujet :

SDL

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 24
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2019
    Messages : 35
    Points : 17
    Points
    17
    Par défaut Changement de coordonnées non pris en compte
    Bonjour, j'ai voulu rentré tout les coordonner de mes rectangle dans un tableaux de structure, ça à l'aire de fonctionner mais quand j'essaie de modifier des coordonner et de retracer tout le tableaux je ne fait que dessiner par dessus les rectangles initiaux,je pense que le problèmes vien du fait que je ne passe pas par des pointeurs mais vue que les strucutres sont dans le tableaux je ne voies pas comment je pourrais faire.
    Les fonction utilisé sont particulière, le filledRect prend en compte deux point pour tracer le rectangle mais ca ne devrait pas changer grand chose.
    Le code ne renvoie pas d'erreur et s'exécute normalement, seulement quand j'appuie sur "1" puis "2" je voit juste les rectangle changer de couleur un par un (un SDL_Delay pas nécessaire mais je voulais comprendre ce qui ce passait)
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
     
    #include "primlib.h"
    #include <stdlib.h>
    //
    #define PillarsNumber 5
    #define PillarsHeight 200
    #define PillarsWidth 15
    #define DisksNumber 5
    #define DisksHeight (PillarsHeight/DisksNumber)
    #define BaseHeight 20
     
    int main(int argc, char* argv[])
    {	
    	if(initGraph())
    	{
    		exit(3);
    	}
     
    	// 
    	typedef struct Disk Disk;
    	struct Disk 
    	{
    	int xUpLeft;
    	int yUpLeft;
    	int xDownRight;
    	int yDownRight;
    	};
    	Disk x[DisksNumber];
    	int DiskPerPillar[DisksNumber];
    	int DisksWidth = (PillarsWidth+(5*screenWidth()/(3*PillarsNumber+1)))/3;
    	//
     
    void DisplayDisks()
    {
    	for(int n=0; n < DisksNumber; n++)
    	{
    		filledRect((screenWidth()/(PillarsNumber+1)-(DisksWidth-PillarsWidth)/2)+n*(DisksWidth-PillarsWidth)/(2*DisksNumber), 
    		screenHeight()-BaseHeight-(n+1)*DisksHeight, 
    		(screenWidth()/(PillarsNumber+1)+PillarsWidth+(DisksWidth-PillarsWidth)/2)-n*(DisksWidth-PillarsWidth)/(2*DisksNumber), 
    		screenHeight()-BaseHeight-n*DisksHeight, WHITE);
    		//create strutc
    		x[n].xUpLeft = (screenWidth()/(PillarsNumber+1)-(DisksWidth-PillarsWidth)/2)+n*(DisksWidth-PillarsWidth)/(2*DisksNumber);
    		x[n].yUpLeft = screenHeight()-BaseHeight-(n+1)*DisksHeight;
    		x[n].xDownRight = (screenWidth()/(PillarsNumber+1)+PillarsWidth+(DisksWidth-PillarsWidth)/2)-n*(DisksWidth-PillarsWidth)/(2*DisksNumber);
    		x[n].yDownRight = screenHeight()-BaseHeight-n*DisksHeight;
    	}
    }
    //animation
    void animation(int KeyPressOne, int KeyPressTwo)
    {
    	x[DisksNumber-KeyPressOne].xUpLeft = (screenWidth()/(PillarsNumber+1)-(DisksWidth-PillarsWidth)/2)+(KeyPressTwo-1)*(DisksWidth-PillarsWidth)/(2*DisksNumber);
    	x[DisksNumber-KeyPressOne].yUpLeft = screenHeight()-BaseHeight-(DiskPerPillar[KeyPressTwo])*DisksHeight;
    	x[DisksNumber-KeyPressOne].xDownRight = (screenWidth()/(PillarsNumber+1)+PillarsWidth+(DisksWidth-PillarsWidth)/2)-(KeyPressTwo-1)*(DisksWidth-PillarsWidth)/(2*DisksNumber);
    	x[DisksNumber-KeyPressOne].yDownRight = screenHeight()-BaseHeight-(DiskPerPillar[KeyPressTwo])*DisksHeight;
    	DiskPerPillar[KeyPressTwo-1]++;
    }
    void movement()
    {
    	int KeyPressOne = getkey();
    	int KeyPressTwo = getkey();
    	if (KeyPressOne !=0 && KeyPressTwo !=0)
    	{
    		animation(KeyPressOne,KeyPressTwo);
    		for(int b=0;b<DisksNumber;b++)
    		{
    			filledRect(x[b].xUpLeft,x[b].yUpLeft,x[b].xDownRight,x[b].yDownRight,GREEN);
    			updateScreen();
    			SDL_Delay(500);
    		}
    	}
    }
     
    	for(int c=0;c<DisksNumber;c++)
    	{
    		if (c==0)
    		{
    			DiskPerPillar[c]= DisksNumber;
    		}
    		else
    		{
    			DiskPerPillar[c] = 0;
    		}
    	}
     
    	//Affichage
    	filledRect(0, 0, screenWidth() - 1, screenHeight() - 1, BLACK);
    	filledRect(0, screenHeight()-BaseHeight, screenWidth(), screenHeight(), YELLOW);
    	DisplayPillars();
    	DisplayDisks();
    	updateScreen();
    	movement();
    	SDL_Delay(5000);
     
    	return 0;
    }
    J'ai enlever le DisplayPillar afin d’alléger le code puisqu'il fonctionne bien ^^

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Un débogueur pourrait vous aider à vérifier les valeurs dans les tableaux, ou même, à voir quand elles changent.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 24
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2019
    Messages : 35
    Points : 17
    Points
    17
    Par défaut
    Justement elles ne changent pas, peux importe la touche sur la quel j'appuie

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut

    Désolé.

    Alors, placez un point d'arrêt sur le code où elles devraient changer (les coordonnées) et regardez les valeurs des différentes variables entrant en jeu.
    Il arrive que ce soit :
    • le nom appel de la fonction ;
    • une conversion float vers int qui fait tout foirer.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 24
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2019
    Messages : 35
    Points : 17
    Points
    17
    Par défaut
    Puisque les valeur ne changeait pas j'ai essayer ceci :
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
     
    #include "primlib.h"
    #include <stdlib.h>
    //
    #define PillarsNumber 5
    #define PillarsHeight 200
    #define PillarsWidth 15
    #define DisksNumber 5
    #define DisksHeight (PillarsHeight/DisksNumber)
    #define BaseHeight 20
    //
    typedef struct Disk Disk;
    struct Disk 
    {
    int xUpLeft;
    int yUpLeft;
    int xDownRight;
    int yDownRight;
    };
    Disk *position[DisksNumber];
     
     
     
     
    int main(int argc, char* argv[])
    {	
    	if(initGraph())
    	{
    		exit(3);
    	}
     
    	// 
    	int DiskPerPillar[DisksNumber];
    	int DisksWidth = (PillarsWidth+(5*screenWidth()/(3*PillarsNumber+1)))/3;
    	//
    void DisplayPillars()
    {	
    	for(int i=0; i < PillarsNumber; i++)
    	{
    		filledRect((i+1)*screenWidth()/(PillarsNumber+1)-(PillarsWidth/4), screenHeight()-PillarsHeight-BaseHeight, 				(i+1)*screenWidth()/(PillarsNumber+1)+(PillarsWidth/4), screenHeight()-BaseHeight, RED);
     
    	}
     
    }
     
    void DisplayDisks()
    {
    	for(int n=0; n < DisksNumber; n++)
    	{
    		filledRect((screenWidth()/(PillarsNumber+1)-(DisksWidth-PillarsWidth)/2)+n*(DisksWidth-PillarsWidth)/(2*DisksNumber), 
    		screenHeight()-BaseHeight-(n+1)*DisksHeight, 
    		(screenWidth()/(PillarsNumber+1)+PillarsWidth+(DisksWidth-PillarsWidth)/2)-n*(DisksWidth-PillarsWidth)/(2*DisksNumber), 
    		screenHeight()-BaseHeight-n*DisksHeight, WHITE);
    		//create strutc
    		position[n]->xUpLeft = (screenWidth()/(PillarsNumber+1)-(DisksWidth-PillarsWidth)/2)+n*(DisksWidth-PillarsWidth)/(2*DisksNumber);
    		position[n]->yUpLeft = screenHeight()-BaseHeight-(n+1)*DisksHeight;
    		position[n]->xDownRight = (screenWidth()/(PillarsNumber+1)+PillarsWidth+(DisksWidth-PillarsWidth)/2)-n*(DisksWidth-PillarsWidth)/(2*DisksNumber);
    		position[n]->yDownRight = screenHeight()-BaseHeight-n*DisksHeight;
    	}
    }
    //animation
    void animation(int KeyPressOne, int KeyPressTwo)
    {
    	position[KeyPressOne]->xUpLeft = (screenWidth()/(PillarsNumber+1)-(DisksWidth-PillarsWidth)/2)+(KeyPressTwo-1)*(DisksWidth-PillarsWidth)/(2*DisksNumber);
    	position[KeyPressOne]->yUpLeft = screenHeight()-BaseHeight-(DiskPerPillar[KeyPressTwo]+1)*DisksHeight;
    	position[KeyPressOne]->xDownRight = (screenWidth()/(PillarsNumber+1)+PillarsWidth+(DisksWidth-PillarsWidth)/2)-(KeyPressTwo-1)*(DisksWidth-PillarsWidth)/(2*DisksNumber);
    	position[KeyPressOne]->yDownRight = screenHeight()-BaseHeight-(DiskPerPillar[KeyPressTwo])*DisksHeight;
    	DiskPerPillar[KeyPressTwo-1]++;
    }
    void movement()
    {
    	int KeyPressOne = getkey();
    	int KeyPressTwo = getkey();
    	if (KeyPressOne !=0 && KeyPressTwo !=0)
    	{
    		animation(KeyPressOne,KeyPressTwo);
    		for(int b=0;b<DisksNumber;b++)
    		{
    			filledRect(position[b]->xUpLeft,position[b]->yUpLeft,position[b]->xDownRight,position[b]->yDownRight,GREEN);
    			updateScreen();
    			SDL_Delay(500);
    		}
    	}
    }
     
    	for(int c=0;c<DisksNumber;c++)
    	{
    		if (c==0)
    		{
    			DiskPerPillar[c]= DisksNumber;
    		}
    		else
    		{
    			DiskPerPillar[c] = 0;
    		}
    	}
     
    	//Affichage
    	filledRect(0, 0, screenWidth() - 1, screenHeight() - 1, BLACK);
    	filledRect(0, screenHeight()-BaseHeight, screenWidth(), screenHeight(), YELLOW);
    	DisplayPillars();
    	DisplayDisks();
    	updateScreen();
    	movement();
    	SDL_Delay(5000);
     
    	return 0;
    }
    Le code ne renvoie plus d'erreur mais au lancement j'ai un segmentation error core dumped. J'ai cru comprendre que ca venait d'un pointer ou d'un probleme avec le tableaux mais je ne trouve pas

  6. #6
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Désolé d'insister, mais l'utilisation d'un débogueur vous aidera énormément. Voici un cours pour vous initier à la pratique.
    J'insiste, car le débogueur montre là où l'erreur de segmentation survient et permet d'afficher les valeurs des variables entrant en jeu dans la cause de l'erreur.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    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 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    C'est quoi ce compilo que tu utilises pour accepter les nested/inner fonctions qui ne sont pas standards ?
    Il manque très clairement des bases du langage voire de l'algorithmie.
    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.

  8. #8
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    Citation Envoyé par LittleTatsumi Voir le message
    Puisque les valeur ne changeait pas j'ai essayer ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    Disk *position[DisksNumber];
    Le code ne renvoie plus d'erreur mais au lancement j'ai un segmentation error core dumped. J'ai cru comprendre que ca venait d'un pointer ou d'un probleme avec le tableaux mais je ne trouve pas
    1) Les variables globals c'est le mal
    2) Sinon vu la déclaration c'est un tableau de pointeur , donc tu doit allouer chaque élément (ou donc enlever le pointeur).
    D’où pourquoi tu as un segfault , vu que tu n'initialise pas le pointeur de chaque élément , les pointeurs pointe vers n'importe où donc Segfault

  9. #9
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 24
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2019
    Messages : 35
    Points : 17
    Points
    17
    Par défaut
    Au début je l'avais fait sans pointer mais les valeur ne changeais pas comme ej le voulais, à chaque lancement du programme leur valeur changeait comme si c'était des adresse.
    Pour allouer tout les éléments, il faut faire quelque chose comme ca ?
    Disk *position = {{DiskNulber},{DiskNulber},{DiskNulber},{DiskNulber}} ?
    Dans ce cas là il ne reconnait plus la déclaration.
    "les nested/inner fonctions" ? J'utilise le compileur stantard GCC/GNU je croies, on utilise pas directement de la SDL mais une bibliotheque qui l'utilise

  10. #10
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    Non , avec un fort et un malloc (et donc a la fin un for + free).
    Mais dans ton cas , tu n'as pas besoin de tableau de pointeur , donc je te conseille de l'enlever tout simplement.

  11. #11
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 24
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2019
    Messages : 35
    Points : 17
    Points
    17
    Par défaut
    Donc juste avec le tableaux de struct de mon premier code je devrais pouvoirs le faire ?
    Quand je regardais les valeurs elel ressemblait à 234x, 12004x, des valeur de se genre sachant que je les faisait apparaître en %d via un printf

    Ca fonctionne effectivement le problème viens des "getkeys"

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

Discussions similaires

  1. [9.4] Changement de port non pris en compte
    Par _vince_ dans le forum Administration
    Réponses: 1
    Dernier message: 07/02/2018, 14h17
  2. Changement avec jquery non pris en compte dans le codebehind
    Par soeursourire dans le forum ASP.NET
    Réponses: 4
    Dernier message: 23/08/2016, 10h51
  3. [réglé]changement d'état d'un radio bouton non pris en compte!
    Par leprogrammeurfou dans le forum ASP.NET
    Réponses: 2
    Dernier message: 12/06/2008, 14h32
  4. Changement de l'imprimante par défaut non pris en compte
    Par KRis dans le forum Composants VCL
    Réponses: 2
    Dernier message: 20/05/2008, 12h10
  5. Réponses: 4
    Dernier message: 27/02/2008, 16h30

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