Partage
  • Partager sur Facebook
  • Partager sur Twitter

{C++} LimbEscape, Sokoban en 2d Isometrique.

Serez vous plus fort que les Limbs?

    26 décembre 2014 à 5:50:22

    Bonjour à tous, je m'appelle jimmy (bonjour jimmmmmmyyyyy) , hum... Donc 23 ans et toutes mes dents, je viens vous présenter un projet qui est en cour de développement depuis quelques temps maintenant. J'ai beaucoup apprit sur ce site concernant la programmation. D'ailleurs je n'en suis pas à mon premier projet.

    En savoir plus sur le projet

    Genèse

    Donc, Concrètement qu'est ce que je fais en ce moment et qui occupe mais nuit au grand damne de ma petite amie... Je développe un sokoban. Classique... oui! mais, attention! je ne le fais pas en 2d vu de dessus.Oui messieurs (et mesdames!) , je le développe en 2d isométrique. L'idée mes venues quand je me suis aperçu que tout les sokobans auxquelles on peut jouer, sont souvent des jeux en 2d classique, et comme je suis du genre à kiffer grave la 2d iso , je me suis tenter à réaliser ce projet. Ainsi mes principales motivations sont... Miss Pas de calais! ah non , ce n'est pas le sujet. plus sérieusement, je préfére largement les jeux en 2d que ceux en 3d , c'est donc tout naturellement que je me tourne vers la programmation de telles jeux.

    EDIT: Synopsie:

    Le personnage-joueur est victime d'un accident qui le plonge dans un profond coma. Entre la vie et la mort, il doit ce battre interieurement afin de survivre. Il revivra les instants forts de sa vie et devra les remettres en place dans son esprit afin de pouvoir se réveiller...

    Jeu basé sur "On voit defiler sa vie devant les yeux avant de mourir".

    Tips:pour l'histoire , le topic de ->mystogen-<, mon premier rpg 2d en équipe qui est malheureusement en standby , la raison ( nous  l'avons codé en SFML 1.6, la 2.0 est sortie, puis la 2.1... enfin gros soucis de compatibilité, c'est vraiment dommage, car si je m'en sortais mieux , je l'aurai surement finaliser.

    Généralités et avancement

    Le jeu sera donc un Sokoban, c'est à dire , pour ceux qui ne connaissent pas, un jeu qui consiste à emmener des caisses sur des objectifs prédéfini. Le joueur ne peut que pousser la caisse devant lui. il peut ainsi se retrouver coincer si il emmène une caisse du mauvais coté.

    Pour l'aspect technique de la chose. Du C++ et la SFML (quand on aime , on ne compte pas! :) ) 2.1 . Je réutilise quelques code que j'avais codé sur mystogen, et je les ai réadapter pour de l'isometrie 2d.

    Le jeu est actuellement en version alpha, ( le moteur est pratiquement terminé ) il me reste les graphismes à établir, et pourquoi pas donner un scénario à la chose.

    La souris est geré sur la carte avec un overlay et le systeme de pointage fonctionne parfaitement, maintenant je ne sais pas si je pourrai utiliser cette feature dans ce jeu... Au moins j'ai le code! ;)

    J'ai également sous le coude une suite de projet "limb", c'est à dire que je crée les outils dont j'ai besoin, Editeur de level, GUI ,  un système d'encapsulation de ressource est même à l'étude.

    Objectifs

    L'objectif principal de ce projet est comme la plupart des autres que j'ai réaliser...apprendre de mes erreurs. Quelques feature utiliser: fabriquer un gui sous forme de librairie externe afin de le réutiliser dans le jeu ( librairie déjà fonctionnelle).

    Apprendre à planifier les ajouts, afin de créer un système de version de logiciel.

    approfondir mes talents de graphiste car j'ai l'intention de tout réaliser seul!

    approfondir mes talents de guitariste car j'ai.... enfin vous avez compris! :)

    bref beaucoup d'objectif sur ce projet, c'est d'ailleurs pour cela que j'ai choisit le Sokoban, c'est un jeux qui demande un peu de reflexion sur sa conception objet mais reste néanmoins simple à appréhender. ce qui me laisse du temps et de l'energie pour me concentrer sur le reste.

    Le projet et son originalité

    Alors, mon sokoban vise tout le monde! du plus jeune au plus vieux, du plus imberbe au moins poilu... ah je m'égare! l'originalité du projet est avant tout le fait que le jeu se présente en 2D iso. Avec des animations (sisi!). Bon trêve de bavardage je vais coder...

    hein , on me dit que vous voulez des photos et tout? ok! :)

    Quelques Timelapse du boulot abattu: Ajout du joueur Ajout des elements  Ajout des Collision et autres elements

    Merci de ne pas me tenir rigueur des graphisme à l'heure actuelle, en effet, j'ai réalisé les quelques ressources rapidement afin de pouvoir bosser coté programmation. bien que le personnages animer ma bien pris 3j!

     Enfin, je ne suis pas un pro de la programmation , ainsi , je suis certain que vous trouverez certainement de mes ligne de codes bête voir absurde ,  mais pour moi tant que ça fait ce que je veux et qu'il n'y a pas de problemes de gestion de mémoire derrière...je suis content! :)

    je fournirai surement les sources sous licences libre common partage et modification  non commercial.

    Depot GITHUB

    voila , au plaisir! je vous tiendrai informer des avancées.

    -
    Edité par jimoniak 1 janvier 2015 à 20:27:02

    • Partager sur Facebook
    • Partager sur Twitter
    Avide et curieux de connaissance. Nouveau projet: LimbEscape , Sokoban en 2d isometrique Blog
    Anonyme
      26 décembre 2014 à 19:04:46

      hello !

      j'ai moi meme fait un jeu de sokoban en C il y a fort longtemps (donc en janvier-février dernier (2014))

      et là je dois dire, chapeau ! vouloir en faire un en C++ (donc OO oblige) et en iso !

      j'ai hate de tester :D

      bon courage ;) (j'essairais bien d'en faire un en python moi)

      • Partager sur Facebook
      • Partager sur Twitter
        26 décembre 2014 à 19:40:40

        Merci! :)

        Et puis tiens, tant que j'y suis, voici le zip de la derniere version en date.

        Download de la mort qui tue tout!

        Les controles:

        ZESD pour les 4 directions, (seront changeable ensuite pour plus de confort.)

        les flèche pour bouger la vue (pas très utile).

        Donc les prochains ajout, seront: chargement de cartes , precedemment créer dans un éditeur.

        petit mode histoire.

        j'ai dans l'optique de pourquoi pas créer un mode esbroufe avec un site , ou les score ( temps sur une carte donnée) seraient enregistré... a l'étude :)

        -
        Edité par jimoniak 26 décembre 2014 à 19:43:34

        • Partager sur Facebook
        • Partager sur Twitter
        Avide et curieux de connaissance. Nouveau projet: LimbEscape , Sokoban en 2d isometrique Blog
        Anonyme
          26 décembre 2014 à 20:49:05

          merci :)

          hélas, je ne peux lancer ni l'un ni l'autre des .exe, et aucune erreur ne s'affiche en console. de plus ni fichier .out / stderr / stdout :(

          • Partager sur Facebook
          • Partager sur Twitter
            26 décembre 2014 à 21:07:03

            tu as mingw d'installer? car il demande les dlls correspondantes :)

            EDIT Retente de telecharger , j'ai mis a jour le zip avec les dll de mingw necessaire.

            -
            Edité par jimoniak 26 décembre 2014 à 21:11:29

            • Partager sur Facebook
            • Partager sur Twitter
            Avide et curieux de connaissance. Nouveau projet: LimbEscape , Sokoban en 2d isometrique Blog
            Anonyme
              26 décembre 2014 à 22:54:02

              Oui j ai mingw car je code moi même en c c++ et pas mal d autres trucs

              OK je reesseyerais demain car la je suis sur mon téléphone ;)

              Sinon chapeau, j ai vu tes vidéos, pas mal vraiment !

              • Partager sur Facebook
              • Partager sur Twitter
                27 décembre 2014 à 16:00:52

                J'attends vos retours pour savoir si l'application fonctionne sur vos machines :)

                • Partager sur Facebook
                • Partager sur Twitter
                Avide et curieux de connaissance. Nouveau projet: LimbEscape , Sokoban en 2d isometrique Blog
                Anonyme
                  27 décembre 2014 à 16:28:28

                  je re dl et je te dis ;)

                  edit: marche toujours pas :'(

                  -
                  Edité par Anonyme 27 décembre 2014 à 16:29:42

                  • Partager sur Facebook
                  • Partager sur Twitter
                    27 décembre 2014 à 16:59:37

                    c'est étrange, ca marche sur 2 machines chez moi... :o( sur une 32 et 64bit je precise.

                     Edit:

                    Je continue sur ma lancée afin de completer le projet:

                    donc je vous presente LimbGUI , une librairie personnel qui me permet d'incorporer bouton et zone de saisie dans mes programmes.

                    voici quelques photos:

                    Voici le code du main de l'application utilisant la librairie :

                    #include <GUI.hpp>
                    
                    #include <iostream>
                    
                    
                    int main()
                    {
                    
                    
                         sf::RenderWindow fenetrePrincipale(sf::VideoMode(1024, 768), "Test isometrie");
                         fenetrePrincipale.setKeyRepeatEnabled(false);
                         lgui::ManagerGUI manager(&fenetrePrincipale);
                         sf::Texture textBoutonV;
                         sf::Texture textBoutonR;
                         sf::Font font;
                         font.loadFromFile("Timeless.ttf");
                    
                          lgui::ZoneSaisie saisie(font, sf::Vector2f(150,75),sf::Vector2f(100,100), sf::Color::Green ,sf::Color::Blue);
                          lgui::ZoneSaisie saisie2(font, sf::Vector2f(150,75),sf::Vector2f(300,100), sf::Color::Green ,sf::Color::Blue);
                    
                         textBoutonR.loadFromFile("boutonf.png");
                         textBoutonV.loadFromFile("boutond.png");
                    
                        sf::Texture acceuil;acceuil.loadFromFile("acceuil.png");
                        sf::Sprite acceuilspr;acceuilspr.setTexture(acceuil);
                    
                        lgui::Bouton test1(font,&textBoutonR,&textBoutonV);
                        test1.setTitre("Ok");
                        lgui::Bouton test2(font,&textBoutonR,&textBoutonV);
                        test2.setTitre("Annuler");
                        test1.setTailleTexte(15);
                        test2.setTailleTexte(15);
                        test1.setPosition(sf::Vector2f(200,300));
                        test2.setPosition(sf::Vector2f(400,300));
                         sf::Event event;
                         manager.setEvent(&event);
                         while (fenetrePrincipale.isOpen())
                        {
                    
                            while (fenetrePrincipale.pollEvent(event))
                            {
                                if (event.type == sf::Event::Closed)
                                    fenetrePrincipale.close();
                    
                            }
                    
                            manager.m_gestionnaireElement[0]->actif(sf::Vector2f(sf::Mouse::getPosition(fenetrePrincipale))); //les zones de saisie
                            manager.m_gestionnaireElement[1]->actif(sf::Vector2f(sf::Mouse::getPosition(fenetrePrincipale))); //leur fontionnement n'est pas encore implementer dans le manage();
                    
                            manager.manage();
                    
                            if(test1.actionner())
                            {
                                std::cout<<"Ok!"<<std::endl;
                            }
                             if(test2.actionner())
                            {
                    
                                std::cout<<"Annule!"<<std::endl;
                            }
                    
                            fenetrePrincipale.setView(fenetrePrincipale.getDefaultView());//Changement de vue pour dessiner l'interface.
                            fenetrePrincipale.clear();
                    
                            fenetrePrincipale.draw(acceuilspr);
                            manager.m_gestionnaireElement[0]->afficher(fenetrePrincipale);//
                            manager.m_gestionnaireElement[1]->afficher(fenetrePrincipale);//
                            manager.m_gestionnaireElement[2]->afficher(fenetrePrincipale);//
                            manager.m_gestionnaireElement[3]->afficher(fenetrePrincipale);//sera remplacer par une fonction  du manager.afficher();
                    
                    
                    
                            fenetrePrincipale.display();
                        }
                    
                        return EXIT_SUCCESS;
                    
                    
                    }
                    

                    Voila :) je pose pas le code de la librairie pour des raisons evidentes de secret national... :p

                    non, je le donnerai certainement quand il sera plus complet et optimisé.



                    -
                    Edité par jimoniak 27 décembre 2014 à 18:04:56

                    • Partager sur Facebook
                    • Partager sur Twitter
                    Avide et curieux de connaissance. Nouveau projet: LimbEscape , Sokoban en 2d isometrique Blog
                      28 décembre 2014 à 20:00:04

                      Bonjour tous, mise a jour aujourd'hui

                      alpha 1.1 :

                      *correction de bugs de collisions quand un caisse etait déjà sur un objectif

                      *ajout d'un logo dans la présentation

                      *Préparation du code pour devenir multiplateforme et pouvoir choisir la resolution (pas encore implementé)

                      A venir:

                      *Mise en place du menu (Jouer (mode histoire ou mode libre) - Option - Quitter)

                      *Mise en place de l'éditeur de puzzle

                      *systeme de choix du puzzle.

                      plus tard =>

                      * ajout d'un étage sur la carte afin de complexifier les puzzles et ajouter des possibilitées de gameplay . Le joueur pourr utiliser un caisse du niveau 0 pour faire un pont au 1er et ainsi passer dessus avec ou sans caisse. Possibilité de faire glisser un caisse sur une pente mais pas l'inverse...

                      voila le lien du dernier zip en date: LimbEscape LastDebug.

                      EDIT: je n'avais pas precisé , mais voici un des quelques fichier texte que j'ai "rédigé" avant de me lancer dans le projet ainsi que la maquette du jeu utra HD de la mort.

                      LimbEscape
                      
                      Descriptif du fichier:
                       	Ce fichier est le point de depart du projet, il fait office un peu de brainstorming pour ce jeu.
                      
                      Scenario(synopsie):
                      	Le personnage-joueur est victime d'un accident qui le plonge dans un profond coma. Entre la vie et la mort, il doit ce battre interieurement afin de survivre. Il revivra les instants forts de sa vie et devra les remettres en place dans son esprit afin de pouvoir se reveiller...
                      
                      Jeu basé sur "On voit defiler sa vie devant les yeux avant de mourir".
                      
                      Le jeu (systeme):
                      	-Un sokoban en 2D isometrique avec gestion d'altitude pour pouvoir "augmenter" le level design et enrichir les possibilités de puzzle.
                      
                      L'objectif principal du joueur:
                      	Le joueur devra pousser un ou plusieurs objets à destination de certains points strategiques de la carte afin de deverouiller l'accès au puzzle suivant.
                      
                      Idée sur le gameplay:
                      	-possibilité de pousser des "caisses" dans des pentes descendantes mais pas les monter.
                      	-le joueurs aurait des objectifs optionnels en plus du principal ( exemple amener tel objet ramassé a tel endroit...)
                      	-une "caisse" pourra servir de passerelle entre 2 zones afin de terminer le puzzle.
                      
                      Rejouabilité:
                      	-mode de jeu : 
                      			-Le mode histoire , où un mini scénario sera raconté.
                      			(-Un mode Esbrouffe, où les joueurs pourront jouer sur des puzzles créé par la communauté et ainsi battre des records de temps.)


                      Enjoy , j'attend vos retours sur d'éventuelles bugs.

                       J'attends également vos retours concernant le logo concernant ma "marque" de fabrique :) . Certains diront que c'est totalement nul de se donner un nom , moi sa me motive! :)

                       Et voila!

                       LimbEscape de Limb'Studio est mis à disposition selon les termes de la licence Creative Commons Attribution - Pas d’Utilisation Commerciale 4.0 International.
                      Les autorisations au-delà du champ de cette licence peuvent être obtenues à mail.limbStudio@gmail.com.

                      -
                      Edité par jimoniak 1 janvier 2015 à 20:27:37

                      • Partager sur Facebook
                      • Partager sur Twitter
                      Avide et curieux de connaissance. Nouveau projet: LimbEscape , Sokoban en 2d isometrique Blog
                        2 janvier 2015 à 13:26:08

                        Salut, tous,

                        Pas de grand pas en avant pour le moment, si ce n'est la mise en place d'un blog qui permet de suivre le devellopement du jeu:

                        LimbStudio

                        Voila, mise a jour du jeu dans les prochains jour! :)

                        • Partager sur Facebook
                        • Partager sur Twitter
                        Avide et curieux de connaissance. Nouveau projet: LimbEscape , Sokoban en 2d isometrique Blog
                          3 janvier 2015 à 18:07:54

                          Un petit Up pour ne pas voir le projet sombrer!

                          Twitter, Blog, Github , tout est operationnel autour du projet je vous invite de ce pas à  visiter le blog fournit dans le post ci dessus.

                          Je continuerai bien sur à mettre à jour le projet au fur est à mesure de l'avancement du projet.

                          Tout les liens concernant les sources et les application sont dispo sur le blog.

                          -
                          Edité par jimoniak 3 janvier 2015 à 18:10:05

                          • Partager sur Facebook
                          • Partager sur Twitter
                          Avide et curieux de connaissance. Nouveau projet: LimbEscape , Sokoban en 2d isometrique Blog
                            5 janvier 2015 à 20:17:08

                            Bonjour tout le monde!

                            Le projet n'est pas en standby loin de là!

                            Ces 2 derniers jours, je me suis penché sur l'ajout de fonction permettant d'enregistrer et charger une carte à partir d'un fichier binaire (une première pour moi! ) .

                            Voici en détail comment le programme fonctionne:

                            Lors de la création d'une carte:

                            La fonction de création  crée une carte à partir du nom donné par l'utilisateur. Elle appel également la construction d'un RessourceHolder (qui contient toutes les textures nécessaires a la carte) arbitraire qui charge les textures par defaut. (cela pourra être modifié ensuite).

                            Lors de la sauvegarde, Le nom de la carte est réutiliser pour créer le fichier correspondant.

                            Pour eviter d'écraser une carte deja existante, les cartes utilisateurs, seront enregistrées dans Cartes/Perso/ tandis que celle fournit de base seront dans Cartes/

                            Lors du chargement:

                            Lorsque l'on demande de charger une carte (dont le nom est demandé avant) , on crée un objet Carte vide.

                            On charge ensuite dedans les données dans le même ordre que l'on a sauvegardé.

                            On fabrique ensuite les éléments à partir du tableau d’élément que l'on stocke dans un vecteur de pointeur.

                            Le tableau d'element est en faite un tableau qui permet stocke les informations d’élément de la façon suivante:

                            vector<int> tableau_element[coteCarte²]; //voila à quoi ressemble le tableau


                            On parcourt le tableau dans une double boucle:

                            for(unsigned int i=0;i<coteCarte;i++)

                            {

                               for(unsigned int j=0;j<coteCarte;j++)

                               {

                                    tableau_element[j*coteCarte + i] //...

                               }

                            }

                            La formule j*coteCarte+i est valable car la carte est carrée et non rectangulaire.Grâce à celle ci on parcourt le tableau sans problemes , en remplacant i et j par les coordonnées sur la carte (x;y) . on peut savoir quel type d’élément se trouve à tel endroit.

                            Si par exemple nous voulons savoir ce qui se trouve en coordonnées (5,2)  et que coteCarte vaut 10, on interroge:

                            Type_element elm=tableau_element[10 * 2 + 5]   //donc en case 25 / 100 du tableau

                            Grâce à cette methode, on peut donc interroger puis créer les elements en conséquence et aux bon endroits.

                            Une fois les éléments chargés, on crée un RessourceHolder a partir du  pack enregistré dans la carte.

                            Les sources sont bien sur dispoible dans les ICI

                            Prochaine mise à jour:

                            *Ajouts des fonctionnalités d'édition de cartes (en parties implementées mais pas encore utilisable) .

                            *Choix de la taille de la carte dans une certaine limite ( entre 5x5carrés jusqua 15*15).

                            *Resolution de certains bug connus.




                             A bientôt!

                            -
                            Edité par jimoniak 5 janvier 2015 à 20:19:00

                            • Partager sur Facebook
                            • Partager sur Twitter
                            Avide et curieux de connaissance. Nouveau projet: LimbEscape , Sokoban en 2d isometrique Blog
                            Anonyme
                              5 janvier 2015 à 20:39:28

                              dans le code que tu donnes, tu proposes une methode de parours de carte si je ne m'abuse ?

                              or, tu perds enormément de performances en raison de la facon dont tu t'y prends.

                              je suis tombé sur un article qui en parle un peu : là !

                              fait donc ainsi je crois :

                              for(unsigned int j=0;j<coteCarte;j++)
                              {
                                 for(unsigned int i=0;i<coteCarte;i++)
                                 {
                                      tableau_element[j*coteCarte + i] //...
                                 }
                              }

                              et de plus, pourquoi une carte avec un tableau à **1** dimension et non 2 ?

                              exemple :

                              tableau[0][1] va chercher la case de la première ligne (verticalement), en deuxième position horizontalement !

                              sinon, bon boulot, continue ainsi !

                              edit : perso j'aime bien ton logo

                              je reporte aussi un problème : on ne peut pas se déplacer vers la droite de l'écran, ni vers le haut à droite en diagonale !

                              -
                              Edité par Anonyme 5 janvier 2015 à 20:43:52

                              • Partager sur Facebook
                              • Partager sur Twitter
                                5 janvier 2015 à 21:40:18


                                j'y ai pensé , c'etait justement mon premier choix, le probleme c'est qu'on ne peut pas gerer dynamiquement un tableau [][]. seul le premier[] peut être initialisé dans le programme, mais pas le deuxieme. d'où cette facon de faire :/

                                si on essait genre de faire:

                                int tableau[][]; //dans la declaration de class

                                 EDIT:

                                Quand j'y repense, cette boucle je l'utilise que lors du chargement , lors de l'execution , on sait toujours a quel endroit du tableau pour gerer les elements, donc on si par exemple le joueur sera en 5,5 on a qu'a faire 5*cotecarte+(5+1) est on test la position devant soit par exemple. :)

                                et

                                int tableau[tailleX][tailleY] = {0};

                                on obtient un beau :

                                as multidimensional array must have bounds for all dimensions except the first



                                (comme la taille du tableau est changeante...)

                                Sinon je les delimite arbitrairement. genre pas plus de 15*15...

                                mais si tu as un moyen de contourner ça , pourquoi pas! :)

                                /=0|_43/=0|_< a écrit:


                                edit : perso j'aime bien ton logo

                                je reporte aussi un problème : on ne peut pas se déplacer vers la droite de l'écran, ni vers le haut à droite en diagonale !

                                -
                                Edité par /=0|_43/=0|_< il y a environ 1 heure


                                Merci pour le logo ! :)

                                Hum j'ai changé les commandes: ZQSD , tu serai pas en QWERTY? :p

                                -
                                Edité par jimoniak 5 janvier 2015 à 21:52:01

                                • Partager sur Facebook
                                • Partager sur Twitter
                                Avide et curieux de connaissance. Nouveau projet: LimbEscape , Sokoban en 2d isometrique Blog
                                Anonyme
                                  6 janvier 2015 à 7:31:57

                                  suis en azerty carrément :)

                                  pour déclarer un double tableau, j'ai du faire ca en C dans une autre vie :-°

                                  sinon, arbitrairement tu définis la taille du tableau à genre 100 sur 100.

                                  tu mets tout à 0.

                                  une partie seulement sera utilisé avec RIEN pour le vide, et PLEIN pour le sol / caisse / ce que tu veux.

                                  en lisant ta carte pour l'afficher, si tu rencontres un 0, tu n'affiches pas :p !

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    6 janvier 2015 à 7:36:01

                                    /=0|_43/=0|_< a écrit:

                                    suis en azerty carrément :)

                                    pour déclarer un double tableau, j'ai du faire ca en C dans une autre vie :-°

                                    sinon, arbitrairement tu définis la taille du tableau à genre 100 sur 100.

                                    tu mets tout à 0.

                                    une partie seulement sera utilisé avec RIEN pour le vide, et PLEIN pour le sol / caisse / ce que tu veux.

                                    en lisant ta carte pour l'afficher, si tu rencontres un 0, tu n'affiches pas :p !


                                    oui apres j'ai créer une enumeration:

                                    enum type_elem

                                    {

                                      CAISSE,

                                      MUR,

                                      OBJECTIF,

                                      DEPART,

                                      RIEN,

                                    }

                                    oui c'est ce que je pensai faire , choisir une taille arbitraire ignateignable par l'utilisateur :)

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    Avide et curieux de connaissance. Nouveau projet: LimbEscape , Sokoban en 2d isometrique Blog
                                      11 janvier 2015 à 22:18:10

                                      Bonsoir tous!

                                       J'ai refait tout le Github pour que ce soit plus claire: vous le trouverez ici : LimbStudio

                                      Ensuite voici les nouvelles qui sont aussi visible ici : Limbstudio.blogspot

                                      Bonjour à tous, 
                                      Une nouvelle mise à jour concernant L'éditeur LimbEditor est disponible sur les dépôts github.

                                      Mise à jour 

                                      LimbEditor voit donc (enfin!) ses fonctions d'éditions implémentées. La sauvegarde et le chargement de carte son opérationnels. Il est impossible d'ajouter 2 départs en mêmes temps. 

                                      Etant donnés les nombreux changement opérés au sein même de la gestion de la carte, je dois recoder une partie de LimbEscape. J'ai en effet réaliser également des modification importante au sein de ma librairie LimbGUI ( qui s'occupe de la gestion des boutons et des zones de saisie) qui oblige à adapter également le code.

                                      voici quelques screens:













                                       

                                      Comment on s'en sert?


                                      Très simple d'utilisation, voici les differentes commandes:
                                      les croix directionnelles pour bouger la camera (peut être utiles sur les plus grandes cartes).
                                      La souris exclusivement pour positionner et sélectionner les éléments sur la carte.

                                      Ca bug chef...


                                      Il y a quelques bugs qui seront corrigés prochainement:

                                      *L'affichage qui ne se fait pas dans "l'ordre" en fonction de comment on ajoute les elements sur la carte. Je réfléchis à une solutions performante afin de trier efficacement le tableau qui contient ces elements en fonction de leurs position.

                                      *Ne rien entrer dans le champs de nom carte et cliqué sur charger peux provoquer un plantage. En cours de résolution également.

                                      *Créer une cartes sans entrer de dimension peux également provoquer un plantage. Il manque en effet une condition dans le code actuel qui sera résolue prochainement.


                                      Prochaines features:

                                      *Avertissement sur le nombre de caisse et d'objectif.Il faudra en effet au moins autant d'objectif que de caisse pour pouvoir jouer la carte.

                                      *Déjà implémenté dans le code, ajout d'un zone de saisie pour le pack de ressource utilisé par la carte.

                                      *Ajout d'un système de liaison de niveau afin de créer une suite de niveau.

                                      *Ajout de la faculté de pouvoir ressortir de l'éditeur pour charger une autre carte. 

                                       *Autres fonctionnalités...

                                      C'est tout pour aujourd'hui, à très vite!

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                      Avide et curieux de connaissance. Nouveau projet: LimbEscape , Sokoban en 2d isometrique Blog
                                      Anonyme
                                        12 janvier 2015 à 18:52:46

                                        oh boudiou ! quel beau boulot, je te félicite !

                                        ps: je viens de me rendre compte que j'avais un mp de ta part, je te répond :)

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          12 janvier 2015 à 21:01:41

                                          Merci! :) et je viens de te repondre :)

                                          J'ai fait les corrections énonce plus haut ainsi que d'autre:

                                          En effet, j'ai remarqué un bug assez gênant , lorsque l'on sauvegardait, la taille des chaines de caractère n'etait pas enregistrer, ce qui fait que lors du chargement, impossible de savoir le nombre d'octets à charger. Du coup, une des securites que j'ai mis s'activai et rendai le pb non visible.

                                          j'utilise flux.write(adresse, nombre octet)  en binaire.

                                          ainsi , j'ai donc modifié de façon a ce que je récupère les tailles et des les enregistrer ensuite. Un bug qui peux ce produire sur les architecture que les miennes, c'est que le chargement  ne se fasse pas. En effet, j'ai utilisé les type classique, et je viens de me rappeler qu'il n’était pas fixe en taille. Je vais donc modifier (encore une fois! :p ) afin de poser des type de taille fixe d'une architecture a une autre.

                                          J'ai également implémenter les nouveautés dans le jeux.

                                          Ce qui est faisable actuellement:

                                          - charger une carte du répertoire Cartes/ , déplacer le personnage dessus.

                                          voila voila , toujours dispo à cette adresse : Limbstudio

                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                          Avide et curieux de connaissance. Nouveau projet: LimbEscape , Sokoban en 2d isometrique Blog
                                            17 janvier 2015 à 1:57:29

                                            Voici l'article que je viens de publier sur le DevBlog (disponible ICI ) :

                                            Mise à jour...


                                            Bien le bonsoir!

                                            J'ai bien avancé sur LimbEscape, je vous présentes ça de suite:

                                            Extrait du log: 

                                            Ajout d'une fonction victoire qui fait revenir au menu principal
                                            Ajout d'un bouton retour en jeu
                                            Réecriture du système de collision pour corriger des bugs
                                            Correction de bug d'affichage (caisse affiché sur la bonne couche) 
                                            Le plus long à été de réecriture les collisions, car c'était le bazar! J'ai donc synthétisé toutes les possibilité de déplacement possible.
                                            Plutôt que d'écrire le code pour  chaque direction, j'utilise un code générique utilisable dans toutes les directions ce qui allégé par 4 le texte.
                                            Je procéde comme suit:
                                            En fonction de la direction voulue, j'initialise un vecteur de déplacement (par exemple pour allée en haut à droite = -1 en Y  , je l'initialise à (0,-1).
                                            Ensuite, grâce à ce vecteur je vais pouvoir vérifié mes collisions par rapport à la position du joueur:
                                            si je suis en (5,5) , je verifie que en (5,5) + vecteurDeplacement je n'ai pas d'obstacle.
                                            Si je n'ai pas d'obstacle : 
                                            je me déplace.
                                            Si j'ai un obstacle non franchissable:
                                             et que je sais qu'il est poussable => je vérifie que dans la position (5,5) + vecteurDeplacement*2 je n'ai pas d'obstacle. Si il n'y en à pas , je pousse l'élement et je deplace le joueur.
                                            Dans tout les cas un element ne peut pas être franchissable et poussable à la fois.
                                             Voila pour la nouvelle mécanique qui est beaucoup plus simple et rapide que l'ancienne.

                                             Un affichage presque parfait...

                                             Autre nouveauté, l'affichage dans le bon ordre de tous les élements (sauf le joueur mais j'y travail). En effet, dans la 0.6, le problème se posait lorsque l'on déplaçai une caisse, elle finissait soit par être dessiner au dessus d'un mur, ou bien sous un objectif , j'ai donc réglé le problème.
                                            D'une part, les elements sont stockés dans un seul est même vecteur que l'on nommera elementHolder lors du chargement. (mur, caisse, objectifs et depart confondu)
                                            je scinde ensuite ce tableau en 2 parties: d'un coté, les murs et les caisses dans tableauElem (vector à deux dimension), et de l'autre les objectifs dans repereObjectif. (le depart est invisible pour le joueur donc pas besoin de l'utiliser ici.)
                                            Pour tableauElem (un tableau de pointeur), je parcours elementHolder à la recherche des murs et des caisse, dès que j'en trouve un ou une, j'enregistre son adresse dans l'entrée correspondant à sa position sur la carte dans tableauElem. En gros : Si je trouve un caisse qui à pour position (5,4) sur la carte, j'enregistre son adresse  en tableauElem[4][5] dans le tableau.
                                             le repereObjectif est un vector de nombre entier . Je parcours elementHolder et dès que je trouve un objectif, j'enregistre sa position au sein du tableau dans une nouvelle entrée de repereObjectif.
                                            Une fois c'est deux element correctement initialisés, je dessine en premier le support de la carte, puis tout les objectifs (car collés au sol) et enfin je lis le tableau d’élément dans l'ordre par rangé de Y (d'où l'inversion [Y][X] du tableau . Lorsqu'une caisse est poussée, je la change de position dans le tableau . Pour reprendre l'exemple de toute à l'heure, ou l'on se deplacait de (0,1) , cela veut tout simplement dire que je remonte d'une rangé en Y, si ma caisse était en (5,4)  sur la carte, elle passerai de [4][5] à [3][5] dans tableauElem.Ainsi elle se retouvera dessiné avant les element present sur la rangé Y=4.Donc l'affichage se fera toujours correctement dans cette ordre la.
                                            Après ce beau pavé, voici quelques images des avancées:







                                            Pour expliqué un peu: La fonction de chargement aléatoire à était amélioré. La console montre le nombre d'objectifs restants avant d'avoir terminé.On peut également, si le puzzle actuelle ne plait pas, faire retour en jeu afin de soit chargé une carte en particulier, soit de relancer une carte aléatoire.

                                            Le bouton Recharger n'est pas encore fonctionnelle. Il 'y a pas encore de sécurité concernant le nombre minimum de caisse à avoir. C'est à dire que si vous mettez moins de caisse que d'objectif , vous ne pourrez pas finir le puzzle (logique) , mais l'éditeur n'interdit pas de créer se genre de carte.

                                            Un victoire se traduit par le retour sur l'écran de choix.

                                            Quelques bug connus:
                                            -Lorsque la carte ne possede pas de depart , le joueur est positionné en 0,0  sans tenir compte des élements, de plus il y a un bug d'affichage. Sera régler prochainement grâce à l'éditeur qui placera automatiquement un point de départ si il n'y en a pas.

                                            -SegFault sur la class joueur, lorsque l'on ferme le jeu durant la phase d'intro, (dû aux sprite non chargé de la SFML) sera corrigé.

                                            Fonctionnalités à venir...

                                            Pour alpha 0.8: 
                                            *corrections: ajout sécurité RessourceHolder

                                            *Ajout de fonction restart en jeu (recharger la carte pour retenter le puzzle)
                                            *Ajout d'un profil de joueur.
                                            *Ajout d'un système de liaison de niveau
                                            *Ajout d'un chronométré.
                                            *Ajout des Packs ressources fonctionnels.

                                             ces ajouts ne seront pas forcement dans la 0.8.

                                            Comme toujours, les sources à jours sont sur Github dans Limbstudio/Limbescape/Source
                                            sinon l'executable est dans le dossier LimbStudio/LimbEscape/bin/ n'oubliez pas de telecharger le dossier Data ainsi que les dll ! (jetez un oeil au lisez-moi.txt!) 

                                            C'est tout pour aujourd'hui!
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                            Avide et curieux de connaissance. Nouveau projet: LimbEscape , Sokoban en 2d isometrique Blog
                                              17 janvier 2015 à 14:36:32

                                              C'est bien ça avance vite :D

                                              Tu compte donner la possibilité de changer le visuel à terme ou pas ? 

                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                              Galerie : Artstation  ~  Contactez moi pour vos projet (mp)
                                              Anonyme
                                                17 janvier 2015 à 14:57:26

                                                si possible avec un editeur de sprite intégré au jeu (j'apprend le C++ 11 si tu veux et je te fais ca dans moins d'un mois :) xD)

                                                edit : encore mieux, en moins d'une minute :D : http://www.developpez.net/forums/d977241/c-cpp/bibliotheques/qt/traitement-d-images-cpp-qt/ (si cela t'interresse hein)

                                                -
                                                Edité par Anonyme 17 janvier 2015 à 14:59:15

                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  17 janvier 2015 à 16:16:48

                                                  Teroratsu a écrit:

                                                  C'est bien ça avance vite :D

                                                  Tu compte donner la possibilité de changer le visuel à terme ou pas ? 


                                                  Bien, sur d'où la presences des ressources pack :)   Par exemple, de base les cartes utilise le dossier Default pour les textures de l'écran, rien n'empeche de changer le contenu de celui-ci , ou bien de crée un carte qui demande autre chose que le default :) .

                                                  EDIT: J'avais pas comprit le sens de ta question. Donc oui , j'ai déjà commencé à créer des sprites de meilleurs qualités :)

                                                  Bien que ce soit une bonne idée, je vois pas pourquoi j'implémenterai une fonction de modifications de sprite dans le jeu. The Gimp le fait si bien... :) De plus si une telle fonction devait voir le jour, elle serait intégré directement à l'éditeur.

                                                  Enfin, dans ton exemple tu integre Qt, que je n'ai pas du tout apprit ni envie d'utiliser :p . voila voila :)

                                                  Merci pour vos réponses , ça fait plaisir de voir que mes monologues n'en sont parfois pas :D

                                                  -
                                                  Edité par jimoniak 17 janvier 2015 à 16:18:15

                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                  Avide et curieux de connaissance. Nouveau projet: LimbEscape , Sokoban en 2d isometrique Blog
                                                    21 janvier 2015 à 0:09:21

                                                    Nouveauté , comme d'habitude visible sur le BLOG.

                                                    Au revoir petite zone de saisie...

                                                    Bonjour, aujourd'hui je vous annonce que j'ai retiré les zones de saisies (pour le chargement des cartes notamment) au profit de menu plus complet. Sans plus attendre une photo de la bête:

                                                    Changement de la disposition...

                                                    Nouveau système de menu remplaçant les zones de saisie

                                                    Au démarrage,le programme scan le dossier des Cartes afin de récupérer une liste de tous les fichiers .map qu'il trouve. Un fois cela fais , lors de l'entrée dans la fonction qui fabrique ce menu, nous parcourons la liste ci dessus est créons les vignettes. A l'appuie sur l'une d'elle , la fonction retourne la chaine de caractère correspondante au nom de la carte voulue.

                                                    Ce menu fonctionne aussi bien pour les cartes, que pour les fichiers de suites de cartes. Je suis assez content du résultat, le programme commence à être vraiment opérationnel, sans compter le nombre de bugs qui diminue malgré tous les ajouts réalisés.

                                                    Les suites de niveaux...

                                                    Marre de jouer une carte à la fois? ce temps est révolu car j'ai implémenté le système de suite de niveaux. De plus , il sera facile de créer les suites vous même. Pour cela allez dans Cartes/Suites/ , créez un fichier .txt et changez son extension en .ste . Ouvrez le avec un bloc note, et écrivez toutes les cartes (une à chaque ligne) dans l'ordre souhaité. Vous pouvez vous inspirer de "Default.ste" pour voir comment le système fonctionne.

                                                     Une fois cela fait vous pourrez ouvrir le jeu , il détectera automatiquement votre suite. Vous n'aurez plus qu'a faire Jouer -> Suite -> Choisir -> et cliquer sur votre suite.

                                                    Menu de sélection des suites

                                                    Menu "Choisir" des suites utilisant le nouveau système de menu

                                                    Autres ajouts en vrac...

                                                    En plus de ces nouvelles fonctionnalités, permettez moi de vous présenter les autres qui , bien que plus petites, améliorent  grandement le confort de jeu:

                                                    *corrections - ajout sécurité RessourceHolder

                                                    Un ajout qui permet de charger le pack de texture par défaut si jamais le pack demandé est introuvable.


                                                    *Ajout de fonction restart en jeu (recharger la carte pour retenter le puzzle):

                                                    Le bouton était la mais la fonction non implémenté, c'est chose faites maintenant.

                                                    *Ajout d'un chronomètre:

                                                    Le temps que vous mettez à résoudre un puzzle vous est indiqué en fin de partie.

                                                    Ecran de fin de niveau affichant le temps écoulé

                                                     L'appuie sur suivant vous ramènera au menu si vous jouiez une carte seule ou si vous arriver en fin de suite. Si vous jouiez une suite, il vous mettra directement la prochaine carte de celle ci.

                                                    *Ajout des Packs ressources fonctionnels.

                                                    Les pack de ressources sont fonctionnels sur le jeu, il ne reste plus qu'a pouvoir les choisirs dans l'éditeur.

                                                    *Ajout d'un dossier Full dans le github , dedans un zip tout prêt pour pouvoir commencer à jouer. Il sera mis à jour à chaque nouvelle update de version. Noté qu'il est en release en non en debug.


                                                    Prochaines mise à jour...

                                                    Voici ce que je prépare pour la 0.9:

                                                    *Ajout d'une mini messagerie ( temps , objectif restants... ).

                                                    *Réecriture de l'animation personnage.

                                                    *Maj Graphique!

                                                    *Maj LimbEditor...

                                                    *d'autres corrections... 

                                                    Voila c'est tout pour aujourd'hui. Comme d'habitude n'hésitez pas à aller un tour sur le github ( lien LimbStudio dans la barre à gauche! )  ou sur la page Facebook

                                                    Bonne soirée!

                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                    Avide et curieux de connaissance. Nouveau projet: LimbEscape , Sokoban en 2d isometrique Blog
                                                      21 janvier 2015 à 0:57:32

                                                      Tu devrais virer les dlls et les zip du dépôt, ça serait plus propre qu'il n'y ait que le code (quitte à mettre un lien dans le README vers ton blog pour télécharger le jeu compilé). Il serait aussi bien pratique que le processus de compilation soit expliqué dans le README (rajouter un Makefile?).

                                                      Je jetterai certainement un coup d'oeil au code et j'essaierai de compiler histoire d'avoir d'autres avis. Bon courage pour la suite du projet! :)

                                                      -
                                                      Edité par Bibibye 21 janvier 2015 à 0:58:05

                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                      Partagez vos connaissances sur zestedesavoir - Dernier article : Les stratégies "cancer" - Github
                                                        21 janvier 2015 à 2:38:49

                                                        astragor a écrit:

                                                        Bravo, joli projet


                                                        Merci beaucoup! :)

                                                        Bibibye a écrit:

                                                        Tu devrais virer les dlls et les zip du dépôt, ça serait plus propre qu'il n'y ait que le code (quitte à mettre un lien dans le README vers ton blog pour télécharger le jeu compilé). Il serait aussi bien pratique que le processus de compilation soit expliqué dans le README (rajouter un Makefile?).

                                                        Je jetterai certainement un coup d'oeil au code et j'essaierai de compiler histoire d'avoir d'autres avis. Bon courage pour la suite du projet! :)

                                                        -
                                                        Edité par Bibibye il y a environ 1 heure


                                                        MAKEFILE Ajouté. :)
                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                        Avide et curieux de connaissance. Nouveau projet: LimbEscape , Sokoban en 2d isometrique Blog
                                                          27 janvier 2015 à 9:50:53

                                                          bonjour à tous!

                                                          Alpha 0.9 sortie. L'article qui suit est visible également sur le Blog.


                                                          Dessine-moi un mouton...

                                                          Bonjour à tous!

                                                          La version 0.9 de LimbEscape est en ligne sur Github depuis ce matin. J'ai surtout réalisé de nouveaux sprites pour le jeu et corrigé quelques bug. Il y a quand même quelques ajouts.

                                                          Sans plus attendre voici les nouveaux sprites:

                                                          Je ne pose pas le joueur car je ne l'ai pas encore réalisé (j'ai retiré le gabarit pour posé un charset trouvé sur le net pour le personnage).

                                                          voila ce que ça donne :

                                                          Le reste...

                                                          D'autres nouveautés sont aussi présentes:

                                                          Ajout Crédit:

                                                          Il y a désormais un nouveau bouton sur la première page du menu qui permet d'ouvrir les crédits du jeu, où sont présentes des informations comme la version du logiciel ou encore la licences.

                                                          Ajout de bords de cartes:

                                                          Un ajout plutôt esthétique ici, des bords ont été ajoutés à la carte. cela évite la sensation de carte "coupée".

                                                          Ajout des son et musique générals:

                                                          Les sons lorsque l'on clique sur un bouton sont désormais ajoutés. Noté aussi qu'une musique d'ambiance est présente. Le reste des sonorités viendront dans une prochaine mise à jour.

                                                          Amélioration chronomètre:

                                                          Le chronomètre indique désormais les minutes et secondes.

                                                          Réecriture fonction animation personnage:

                                                          La fonction qui permet d'animer le personnage à été retravaillé afin de rendre le code plus lisible. Elle est également beaucoup plus courte et permet d'insérer des animations différentes telle que lorsque le personnage est immobile (idle). 


                                                          Affichage joueur corrigé:

                                                          Le personnage était affiché au dessus de tout , ce qui pouvais rendre la scène incompréhensible.

                                                          C'est chose réglé. le personnage est affiché au bon moment sur la carte. 

                                                          Il y a également eu la résolutions de quelques bugs mineurs ainsi que l'ajout d'un MakeFile pour ceux qui souhaiterai compiler sur leur plateforme.

                                                          Il est à noté aussi que le projet est désormais sous licence CeCILL 2.1 .

                                                          Les prochains ajouts:

                                                          Je prévois d'ajouter d'autres fonctionnalités comme la messagerie en jeu ( qui est déjà annoncée depuis plusieurs mise à jour!)  ainsi que des élements de gameplay comme des sens uniques. Je suis à l'étude sur une amélioration de la carte qui permettrai de gérer la hauteur sur la carte. ce qui pourrai grandement ajouté des possibilités en jeu. 

                                                          Voila comme toujours, n'hésitez pas à suivre le projet sur la page facebook ou même ici via votre compte google plus!

                                                           Le projet est disponible sur Github. (liens dans la colonne de gauche! ) 

                                                          A bientôt!
                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                          Avide et curieux de connaissance. Nouveau projet: LimbEscape , Sokoban en 2d isometrique Blog

                                                          {C++} LimbEscape, Sokoban en 2d Isometrique.

                                                          × 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