|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
|
Nouveau Membre du Club
![]() Émile Étudiant (5e secondaire) Inscription : janvier 2012 Messages : 52 ![]() |
Bonjour,
Voici mon tout premier jeu! Dans MineDeeper vous contrôlez un petit robot foreur qui doit creuser une planète inconnue afin de trouver 3 artéfacts qui pourraient prouver qu'il y a eu présence de vie extraterrestre sur cette planète. En creusant vous devez aussi récolter des minerais que vous pouvez(devez) vendre afin de pouvoir acheter du carburant pour votre robot et des améliorations (du genre un plus grand réservoir de carburant). Lorsque vous n'avez plus de carburant ou que vous n'avez plus de vie, vous explosez et devez recommencer. Pourquoi faire ce jeu? C'est un projet pour l'école (je suis en 5e secondaire au Québec pour ceux que ça intéresse): on doit faire un projet de minimum 40h et j'ai décidé de faire un jeu afin d'améliorer mes connaissances, car je dois dire que je suis débutant... Bibliothèques et outils Le jeu sera codé en c++ à l'aide de la SFML, peut-être que je modifierai le jeu afin de pouvoir utiliser également la SDL, mais ça restera à voir en fonction du temps que j'aurai. Je développe avec CodeBlocks et je ne sais pas encore si je ferai une documentation puisque le projet est relativement petit. Autres informations Le code est ouvert complètement, sous licence GPL et sera disponible sur Github. Premières Idées Je suis pas mal perdu faut dire, donc je suis pleinement ouvert aux idées En me basant sur certains autres jeux (Merci LittleWhite) je crois que j'aurai les classes suivantes: -Window (ouvrir ma fenêtre) -Caméra (puisque le monde sera plus grand que ce la taille de la plupart des écrans on doit donc déplacer la vue) -Sprite (pour gérer mon robot) -Map (pour d'abord charger une map et plus tard générer une map aléatoire, gèrera aussi les collisions avec le décors) -Tile (classe qui défini les caractéristiques des tuiles, une instance sera crée pour chaque tuile différente et elles seront conservées dans la classe Map) -ImageManager (pour charger les images en mémoire) -SoundManager (pour charger les sons en mémoire) Donc voilà, comme je l'ai dit plus tôt, je vous encourage à me donner vos suggestions dont j'ai grandement besoin (j'ai aussi besoin de ressources sur le tiles mapping, le scrolling, etc. si vous souhaitez m'aider encore plus Cordialement, Sytten P.S.: J'aimerais savoir si je devrais suivre ce tutoriel... EDIT 1: Ajout des classes Collisions et Artifacts, suppression des classes ImageManager et SoundManager (conseil de Emmanuel Deloget). |
|
|
00
|
|
|
#2 |
|
Membre habitué
![]() Inscription : octobre 2009 Messages : 133 ![]() |
Beau projet.
Les 40h tu va les dépasser largement selon moi. Mes conseils si jamais ça peut aider : - Tu peux séparer ta Map en deux parties. Une partie graphique et une partie physique (pour les collisions). Ça t'éviteras de tout confondre quand tu devra gérer la caméra et les collisions. - Il va te manquer une classe pour la gestion de tes artefacts. Savoir par exemple combien tu en possèdes à l'instant x. - Il te manque aussi une classe pour l'interface utilisateur pour te permettre de savoir sur quelle touche appui le joueur. Sinon le principe est sympa. Je vais suivre le cours de ce périple. |
|
|
01
|
|
|
#3 | |
|
Nouveau Membre du Club
![]() Émile Étudiant (5e secondaire) Inscription : janvier 2012 Messages : 52 ![]() |
Merci, oui ça je commençais à le savoir
Citation:
Pour les deux première classes je suis entièrement d'accord et je prend tout ça en note, pour l'autre j'ai le choix de faire ma boucle de jeu dans le main et d'utiliser les fonctions des objets direct à l'intérieur ou de passé par un objet... selon toi le mieux serait sûrement de passer par un objet non? pourtant je n'arrive pas saisir ce que ça m'apporte de plus sinon que je crée une seule instance qui contiendra tout mes autres instances... Merci de ton intérêt, je vais faire de mon mieux pour poster mes updates de façon régulière. EDIT: Voir message plus bas, il faut que je choisisse le type que je vais utiliser, à voir... Cordialement, Sytten |
|
|
|
10
|
|
|
#4 |
![]() ![]() Germino LegrandDéveloppeur de jeux vidéo Inscription : octobre 2010 Messages : 371 ![]() |
[germinolegrand]: y'a 3 façons de faire un draw : window.draw(object); draw(window, object); object.drawTo(window);
__________________
|
|
10
|
|
|
#5 |
|
Membre habitué
![]() Inscription : octobre 2009 Messages : 133 ![]() |
Le fait de diviser ton code en classes te permet de mieux séparer tes fonctions et de rendre ton code plus lisible.
Tu pourrais tout à fait tout mettre directement dans ton Main...mais c'est déconseillé car peu lisible. Créer une classe pour les interactions avec clavier/souris te permettra de les gérer "séparément" de ta classe Main. Ce n'est que mon avis perso. |
|
|
00
|
|
|
#6 |
|
Nouveau Membre du Club
![]() Émile Étudiant (5e secondaire) Inscription : janvier 2012 Messages : 52 ![]() |
Oui certainement, je vais y réfléchir, parce que si j'enlève cette partie du main, il me reste une fonction dans mon main
J'ai fais la toute première version qui ne fait qu'afficher une map fixe, je m'attaque maintenant aux déplacements basiques d'un sprite... J'utilise des carrés de couleur, car mon ami n'a pas encore fini de faire les vrais sprites... Je commence aussi à penser à une bande sonore pour le jeu, mais comme l'ambiance n'est pas encore bien cernée je préfère attendre un peu... EDIT : J'ai pas mal remanié mon début de code avec germinolegrand, c'est bien meilleur niveau structure. Demain je m'attaque aux mouvements avec CharacterMover... |
|
|
10
|
|
|
#7 | |
![]() ![]() |
Bonjour,
Citation:
@Sytten : pense aussi à documenter ton code (au moins doxygen et si possible diagrammes de classes ) si tu souhaites que des personnes externes à ton projet puisse apporter leur contribution (remarques sur le code, corrections de bugs, ajout de fonctionnalité) ou si tu souhaiteras recruter par la suite (je suppose qu'une fois le devoir rendu/présenté, tu continueras ?).
__________________
Recherche devs C++ motivés et sérieux pour Last Dungeon. Chaîne Youtube : Vidéos Ma page DVP : http://neckara.developpez.com/ |
|
|
|
02
|
|
|
#8 | |
|
Nouveau Membre du Club
![]() Émile Étudiant (5e secondaire) Inscription : janvier 2012 Messages : 52 ![]() |
Citation:
Oui c'est certain que je vais continuer, j'apprend énormément avec ce projet même en faisant la base
|
|
|
|
00
|
|
|
#9 |
|
Nouveau Membre du Club
![]() Émile Étudiant (5e secondaire) Inscription : janvier 2012 Messages : 52 ![]() |
Bon nouvelle mise à jour, j,ai enfin eu le temps d'ajouter les mouvements de base...
Encore aucune gestion des collisions pour l'instant, je vais commencer demain à en faire une. Le jeu est fluide, mais consomme beaucoup de ressources du processeur, donc j'aimerais trouver une façon de réduire ça. Le est disponible sur github si vous voulez aller y jeter un coup d’œil. Cordialement, Sytten |
|
|
00
|
|
|
#10 |
|
Nouveau Membre du Club
![]() Émile Étudiant (5e secondaire) Inscription : janvier 2012 Messages : 52 ![]() |
Bonjour!
Nouvelle version encore, le principal ajout est un menu de base lorsque l'on ouvre le jeu. J'ai aussi modifié ma structure pour mettre ma boucle principale dans ma classe Game, ainsi mon main est très petit. Ça me facilite la vie puisque je n'ai pas à faire des accesseurs pour mes objets. J'aimerais avoir vos avis sur mon jeu jusqu'à maintenant, donc je vais vous résumez en gros comment il fonctionne: main : très simple, on définit les constantes de mon jeu (je vais peut-être les mettre dans un fichier à part plus tard), on crée un objet game et on commence le jeu. Game : dans le constructeur on crée les objets nécessaires au fonctionnement du jeu et on les supprime dans le destructeur. La fonction start regarde d'abord si on n'est pas déjà en train de jouer, si non, elle crée la fenêtre, la map (futur génération aléatoire) et fixe l'état du jeu à showingMenu. Ensuite on entre dans la boucle de jeu, selon l'état du jeu soit on affiche le menu (et on attend un click du joueur) ou on joue au jeu. Je vais rajouter très bientôt aussi Paused pour mettre mon jeu en pause. Quand on joue, si le joueur enfonce aswd ou une flèche, on le dit à CharacterMover qui va se charger de faire bouger notre personnage. Même chose quand aswd ou une flèche est relâchée. Ensuite, on regarde le temps entre la dernière fois qu'on a bougé le personne et si c'est plus grand que 6 millisecondes, on bouge le personnage. Ensuite j'ai fait une fonction draw qui me permet de dessiner tous les objets de ma fenêtre facilement (les fonctions draw sont amis des classes qu'elles dessinent). MainMenu : dans le constructeur on charge l'image qui sera affichée et on crée les rectangles dans lesquels le joueur peut cliquer. On les met dans une list pour pouvoir facilement y avoir accès plus tard. HandleClick permet de déterminer si le click du joueur est dans un des rectangles, si oui il retourne l'action de ce rectangle. Character : Ma classe character contient pour l'instant seulement la texture du personnage, sa position (à changer pour un rect plus tard) et sa vitesse. CharacterMover : Cette classe reçoit les changements dans les directions (ajout ou suppression), elle contient également une fonction move amie de ma classe Character qui va changer la position du personnage. Map : Dans le constructeur on charge les textures (qui vont être changé en un tileset plus tard). La fonction create crée la map (ensemble de 0 et 1 dans un vector), mais plus tard c'est dans cette fonction que je génèrerai une map aléatoire. Draw : Ensemble de fonctions amies des classes qu'elles dessinent, je trouve cela plus pratique que d'avoir une fonction draw dans chacune de mes classes (et ça respecte plus le principe de responsabilité unique). Quand je dessine ma map, pour l'instant je parcours mon vector et je dessine du ciel quand je vois un 0 et de la terre quand je vois un 1. Avec l'ajout de la caméra cette fonction va changer. Je crois que j'ai tout dit, vos questions/commentaires/avis me sont très utiles Cordialement, Sytten |
|
|
00
|
|
|
#11 |
|
Membre éclairé
![]() Inscription : septembre 2009 Messages : 496 ![]() |
Va falloir apprendre à implémenter un Finite State Machine si tu veux avancer sans tout refaire plus tard... j'ose meme pas mettre les mains dans ton gameLoop...
|
|
|
00
|
|
|
#12 |
|
Nouveau Membre du Club
![]() Émile Étudiant (5e secondaire) Inscription : janvier 2012 Messages : 52 ![]() |
Je suis pas certain de savoir qu'est-ce qu'une finite state machine et en quoi ça va pouvoir m'aider...
Je vais donc devoir fractionner ma boucle pour qu'elle soit plus simple à comprendre... en ajoutant showMenu() et en faisant des fonctions intermédiaires pour tester les touches pressées et ou relâchées ça devrait être plus clair et simple déjà. |
|
|
00
|
|
|
#13 | ||
![]() ![]() Germino LegrandDéveloppeur de jeux vidéo Inscription : octobre 2010 Messages : 371 ![]() |
@lagswag: sans blague faudrait peut-être prendre le temps de lire la fonction en question avant de la critiquer non ? Sa gameLoop est très évolutive, il peut en mettre quand il veut un morceau dans une fonction indépendante.
Faudrait pas me dire que ça c'est pas clair comme code (c'est la partie intéressante de cette fonction : Code :
__________________
|
||
|
00
|
|
|
#14 |
|
Nouveau Membre du Club
![]() Émile Étudiant (5e secondaire) Inscription : janvier 2012 Messages : 52 ![]() |
Bonjour, désolé de ne pas avoir poster avant, je n'ai pas eu beaucoup de temps à moi cette semaine...
J'ai fait quelques petites modifications, je vais commit le code demain puisque je vais faire un plus grand ajout que je veux faire depuis un bout de temps (collisions). Déjà avec des sprites qui sont de plus en plus ce à quoi je m'attend à avoir dans mon jeu final ça rend mieux. J'ai décidé de ne pas perdre mon temps à faire une documentation Doxygene puisque je ne réutiliserai probablement jamais ce code (je suis pas rendu au stade d'écrire du code réutilisable). Par contre, je vais faire un schéma de mes classes et de leurs interactions (en gros) sans que ça soit de l'UML (pas le temps de l'apprendre, peut-être après la remise de ce projet). Vous pourrez ainsi mieux visualiser mon jeu et les possibilités qui offrira (et vous serez plus en mesure de m'aide aussi si je suis bloqué^^) Cordialement, Sytten |
|
|
00
|
|
|
#15 |
![]() ![]() ![]() ![]() Alexandre LaurentIngénieur développement logiciels Inscription : mai 2008 Messages : 10 477 ![]() |
Bonjour,
Pourtant, il faut apprendre à écrire la documentation au plus tot. Si possible, tout en programmant (et quelque fois, même avant d'écrire la fonction ...).
__________________
Vous souhaitez participer à la rubrique 2D / 3D / Jeux ? Contactez-moi ![]() La rubrique a aussi un blog ! Ma page sur DVP Mon Portfolio Qui connaît l'erreur, connaît la solution. |
|
01
|
|
|
#16 |
![]() ![]() Germino LegrandDéveloppeur de jeux vidéo Inscription : octobre 2010 Messages : 371 ![]() |
Le plus important dans une documentation, c'est une nomenclature précise.
__________________
|
|
10
|
|
|
#17 |
|
Membre Expert
![]() Inscription : février 2005 Messages : 1 914 ![]() |
Salut,
bravo pour ton projet ça a l'air sympa et le résultat m'intéresse ^^ Un mot pour plussoyer lagwag, tu pourrais/devrais jeter un coup d'oeil du côté des state pattern, perso je trouve que ça simplifie pas mal le truc ; dur de s'en passer une fois utilisés, à tester/connaître en tout cas
__________________
Vive les roues en pierre |
|
|
00
|
|
|
#18 |
|
Nouveau Membre du Club
![]() Émile Étudiant (5e secondaire) Inscription : janvier 2012 Messages : 52 ![]() |
Bonjour,
@Djakisback merci Donc voilà nouvelle update, voici les changements: -Map se nomme maintenant TilesMap pour éviter les confusions -Les collisions sont maintenant parfaitement gérées -Le véhicule a une vélocité -Suppression des pointers (remplacés par des références) -Utilisation d'un tileset pour les tiles de mon jeu à la place d'images distinctes -Les tiles sont reliées à des structures qui contiennent leurs propriétés (pour l'instant seulement un rectangle pour spécifier où aller chercher la texture dans le tileset et un booléen pour indiquer si on peut passer par dessus) Finalement, je vais faire une documentation, mais pas tout de suite puisque je change trop mon code (et c'est pas parce que je sais pas où je m'en vais, c'est juste que je veux avoir des versions jouables donc parfois j'écris du code que je sais que je vais changer. C'est contre-productif, mais moi ça me motive de voir que ça fonctionne ce que je fais...) Cordialement, Sytten |
|
|
00
|
|
|
#19 |
|
Nouveau Membre du Club
![]() Émile Étudiant (5e secondaire) Inscription : janvier 2012 Messages : 52 ![]() |
Bonjour,
Voilà un peu petit bout de temps que je n'ai pas posté... Entre temps, j'ai fait les diagrammes UML des classes de mon jeu. Encore une fois, j'aimerais vous dire que vos commentaires me sont très utiles. Merci, Sytten P.S.: Les diagrammes sont en pièces jointes... |
|
|
00
|
|
|
#20 |
|
Nouveau Membre du Club
![]() Émile Étudiant (5e secondaire) Inscription : janvier 2012 Messages : 52 ![]() |
Voici la suite...
(max de 5 par message...) |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com