Partage
  • Partager sur Facebook
  • Partager sur Twitter

[SDL] Projet Jeu 2D

un ersatz de Donkey Kong

    23 octobre 2008 à 10:20:30

    Hello there !
    Je poste enfin sur ce forum après avoir parcourue pendant des heures les tutos du C, oui je sais il en manque mais bon, c'est le cour sur lequel j'avais beaucoup de base et celui qui m'amènerait vers SDL et mon pti projet personnel !

    Nous en venons donc à mes question, je vais faire court, je sais qu'il y a des fainéant ! Et vue que j'en suis un également, je sais qu'il est pénible de lire la vie de quelqu'un ! Çà tombe bien car j'ai juste besoin de conseil et d'indication, voir de petite ligne de code si vous avez la foi !

    Le but de mon projet, reproduire au moins un niveau de Donkey Kong dans sa mouture GameBoy, un petit bijoux qui me fascine depuis ma jeunesse ! J'en suis donc à la phase de réflexion pré-programmatoire si on peut dire durant laquelle je pose les problèmes que je rencontrerais, et donc, je me demande s'il y a des solutions toute faites assez simple ou si je vais devoir y réfléchir longuement ! Je sais qu'il est mieux de réfléchir soit même mais bon, je le ferais de toute manières si vous ne pouvez m'aider ! N'empêche que certaine question m'hérisse le poil !


    Le but du jeu :

    On dirige mario dans un niveau ou il faut arriver en haut sans se faire écraser par des tonneau lancé par donkey kong, mario cour, se baisse, saute, exécute des salto arrières, grimpe les échelles, ect...

    Première question : La gravité !
    En effet, cette petite question à presque une solution dans ma tête qui serait d'inclure dans chaque mouvement une ligne supplémentaire qui pousse le joueur vers le bas, mais alors vint le problème qui est que lorsqu'il saute, cette action doit attendre un peu... de même la chute ne doit pas être trop brusque !

    Seconde question :
    l'animation !
    Chacune des actions de mario nécessite un jeu d'animation différente, j'ai récupérer la moitié des sprite nécessaire (avec mes pti doigt moue et paint) et donc la question serait comment animer un personnage qui bouge ?
    J'ai pensé à une variable qui augmenterais à chaque avancement, quant elle est pair, la jambe droite et devant, quant elle est impair, c'est la gauche, mais ça risque d'aller très vite donc je m'en remet à vos précieux conseil !

    Troisième question : Les collisions
    Ouhhhh là c'est le pire ! En effet le TP de Mateo (dieu sur terre pour tout les apprentie en C) montre comment le mettre en place avec un tableau d'un nombre très restreint de case, mais dans le cas d'un jeu ou chaque pixel compte, faut il faire un immense tableau ? et surtout, comment faire pour que le personnage soit un ''TOUT'' unique et que chaque partit de son corps soit susceptible de toucher et d'être bloqué par un mur !

    Quatrième problèmes
    : Gestion d'énnemies
    C'est un problème qui se posera à la fin, si déja j'arrive à réglé les trois autres, je suis heureux !!!

    Cinquième problèmes : Level design
    Très en rapport avec les collisions, comment organiser un niveau dont certaine partit sont intraversable, d'autre traversable par un coté, ect...



    J'avais d'autre petite énigme, mais en faite, je remarque qu'a l'instar des deux dernière question, je n'ai pas encore assez réfléchis dessus et que donc, si je n'ai rien à dire dessus, je n'en vois pas encore tout les problèmes !

    Ce que j'attends de vous ?
    bah heuuu, un peu d'aide xD et le must du must, serait le code source d'un jeu similaire que je pourrais observer pour en comprendre les mécanisme afin de pouvoir les reproduire dans mon projet ! Mais des conseils serait super également !!

    Merci d'avance à ceux qui répondront, même pour dire ''coucouuuuuuu'' car mine de rien, même ça, ça fait plaisir ^^

    a tchouuu!
    • Partager sur Facebook
    • Partager sur Twitter
      23 octobre 2008 à 10:31:04

      Pour ce qui est de l'animation, tu fait un enum avec les differentes étapes du mouvement.
      tu fait un timer et tu change d'image toutes les x millisecondes tant que la bouton de mouvement est appuyer.

      Pour les collisions, tu gere ca directement avec les images et leurs dimensions.

      un petit lien : Projet de RPG
      • Partager sur Facebook
      • Partager sur Twitter
        23 octobre 2008 à 10:32:41

        Bonjour,

        c'est un projet assez ambitieux, du moins tout dépend de ton niveau. As-tu déjà réalisé d'autre programmes en SDL ? Il est nécessaire d'être à l'aise avec la bibliothèque utilisé pour espérer arriver à quelque chose de concret.

        En dehors de la gestion de l'affichage avec la SDL, il est primordial de programmer de façon structurer, et donc si tu n'en a pas encore l'habitude, il faudra créer un maximum de fonction ayant chacune un rôle précis (géstion du saut, gestion des déplacements, gestion des événements...).

        Commence d'abord par définir chacune des fonctions du jeu : leurs paramètres, leurs utilités, la valeur qu'elles renvoient si il y en a une. Il faut que tu ais une idée précise de là où tu vas avant de commencer à coder.
        • Partager sur Facebook
        • Partager sur Twitter
          23 octobre 2008 à 10:38:16

          Oui t'inquiète pas j'ai un plan d'action ^^

          et j'ai déja réalisé un petit RPG en console donc j'ai pris l'habitude de bien tout séparer ! Si bien que sur ce coup j'aurais une organisation d'enfer, ce qui me manque c'est quelque idée sur la façon de régler les problème !
          Et naincendiaire m'a déjà offert deux bonne solutions sur lesquelles je plancherais au plus vite afin de les mettre en place ^^

          Mais n'hésitez pas à rajouter vos idées, j'en suis friant!
          • Partager sur Facebook
          • Partager sur Twitter
            23 octobre 2008 à 10:52:44

            Quelques solutions envisageable :
            Pour la gravité, une fonction qui gère cela. Si il n'y a rien au dessous de Mario et qu'il n'est pas en train de sauter, il tombe. On pourra d'ailleurs donner à cette fonction le rôle de gérer les sauts de Mario.



            Pour les animations, pareil une fonction. Déjà, je propose l'utilisation d'une structure pour tes images. Cette structure contient un tableau de SDL_Surface contenant toute les animations dans l'ordre. Cette structure contient une autre variable de type int, cette variable sert à stocker quel est l'image a afficher. A l'occasion, on va même ajouter la variable de la position.
            Prenons un exemple :
            typedef struct anim;
            struct anim
            {
                SDL_Surface **image; /* double pointeur car on va allouer dynamiquement le
                                     nombre d'image pour l'animation */
                SDL_Rect pos;
                int compteur;
            };
            
            /* la fonction qui affichera Mario devra donc faire quelque chose du genre : */
            SDL_BlitSurface(mario.image[mario.compteur], NULL, ecran, &mario.pos);
            

            J'éspère pour toi que tu maitrises les structures et l'allocation dynamique :-°
            • Partager sur Facebook
            • Partager sur Twitter
              23 octobre 2008 à 10:56:33

              merci beaucoup pour ce pti bout de code qui répond déjà beaucoup à certaine de mes questions, je vois un peu mieux comment gérer l'animation !

              mais pour tout avouer, dans un premier temps, mario sera un petit rectangle qui avance, je tacherais de gérer l'animation en dernier sinon je suis pas sortis xD
              • Partager sur Facebook
              • Partager sur Twitter
                23 octobre 2008 à 13:21:11

                Pour ta dernière questions sur les collisions, en utilisant une matrice de colision tu peux mettre dedans différentes valeurs pour indiquer qu'il n'y a de colision que dans un ou plusieurs sens déterminés par exemple.

                Je peux également te proposer de consulter les sources de mes jeux sur mon site : www.zeldaroth.fr (les sources sont accessibles dans les pages de téléchargement de mes jeux), c'est du C++, mais l'utilisation de la SDL reste identique (la SDL étant en C). Tu peux y trouver des réponses sur les animations et les collisions notamment, ainsi qu'une gestion possible des ennemis. Rien par contre sur les sauts 2D (mes jeux sont vus de dessus).
                • Partager sur Facebook
                • Partager sur Twitter
                  23 octobre 2008 à 14:34:14

                  Whaou merci je vais allez regarder ça avec une grande attention !
                  • Partager sur Facebook
                  • Partager sur Twitter
                    23 octobre 2008 à 14:36:17

                    Citation


                    Première question : La gravité !
                    En effet, cette petite question à presque une solution dans ma tête qui serait d'inclure dans chaque mouvement une ligne supplémentaire qui pousse le joueur vers le bas, mais alors vint le problème qui est que lorsqu'il saute, cette action doit attendre un peu... de même la chute ne doit pas être trop brusque !



                    La gravité, pas de probleme sur ce coup la : pense a Newton : si tu stockes, pour ton perso, sa position, ainsi que sa vitesse instantanée, tu peux gérer ça sans trop de soucis. Et il n'y a pas a "attendre que le mec soit en haut" pour le pousser vers le bas : il faut le pousser vers le bas sans arret.
                    -> s'il touche le sol, tu compenses la poussée (c'est la réaction au support)
                    -> s'il est en train de bondir, ce qui fait qui monte, c'est que sa vitesse instantanée, donnée lors de l'impulsion, est dirigée vers le haut, mais est recalculée par la poussée constante qu'est la gravité.
                    Regarde mon tuto (cf ma signature) §2.B.1. Chute libre d'une balle. pour une illustration de la loi de Newton.

                    Citation


                    Seconde question : l'animation !
                    Chacune des actions de mario nécessite un jeu d'animation différente, j'ai récupérer la moitié des sprite nécessaire (avec mes pti doigt moue et paint) et donc la question serait comment animer un personnage qui bouge ?
                    J'ai pensé à une variable qui augmenterais à chaque avancement, quant elle est pair, la jambe droite et devant, quant elle est impair, c'est la gauche, mais ça risque d'aller très vite donc je m'en remet à vos précieux conseil !



                    L'idée est bonne, et adaptable facilement. Mais au lieu de te baser sur une variable que tu augmentes, bases toi directement sur le temps.
                    SDL_GetTicks() te renvoie le nombre de milliemes de secondes passées depuis le début du programme.
                    A chaque frame, tu poses :

                    int t = SDL_GetTicks();

                    Puis, la frame du perso a faire apparaitre, c'est simplement

                    int frame = (t/V)%NBFRAMES;
                    avec V la vitesse d'animation finalement : plus V est grand, plus l'animation est grande. Si V vaut 1, alors ça ira a toute vitesse...
                    Essaie 300 ou 500 , 700 .... fait des tests :)
                    le modulo (%) te permettra de boucler : tu auras ainsi un nombre entre 0 et NBFRAMES-1
                    Il te suffit de blitter la frame "frame", et tu as ton animation.

                    Citation


                    Troisième question : Les collisions
                    Ouhhhh là c'est le pire ! En effet le TP de Mateo (dieu sur terre pour tout les apprentie en C) montre comment le mettre en place avec un tableau d'un nombre très restreint de case, mais dans le cas d'un jeu ou chaque pixel compte, faut il faire un immense tableau ? et surtout, comment faire pour que le personnage soit un ''TOUT'' unique et que chaque partit de son corps soit susceptible de toucher et d'être bloqué par un mur !



                    chaque pixel compte : oublie vite vite cette idée, ça t'apportera que des emmerdes.
                    Pour un monde carré, tu as le tilemapping, comme le tuto de matéo.
                    Pour des pentes, tu peux aussi ruser avec le tilemaping, mais tu peux aussi te baser sur une équation de droite...
                    Quant a la collision avec les caisses ou ennemis : AABB -> Axes Aligned Bounding Box, c'est suffisant.

                    Citation


                    Quatrième problèmes : Gestion d'énnemies
                    C'est un problème qui se posera à la fin, si déja j'arrive à réglé les trois autres, je suis heureux !!!



                    Il faut définir chaque ennemi comme un "automate", une machine a état, c'est pour ça qu'il est important d'avoir une structure sprite, avec plein de parametres, dont la position, le vecteur vitesse, et un état "statut"
                    • Partager sur Facebook
                    • Partager sur Twitter

                    Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

                      23 octobre 2008 à 20:47:23

                      Citation : fvirtman

                      La gravité, pas de probleme sur ce coup la : pense a Newton



                      Si Anc Delos Thoniel n'est pas en 2nd, il ne peut pas comprendre... :-°
                      • Partager sur Facebook
                      • Partager sur Twitter
                        23 octobre 2008 à 21:08:11

                        sympa ce topic
                        naincendiaire -> merci pour lien, ça va servir à plus d'un ^^ ...dont moi :lol: .
                        • Partager sur Facebook
                        • Partager sur Twitter
                          23 octobre 2008 à 23:02:20

                          Citation : gogohan

                          Si Anc Delos Thoniel n'est pas en 2nd, il ne peut pas comprendre... :-°



                          Et s'il l'est il ne connait la loi que de nom et ne sait pas encore à quoi elle correspond (enfin si ça a pas changé..).
                          • Partager sur Facebook
                          • Partager sur Twitter
                            24 octobre 2008 à 15:29:47

                            ça va j'ai de la barbe au menton, et tant qu'on tape pas dans de la loi de kepler appliqué, je pense pouvoir m'en sortir ^^

                            Sinon, je commence à mettre en place mes fichiers et mes idées, ça avance doucement, j'ai déjà l'écran de titre xD

                            Sinon j'ai encore quelque pti ennuie avec le charset, comment ce balader dedans et tout, mais faut dire que j'ai pas clairement regardé le code, donc c'est pas étonnant, j'ai compris l'idée en tout cas ^^

                            Je vous tiens au courant de ce que je fais de toute façon, qui sait, ça peut donner un jolie résultat !
                            • Partager sur Facebook
                            • Partager sur Twitter

                            [SDL] Projet Jeu 2D

                            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                            • Editeur
                            • Markdown