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

Développement 2D, 3D et Jeux Discussion :

Développement d'un jeu 2D avec C et SDL


Sujet :

Développement 2D, 3D et Jeux

  1. #21
    Membre chevronné
    Avatar de Anthony.Desvernois
    Homme Profil pro
    Ingénieur sécurité & risque
    Inscrit en
    Juin 2007
    Messages
    1 489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur sécurité & risque
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 489
    Points : 2 244
    Points
    2 244
    Par défaut
    Oubli les threads, ca t'est complétement inutile.
    Tu veux faire bouger un carré, tu dessines ton carré ailleurs, c'est tout ^^

  2. #22
    Membre averti Avatar de _SamSoft_
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    798
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 798
    Points : 345
    Points
    345
    Par défaut
    Ca je le sais Mais comme je veux bouger 5 carres en même temps Je ne sais pas comment faire sans utiliser les thread. En gros, pouvez vous me donner une technique permettant de faire bouger 5 carres en même temps car chaque carre représente une entité dans la carte.

    Merci d'avance

    PS: Les carres bougents sans l'intervention de l'utilisateur.

  3. #23
    Membre habitué
    Lycéen
    Inscrit en
    Juillet 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Âge : 33

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Juillet 2007
    Messages : 148
    Points : 145
    Points
    145
    Par défaut
    Tu les fais bouger les 5 à la suite. Car pour le faire bouger ça prend au pire quelques ms, et de toute façon tu ne rafraichis l'image que lorsque tu as fait bouger tout ce que tu voulais faire bouger, donc ça te donnera l'impression qu'ils bougent en même temps.

  4. #24
    Membre averti Avatar de _SamSoft_
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    798
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 798
    Points : 345
    Points
    345
    Par défaut
    En effet, je pensais encore qu'il fallait faire un rafraîchissement dès qu'un carre bouge donc c'est parfait je vais tester en les faisant bouger un par un et en rafraîchissant d'un coup

    Merci

    PS: Je ne poste pas encore résolu, j'aurais encore quelques questions de conceptions. Sinon je suis désolé pour tout à l'heure j'étais dans mes thread car je viens des logiciels, je n'avais jamais encore programmé de "jeux" (même si celui là n'en est pas vraiment un )

  5. #25
    Membre averti Avatar de _SamSoft_
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    798
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 798
    Points : 345
    Points
    345
    Par défaut
    Voilà, j'ai un nouveau petit problème. Je n'arrive pas à visualiser comment gérer la gestion de collisions, sachant que :

    -les carres se déplacent seuls
    -l'utilisateur n'agit pas
    -la carte fait au max : 640*480
    -taille d'un carre : 8*8
    -la collision ne se fait qu'entre carre

    Voilà mon code pour le moment et j'arrive pas à continuer. Ce que je pense faire c'est vérifier la position x et y de chaque carre et de placer le nouveau carre dans un emplacement différent de x et y de chacun des autres carres.

    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
    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
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include "const.h"
    #include "life.h"
     
    struct pos
    {
        int x;
        int y;
    };
     
    struct col
    {
        int r;
        int g;
        int b;
    };
     
    struct life
    {
        struct pos position;
        struct col color;
     
    };
     
    int createLife(SDL_Surface* screen)
    {
        int x = 0, y = 0, l = 254, m = 400;
        int r = 0, g = 0, b = 0, people = LIFES;
     
        SDL_Surface *perso[LIFES] = {NULL};
        SDL_Rect position;
     
        struct life humans[LIFES];
     
        srand((int)time(NULL));
     
        while(people > 0)
        {
            fprintf(stdout, "\nCreation de l'humain : %i\n", people);
     
            perso[people] = SDL_CreateRGBSurface(SDL_HWSURFACE, L_H_CASE, L_H_CASE, 32, 0, 0, 0, 0);
     
            x = rand() % (m+1);
     
            r = rand() % (l+1);
            g = rand() % (l+1);
            b = rand() % (l+1);
     
            y = rand() % (m+1);
     
            humans[people].position.x = x;
            humans[people].position.x = y;
     
            SDL_FillRect(perso[people], NULL, SDL_MapRGB(screen->format, r, g, b));
            SDL_BlitSurface(perso[people], NULL, screen, &position);
            SDL_Flip(screen);
     
            boucle();
     
            people--;
        }
        return 1;
    }
     
    void moveHuman()
    {
     
    }
     
    void boucle()
    {
        int a = 1, b = 10, c = 100, d = 0, i = 100;
     
        while(i > 0)
        {
            i--;
            d = a+b+c;
        }
    }
    Merci d'avance

  6. #26
    Membre chevronné
    Avatar de Anthony.Desvernois
    Homme Profil pro
    Ingénieur sécurité & risque
    Inscrit en
    Juin 2007
    Messages
    1 489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur sécurité & risque
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 489
    Points : 2 244
    Points
    2 244
    Par défaut
    Citation Envoyé par _SamSoft_ Voir le message
    Sinon je suis désolé pour tout à l'heure j'étais dans mes thread car je viens des logiciels, je n'avais jamais encore programmé de "jeux" (même si celui là n'en est pas vraiment un )
    Thread ou pas thread, les evenements n'arrivent pas au meme moment (jeux ou logiciel).
    Quand tu utilises des threads, les actions sont effectués en parallèles. Pas en même temps.

  7. #27
    Membre averti Avatar de _SamSoft_
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    798
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 798
    Points : 345
    Points
    345
    Par défaut
    Entendu Et pour mon problème de gestion de collisions, vous avez une petite idée ?

  8. #28
    Membre chevronné
    Avatar de Anthony.Desvernois
    Homme Profil pro
    Ingénieur sécurité & risque
    Inscrit en
    Juin 2007
    Messages
    1 489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur sécurité & risque
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 489
    Points : 2 244
    Points
    2 244
    Par défaut
    Tu peux utiliser une matrice qui représentera ta carte, cela résoud le problème

  9. #29
    Membre averti Avatar de _SamSoft_
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    798
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 798
    Points : 345
    Points
    345
    Par défaut
    Ouai j'ai pensé à cela Mais si je fais dans life.c :

    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
     
    int createLife(SDL_Surface* screen)
    {
        int x = 0, y = 0, l = 254, m = 400;
        int r = 0, g = 0, b = 0, people = LIFES;
     
        int map[L_H_CASE][L_H_CASE] = {}; /* map */
     
        SDL_Surface *perso[LIFES] = {NULL};
        SDL_Rect position;
     
        struct life humans[LIFES];
     
        srand((int)time(NULL));
     
        while(people > 0)
        {
            fprintf(stdout, "\nCreation de l'humain : %i\n", people);
     
            perso[people] = SDL_CreateRGBSurface(SDL_HWSURFACE, L_H_CASE, L_H_CASE, 32, 0, 0, 0, 0);
     
            x = rand() % (m+1);
     
            r = rand() % (l+1);
            g = rand() % (l+1);
            b = rand() % (l+1);
     
            y = rand() % (m+1);
     
            humans[people].position.x = x;
            humans[people].position.x = y;
     
            SDL_FillRect(perso[people], NULL, SDL_MapRGB(screen->format, r, g, b));
            SDL_BlitSurface(perso[people], NULL, screen, &position);
            SDL_Flip(screen);
     
            boucle();
     
            people--;
        }
        return 1;
    }
    Ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int map[L_H_CASE][L_H_CASE] = {}; /* map */
    Les carres ne sont plus que sur le coté haut gauche de l'écran. En gros on ne voit qu'un unique carré

    Merci d'avance

    PS: Si vous avez le temps pour un petit pseudo code, ce serait super sympa

  10. #30
    Membre averti Avatar de _SamSoft_
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    798
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 798
    Points : 345
    Points
    345
    Par défaut
    Voilà où j'en suis pour le moment :

    J'ai implémenté la gestion de collision qui ne fonctionne pas Tout les carres sont au même endroit

    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
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include "const.h"
    #include "life.h"
     
    struct pos
    {
        int x;
        int y;
    };
     
    struct col
    {
        int r;
        int g;
        int b;
    };
     
    struct life
    {
        struct pos position;
        struct col color;
     
    };
     
    int createLife(SDL_Surface* screen)
    {
        int x = 0, y = 0, l = 254, m = 400;
        int r = 0, g = 0, b = 0, people = LIFES;
        int map[L_H_CASE][L_H_CASE] = {};
        int i, j;
     
        SDL_Surface *perso[LIFES] = {NULL};
        SDL_Rect position;
     
        srand((int)time(NULL));
     
        while(people > 0)
        {
            fprintf(stdout, "\nCreation de l'humain : %i\n", people);
     
            perso[people] = SDL_CreateRGBSurface(SDL_HWSURFACE, L_H_CASE, L_H_CASE, 32, 0, 0, 0, 0);
     
            x = rand() % (m+1);
     
            r = rand() % (l+1);
            g = rand() % (l+1);
            b = rand() % (l+1);
     
            y = rand() % (m+1);
     
            for (i = 0 ; i < L_H_CASE ; i++)
            {
                for (j = 0 ; j < L_H_CASE ; j++)
                {
                    if (map[i][j] == VOID)
                    {
                        position.x = i;
                        position.y = j;
                        map[i][j] = HUMAN;
                    }
                }
            }
     
            SDL_FillRect(perso[people], NULL, SDL_MapRGB(screen->format, r, g, b));
            SDL_BlitSurface(perso[people], NULL, screen, &position);
            SDL_Flip(screen);
     
            boucle();
     
            people--;
        }
        return 1;
    }
     
    void boucle()
    {
        int a = 1, b = 10, c = 100, d = 0, i = 100;
     
        while(i > 0)
        {
            i--;
            d = a+b+c;
        }
    }
    Ce que je pense pour le moment c'est que c'est au niveau de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
            for (i = 0 ; i < L_H_CASE ; i++)
            {
                for (j = 0 ; j < L_H_CASE ; j++)
                {
                    if (map[i][j] == VOID)
                    {
                        position.x = i;
                        position.y = j;
                        map[i][j] = HUMAN;
                    }
                }
            }
    Que ca cloche, si vous pouviez m'aider

    Merci d'avance

    PS: const.h

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #ifndef CONST_H_
    #define CONST_H_
     
        #define L_H_CASE    8
        #define L_WINDOW    640
        #define H_WINDOW    480
        #define LIFES  20
     
        enum {UP, DOWN, LEFT, WRITE};
        enum {VOID, HUMAN};
     
     
    #endif /* CONST_H_ */

  11. #31
    Membre averti Avatar de _SamSoft_
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    798
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 798
    Points : 345
    Points
    345
    Par défaut
    Je poste résolu car je sais ce que je vais faire. Je vais poster un nouveau sujet
    pour mon problème.

    Merci pour tout

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Réponses: 10
    Dernier message: 07/04/2006, 10h03
  2. Choix important pour développement d'un jeu
    Par thecyril dans le forum Autres éditeurs
    Réponses: 4
    Dernier message: 13/02/2006, 19h32
  3. [Methodologie] Methode de développement d'un jeu en réseau
    Par gamerome dans le forum Développement 2D, 3D et Jeux
    Réponses: 7
    Dernier message: 26/01/2006, 13h10
  4. développement d'un jeu vidéo...
    Par youp_db dans le forum Développement 2D, 3D et Jeux
    Réponses: 3
    Dernier message: 30/10/2005, 17h09
  5. Réponses: 16
    Dernier message: 12/11/2004, 00h05

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