Aller au contenu

immortal

Membre
  • Compteur de contenus

    70
  • Inscription

  • Dernière visite

  • Days Won

    6

Tout ce qui a été posté par immortal

  1. Mirage - Platformer 2D

    Bonjour tout le monde, J'ai découvert le Java sur ce forum alors je me suis dit pourquoi pas vous montrer où je suis allé en partant d'ici, sans aucune expérience en java, pour arriver à ce jeu. Ce jeu est le résultat d'une coopération avec un ami graphiste dans le cadre d'un travail de maturité (Projet à rendre en dernière année de lycée Suisse), nous espérons pouvoir le commercialiser pour quelques euros sur Greenlight (Steam, ou whatever, si vous avez des conseils à donner) d'ici début 2016. Comme je le disais, ayant fait mes débuts en Java (ewi, je faisais partie des moddeurs qui ne connaissaient pas le java, ne me tapez pas :3) sur ce forum, je souhaite partager avec vous mon jeu en vous offrant un accès à la beta. Nous sommes actuellement en phase d'alpha interne, nous espérons finir nos tests et implémenter tout ce que l'on veut pour une phase de beta d'ici fin novembre. Nous devons aussi nous assurer que notre jeu ne puisse pas être volé pendant la beta par une personne malveillante (ça peut paraître stupide mais quand on passe autant de temps sur un projet, on a envie de le protéger) et donc prendre toutes les précautions nécessaires (là aussi, si certains on des conseils). Lien Trello pour suivre l'avancement de la beta: https://trello.com/b/eY92YVO2/mirage Concept et Histoire Le concept du jeu est tiré du film "Time out", chaque action entreprise par le joueur à une influence sur son temps de vie restant. Dans notre jeu le joueur à donc une certaine quantité de temps avant le game over qui peut augmenter ou baisser, par exemple lorsqu'il se fait toucher par un monstre. L'histoire n'est pas encore clairement établie voilà la trame actuelle: La planète sur la quelle le héros que vous incarnez vit est sur le point d'imploser, pour la maintenir en un seul morceau, une machine (nom de code mirage), prend à chaque habitant de la planète une petite quantité du temps dont ils ont a disposition pour éviter sa destruction. Cependant, un usurpateur a pris la place du vrai roi et a modifié la machine pour pouvoir vivre plus longtemps et créer une armée de robot en le prenant aux habitants. Le héros, le prince, légitime héritier du trône, va tenter un mouvement de révolution pour reprendre le royaume. Screenshots Voilà, si vous avez des commentaires ou si vous voulez participer à la beta, laissez un petit message.
  2. Mirage - Platformer 2D

    Hello, un an après le début de ce poste je reviens apporté des news. La fin de nos études plus l'armée (obligatoire en Suisse) nous a beaucoup ralenti dans l'avancée du projet. Mais nous reprenons de plus belle, le jeu a quand même pas mal changé en interne et nous arrivons à un stade où nous pourrons bientôt commencer à ajouter du vrai contenu. Nous allons poster une vidéo chacun par semaine (code et graphismes) pour montrer notre avancée. Voici donc la première "weekly update" et à la semaine prochaine pour la prochaine update!
  3. Mirage - Platformer 2D

    Hello, On pensait avoir une beta d'ici novembre, mais comme on avait beaucoup travaillé les derniers jours avant la reddition de notre travail de maturité, ça a un peu été l'overdose (on faisait vraiment plus que ça) du coup on pas glandé grand chose après la reddition. (d'où notre retard) Cependant tout est presque prêt pour une sortie en beta: Le launcher est prêt Je dois encore trouver un hébergeur (certainement un truc tout pourri et gratuit pour le moment) Pas encore assez content au niveau de la sécurité pour faire du public Ces derniers temps, j'ai beaucoup travaillé sur la résolution de plusieurs bug et le launcher. Un launcher tout ce qu'il y a de plus simple. (Je me rends sur le screen que cette scrollbar est vraiment moche x)) Un petit screen de la fonction de téléportation du renard sur ma map de test (qui n'est pas en pixel art), ici, la téléportation n'a pas beaucoup d'intérêt mais elle permettra d'accéder à des endroits difficiles. Je commence aussi un petit système de particule pour de la pluie (dessinée par mes soins pour le moment, mon ami n'a pas eu le temps de bosser dessus encore). Ah et nous avons un compte Twitter fraichement créé sur le quel il y a rien: disponible ici: https://twitter.com/playmirage Désolé pour les faux espoirs de beta, on prend notre temps. ^^ On espère quand même avoir un truc bien d'ici début 2016, avec les vacances entières pour avancer.
  4. Mirage - Platformer 2D

    Merci pour vos retours. J'ai rajouté un lien Trello pour suivre l'avancement du développement (https://trello.com/b/eY92YVO2/mirage) Du coup en ce moment on peaufine la gui, j'essaye de tweaker les IA des mobs et on implémente le renard: un nouvel élément de gameplay, on peut le contrôler et s'introduire à des endroits difficiles d'accès, le reste du temps il nous suit.
  5. Mirage - Platformer 2D

    Oui, la liste de possibilités est assez impressionnante et le multiplatforne (bien que je ne l'utilise pas) est un gros +. Ça change comparé à Slick2D que j'utilisais il y a 2 ans et qui commençait vraiment à devenir obsolète.
  6. Mirage - Platformer 2D

    Content de voir que ça peut en intéresser certains :D J'ai utilisé LibGDX
  7. [Unity] Graviturn

    Concept très intéressant, à mon avis la question du portage mobile ne se pause même pas: les jeux de réflexion/casu sur mobile, ça reste pour moi ce qui se télécharge le plus (2048, Flow,...). J'ai jamais utilisé Unity, c'est comment au niveau de la prise en main? C'est permissif, tu codes comme tu veux? Bonne chance pour ton projet!
  8. Poster vos class utiles!

    Bonjour à tous, chers développeurs Il m'est venu une idée après le récent sujet de Knux qui avait besoin d'une méthode assez spécifique de formatage de string. Mon idée est que nous avons tous des méthodes, des class et des trucs utiles pour nous aider dans notre développement et que nous pourrions tous les partager pour que tout le monde en profite. Je commence donc avec ma class StringUtils, elle permet de faire de la manipulation de string dans un objet de taille précis, elle permet notamment de faire en sorte qu'un long texte retourne à la ligne quand il dépasse la taille de l'objet. StringUtils (cette class n'est pas de moi): Un downloader simple de Thog: Un désarchiveur de darkpit58: Une class pour ouvrir une page dans le navigateur par défaut sur Windows et sur les autres système Unix, trouvée par TheShark34 (source perdue): Voilà j'attends avec impatience vos partages si vous en avez à faire A bientôt.
  9. Poster vos class utiles!

    Merci pour le partage TheShark34, j'ai ajouté ta class au premier poste. Par contre elle marche sur tout les systèmes Unix sauf Mac OS.
  10. Génial comme site, j'adore ce genre de sites qui te font pas recharger ta page à chaque changement de contenu. La navigation est simple, intuitive, quelques bugs mais c'est une beta. Continue sur ta lancée!
  11. Quelques Projets

    Projet 1 - Un Siri en java (voir projet 3) Projet 2 - Clock(voir projet 3)(pas de meilleur nom pour l'instant ) Projet 3 - House Manager
  12. Quelques Projets

    Coucou, j'ai recommencé un projet ces vacances alors j'ai édité le sujet (Projet 3). Bonne journée!
  13. Poster vos class utiles!

    Merci, je l'ajoute!
  14. Pv Modding: Service de modding

    Bonjour à tous, Je traine depuis un moment sur ce forum et comme un ami et moi n'avions pas grand chose à faire pendant ces vacances nous avons décidé d'ouvrir un site de modding moyennant rémunération. Le but de ce site est de vous proposer la création de blocs, objets, armures et plus à des prix accessibles à tous. Je suis épaulé d'un graphiste qui s'occupera des textures et je me chargerai du code. Nous traiterons les commandes au fur et à mesure qu'elles arrivent et le plus rapidement possible. Si vous êtes intéressés rendez-vous ici: <Adressemasquée>
  15. Pv Modding: Service de modding

    Pas bête l'histoire du caddie je vais aller refaire une partie du site de ce pas et oui, je ne savais trop dans quel catégorie le mettre, c'est possible que tu déplaces le sujet dans CV ou alors présentation de vos projets?
  16. [1.7.2] (Vanilla) Improved Server

    Présentation: Improved server n'est pas un mod mais un serveur minecraft complètement remanier par mes soins. Vous vous demandez sans doute à qui s'adresse ce serveur car bukkit et le vanilla suffisent déjà? Eh bien ce serveur est l'intermédiaire entre bukkit et le vanilla, il permet une configuration simple, rapide et sans prise de tête pour les débutants comme sur un serveur vanilla. Au programme: Des groupes: Un tout nouveau système de groupe (indépendant de la Whitelist et des OP), vouspouvez déterminer si les joueurs du groupe peuvent construire. Les joueurs rejoindront le groupe default.txt à la connexion. Chaque groupe a son niveau de permission. Pour créer un nouveau groupe: Créez un fichier texte du nom de votre groupe, puis à l'intérieur mettez: group-name=Le nom du groupe dans le chat canbuild=true|false permission-level=0-5 players=unjoueur,unautre Les lignes sont assez explicites je pense. Des permissions: Dans le fichierpermissionlevel.txt vous trouverez toutes les commandes avec leurs niveaux de permission à vous de choisir celui qui convient le mieux au groupe. Nouvelles commandes: /kickall /group <add|remove|list> <playername> <groupname> Ajouts Prévus: - Un système de protection de zones - Ce que vous voulez Téléchargement: http://bit.ly/1feBNRE J'ai programmé tout ça en quelques heures, il se peut donc qu'il y ait de nombreux bugs, je compte sur vous pour me les dire. N'hésitez pas à proposer des idées d'ajouts.
  17. [1.7.2] (Vanilla) Improved Server

    En effet j'ai un peu la même vision du jeu ^^ J'étais tombé sur ton sujet il y a un moment en plus. En effet après relecture de ton projet on veut la même chose, je précise qu'actuellement le serveur n'est pas compatible avec forge mais ça me prendra 2 sec de le rendre compatible ^^ On en reparle par mp quand tu veux.
  18. Poster vos class utiles!

    Oui c'est ce que je comptais faire je les ajouterai au fur et à mesure.
  19. Quelques Projets

    Bah c'est du php donc le client est accessible depuis n'importe quel navigateur en local et le serveur web est lui aussi sur le raspberry, mais je ferai une vidéo lorsque je serai plus avancé et ce sera plus clair.
  20. Quelques Projets

    Ouais c'est chaud à comprendre mais comme le raspberry peut interagir avec le monde réel, je met le serveur et toutes les alarmes dessus, mais pour le ajouter une nouvelle alarme il suffira d'aller depuis son téléphone en ajouter une. Clock c'est donc le nom du programme que je ferai tourner sur le raspberry mais que je contrôlerai depuis un iphone.
  21. Quelques Projets

    Bonjour tout le monde, je me suis mis depuis peu sur un autre projet (voir projet 2) , du coup je le partage avec vous et je change le titre du sujet.
  22. Exercices Faciles et Rapides

    Salut je participe les premiers exercices ont l'air en effet simples, mais rien de mieux qu'un petit échauffement.
  23. Quelques Projets

    Bonjour Je me suis remis à coder un peu et j'ai fait un site qui permet à n'importe qui d'ajouter une question et une réponse dans la BDD comme ça, tout le monde peut participer si il a envie. Cependant, ce site étant accessible à tout le monde, je vous prierai de ne pas mettre n'importe quoi.... je partagerai la BDD toutes les semaines. L'utilisation du site est très simple, on remplit la question et la réponse puis on valide. Le site:http://irobot.bl.ee/index.php PS: ne m'en voulez pas pour le design qui est .... basique. x)
  24. Tutos généraux sur les jeux en java

    Bonjour à tous! Comme promis, je commence ma série de tutos sur les jeux en java. Je vais commencer par une petite introduction... Introduction Quelques informations avant de commencer: - Pour commencer, ces tutos ne s'adressent pas à n'importe qui, il vous faudra de bonnes bases en java et pour certains tutos un peu de maths mais rien de bien méchant. - J'utiliserai Slick2D mais mon code est parfaitement adaptable sous swing avec graphics2D. - Le code que je donnerai ne sera certainement pas le meilleur et le plus optimisé, je vous invite donc à me faire part de vos commentaires et optimisations. - Pour finir sachez que je ne vous donnerai jamais de class entières mais seulement des méthodes. Pour ce tuto vous aurez besoin de: - Votre IDE préféré - Slick2D/Libgdx/Swing & AWT - de bonnes bases en java - un peu de maths Table des matières: 1. Un Resource Manager (fini) 2. Bases sur la 2D isométrique (WIP) Un Resource Manager Comme il faut commencer par le début, partons tout de suite sur les bases d'un jeu. Dans ce premier tuto vous verrez qu'au final vous aurez une class complète à la fin mais ce sera la seul fois que je vous donne en entier une class. Dans tout les jeux qui commencent à devenir complexe avec beaucoup de textures etc. , on a tendance à charger les ressources n'importe comment et n'importe où. Ici, je vais vous montrer comment charger vos ressources de manière efficace. Nous utiliserons tout d'abord un fichier XML pour recenser toutes nos ressources. Chaque ressource sera chargée comme ça: Structure XML: (je vous donnerai un fichier d'example car le XML est un "language" à part) <?xml version="1.0" encoding="UTF-8"?> <resources> <resource type="image" id="imagetest">path/to/image.png</resource> <resource type="sound" id="soundtest">path/to/sound.wav</resource> </resources> On commence par déclarer le type de ressource que c'est ici un son et une image mais ça pourrait être une map ou encore un personnage, ensuite, l'id auquel sera attribué la ressource et pour finir, le chemin qui mène à la ressource. Passons maintenant à la partie codage (enfin): On va commencer par créer une nouvelle class et y déclarer nos premières variables. ResourceManager: public static HashMap<String, Image>imageMap; public static HashMap<String, Sound>soundMap; public ResourceManager(){ imageMap=new HashMap<String, Image>(); soundMap=new HashMap<String, Sound>(); } On déclare autant de HashMap que l'on a de type de ressource, ici, j'ai choisi arbitrairement de charger des images et des sons. On crée ensuite une nouvelle fonction: loadResources qui prendra en argument un inputstream. La méthode ci-dessous nous permettra de ne récupérer qu'une seul instance de notre ResourceLoader: public static ResourceManager instance= new ResourceManager(); public static ResourceManager getInstance(){ return instance; } Vient ensuite notre méthode pilier: ResourceManager.loadResources: public void loadResources(InputStream is, boolean deferred) throws DOMException, Exception{ DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder docBuilder = null; try { docBuilder = docBuilderFactory.newDocumentBuilder(); } catch (ParserConfigurationException e1) { e1.printStackTrace(); } Document doc = null; try { doc = docBuilder.parse (is); } catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } doc.getDocumentElement().normalize(); } Je vais pas trop rentrer dans le détail, mais pour faire simple: là, vous avez les bases de la lecture d'un document XML: on crée la "fabrique" de parseurs XML puis on crée le parseur en lui même. Viens ensuite la création du document XML en lui même et après pour finir la normalisation du texte pour qu'il soit lisible en tant qu'arbre. On va maintenant passer au chargement des ressources en lui même, on va créer la boucle principale de chargement: ResourceManager.loadResources: NodeList listResources = doc.getElementsByTagName("resource"); //nombre total de ressources int totalResources = listResources.getLength(); //boucle principale de chargement des ressources for(int resourceId = 0; resourceId < totalResources; resourceId++){ Node resourceNode = listResources.item(resourceId); if(resourceNode.getNodeType() == Node.ELEMENT_NODE){ Element resourceElement = (Element)resourceNode; String type = resourceElement.getAttribute("type"); if(type.equals("image")){ addElementAsImage(resourceElement); } else if(type.equals("sound")){ addElementAsSound(resourceElement); } } } Pas d'inquiétudes, je vais vous expliquer tout ce gros morceau de code pas à pas. On commence par récupérer tout les éléments de type "resource". Pour la suite je vous laisse lire les commentaires vous même. On arrive maintenant à cette grande boucle for: La boucle dit: on continue de charger les ressources tant que l'index de la ressource est inférieur au nombre total de ressources. Ensuite, on prend le noeud qui contient la ressource à l'index actuel. On cherche ensuite le type de ressource que c'est et on crée autant de conditions que de type de ressources que l'on a. Après on ajoute nos éléments avec une méthode que nous créerons juste après. Voilà une fois que la ressource est chargée et refait ça jusqu'à ce qu'elles le soient toutes. Viennent ensuite nos méthodes d'ajout de nos ressources aux hashmap. (précision pour le chargement de cette image, l'image sera une image AWT, pour ceux qui aime le "vanilla") ResourceManager.addElementAsImage: private void addElementAsImage(Element resourceElement) throws DOMException, Exception{ loadImage(resourceElement.getAttribute("id"), resourceElement.getTextContent()); } Rien de bien difficile ici, on prend l'élément id de notre ressource et son texte (ici le chemin jusqu'à l'image) et on le passe en argument de notre prochaine méthode. ResourceManager.loadImage: public void loadImage(String id, String path) throws Exception{ if(path == null || path.length() == 0) throw new Exception("Chemin de l'image: [" + id + "] invalide"); Image image=null; try { image = ImageIO.read(new File(path)); } catch (IOException e) { System.out.println("Erreur de chargement de l'image: ["+id+"]"); e.printStackTrace(); } System.out.println("Image chargee id correspondant: ["+id+"]"); imageMap.put(id, image); } Enfin la méthode de chargement de notre image on a une première condition qui vérifie que le chemin jusqu'à l'image est bien valide, si il est valide, on continue. On charge l'image avec le chemin qu'on a récupéré en argument de notre méthode, lorsque l'image est chargée, on la place dans notre HashMap. Voilà vous avez terminé toute la partie de chargement d'une ressource, si vous compris comment charger une image vous n'aurez pas trop de problèmes à charger un son ou autre chose. Maintenant c'est bien beau d'avoir chargé toutes ces belles ressources mais il faut encore pouvoir les utiliser.... Il suffit d'ajouter cette méthode pour chaque type de ressource: ResourceManager.getImage: public Image getImage(String ID){ return imageMap.get(ID); } Je vous conseille ensuite de faire un thread séparé pour le chargement de vos ressources, surtout si vous en avez beaucoup, pour faire patienter l'utilisateur. ThreadLoadResources: public void run(){ InputStream is; try { is = new FileInputStream("path/to/resource.xml"); ResourceManager.getInstance().loadResources(is); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (DOMException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } Ensuite pour récupérer une ressource quand vous en avez besoin il suffit de faire: Image img = ResourceManager.getInstance().getImage("imagetest"); // ou encore ResourceManager.getInstance().getImage("imagetest").draw(0,10); ResourceManager.getInstance().getSound("soundtest").play(); Voilà c'est terminé pour ce premier tutoriel n'hésitez pas à commenter vos suggestions et améliorations. Je pourrai en faire un tutoriel vidéo si c'est demandé. Bases Sur la 2D Isométrique Aller on attaque tout suite le deuxième tuto sur la 2D isométrique. On va commencer par une partie théorique sur la 2D isométrique puis on codera, de sorte à ce que une fois compris, cette théorie pourra être adaptée avec n'importe quel language. (Pour la suite du tutoriel sachez que les images ne viennent pas de moi mais de mes recherches sur le sujet lorsque j'ai fait mon premier moteur de jeu.) Il existe 2 types de rendu isométrique: Le rendu en diamant: et le rendu en zig-zag: Dans ce tuto je ne vais expliquer que le rendu en diamant car je n'ai étudié que celui-là, si vous êtes intéressé je vous invite à aller ici, les deux méthodes sont données avec du code théorique (en anglais). Je vais maintenant passer au code théorique sur le rendu WIP
  25. Tutos généraux sur les jeux en java

    Pour la présentation je suis complètement d'accord avec vous c'est pas mon fort :/ Oui, tout à fait, je corrige ça toute suite, je vais passer ma variable en private ce sera plus rapide. Pour ce qui est du son j'ajouterai une partie quand j'aurai le temps
×