Bonjour à tous,
Voilà, j'arrive avec un nouveau projet. Ici je vais reprendre le principe de fearyourself avec son projet, soit je vais expliquer à peu de chose près, mon avancement et mon code ( vu que ce n'est pas sur qu'il soit documenté ( bouh! ) ).
Je vais faire ( et j'ai commencé ) un remake de Advance Wars ( qui est sorti sur GameBoy Advance et sur Nintendo DS ) ou encore, pour les plus vieux d'entre nous, une reprise de Famicon Wars ( qui était donc sorti sur Famicon ).
(Pour les gens qui n'aiment pas la wikipédia ) C'est un jeu de stratégie, au tour par tour qui se joue sur une sorte de plateau ( carte ). On peut avoir jusqu'à 4 adversaires. Chaque tour, nous gagnons des revenus, nous pouvons déployer des unités, déplacer nos unités, attaquer, capturer des usines et autres batiments ( qui donne des revenus, permet de fabriquer des unités, ou même de gagner ). Chaque joueur à un QG. Si celui ci est capturé par l'adversaire, nous perdons. Si nous n'avons plus d'unités sur la carte, nous perdons ( Dans certain cas, si un nombre de tours est dépacé nous perdons ).
Sur certaines cartes il peut il avoir un brouillard de guerre.
- Pourquoi ce jeu?
Simplement car c'est un jeu que j'ai beaucoup aimé et que je voulais faire un projet de jeu vidéo avant la rentrée scolaire .
De plus, il me semble qu'il n'y ai pas beaucoup de monde ayant voulu le faire ( seul projet notable: customwars ).
Pourquoi le refaire... au lieu d'aider un projet courant ... c'est qu'il utilise JAVA ( que je ne critique pas ) que je maitrise moins bien, de plus cela bloque la compatibilité avec les plateformes que je cible.
Donc vous avez compris, ce projet utilise le C++
- Bibliothèques utilisées?
Je vais utiliser la SDL car celle-ci est extrèmement portable ( récemment j'ai recontré un codeur, codant sur AmigaOS ).
En fait, j'ai longtemps hésité, car je voulais apprendre la SFML , qui est très certainement une très bonne bibliothèque ( le créateur est présent sur ce forum, donc je ne peux pas dire de bétises ). Mais comme je l'ai dit, c'est pour garder une extrème portabilité ( que beaucoup de projet ne cherchent pas et n'ont certainement pas besoin ). La deuxième raison est aussi que je veux porter sur GP2X ( une console portable ) et que c'est surement sur cette bête que je vais bosser l'année prochaine ( durant mon année scolaire ).
( On remarquera que chercher à travailler sur de telle bêtes n'est que purement théorique, effectivement, un code C++ écrit correctement est portable ( tant que l'on n'utilise pas des fonctions de la bibliothèque de Windows ), les seuls problèmes qui peut arriver ( les problèmes de compilation avec des compilateurs plus strictes ne sont pas pris en compte, car normalement réctifiables très rapidement ) sont les erreurs de segmentation et les fuites de mémoires. Effectivement, sur nos systèmes surpuissant, le système d'exploitation n'est pas toujours regardant et peu laisser passer quelques erreurs ( et puis nous avons pleins de mémoire vive ( n'est ce pas? ) ). Sur des systèmes tel que l'AmigaOS et celui de GP2X, une fuite de mémoire ou une erreur de segmentation peut arriver à freezer complètement le système ( l'utilisateur va vite me détester si je laisse de telles erreurs ).
Donc:
SDL -> gestion clavier / souris , ouverture de la fenêtre , affichage
SDL_image -> Chargement des images et affichage grace au core de la SDL
SDL_mixer -> Chargements des sons / jouer les sons
SDL_network -> Ah bon! Il y aura du réseau ( pour l'instant ce n'est pas une priorité )
OpenGL. Hum, oui je n'ai pas encore parlé d'OpenGL. En fait, tout est faisable avec la SDL ( vu que nous faisons que de la 2D ). Mais l'avantage d'OpenGL, c'est que c'est directement géré par la carte graphique, donc c'est plus rapide. Je vais essayer ( en fait, je n'ai pas encore d'idée pour le faire correctement ) de gérer le dessin à l'aide de la SDL, ou d'OpenGL ( mais tout avec un seul et unique code à part les routines de dessin, bien sur ).
- Outils?
Clavier, souris, écran ...
Plus sérieusement, actuellement j'utilise Visual Studio 2008.
Sous linux, c'est gcc, make et geany pour l'éditeur.
J'utiliserai aussi doxygen pour générer la documentation.
Et finalement, pour faire une compilation multi plateforme avec peu d'embêtement, je vais utilisé autotool/automake qui est un outil sous linux pour généré un script configure qui lui générera des Makefile dépendant de votre configuration.
- Licence?
Le code source est complètement ouvert et protégé par la licence GPLv2.
- Autre?
Mon projet ( et surtout son code source ) est stocké sur google code.
Il n'y a pas de raison particulière opur avoir choisi google code, juste que mon précédent projet est aussi stocké là bas.
J'utilise SVN ( SubVersion ) pour la gestion des versions ( ça, c'est parce que j'ai l'habitude d'utiliser celui là ).
- Premier design
Sortons une feuille blanche.
Mon premier design est loin d'être parfait, mais donne un premier aperçu et surtout une première direction vers quoi aller.
Les classes de prévues:
Engine:
- Window ( ouverture de la fenêtre ... )
- Renderer ( il devra géré OpenGL et SDL de façon indépendante, du coup il aura les fonctions de base du genre 'drawBackground' 'drawTile' )
- Camera ( pour les cartes plus grandes que la taille de l'écran ... permet donc le déplacement de la carte )
- Sprite
- Animation ( c'est une série de sprite que l'on change selon le temps )
Game:
- Map ( il faudra la charger à partir d'un fichier , la dessiner , ou dessiner un aperçu )
- Cursor ( peut être dans l'engine, c'est un jeu console, donc il y a un curseur )
- Player ( avec une liste d'unité )
Units:
- Unit ( une classe mère, qui défini des actions de base ( dessin / déplacement ) )
- UnitFactory ( une fabriques d'unités )
- Building ( pour les batiments, à peu de chose près le même principe que les unités )
- BuildingFactory ( une fabrique de batiments )
ResourcesManager:
- SpriteManager ( on passe le nom d'un fichier, cela nous retourne un pointeur sur les données du fichier, une fois chargée )
- SoundsManager ( pareil pour les sons )
Les managers sont importants pour la mémoire. Ils permettent de faire un chargement au tout début du jeu, de toute les ressources, et de ne pas utiliser la mémoire plein de fois pour la même chose ( on charge une seule fois chaque fichier )
Les Factory sont aussi importantes car elle vont lire les fichiers décrivants les caractéristiques des unités, et juste en passant le nom de l'unité, nous aurons une nouvelle instance de creer.
Cela permet de faire une meilleure gestion de la mémoire et de tout libérer facilement.
- Notes de codage
Les noms des variables pointeurs sont précédés par un 'p'.
Cela peut ressembler à la notation hongroise, mais c'est le seul point que je reprends de toute la notation.
Les variables doivent toutes être initialisées à la déclaration ( avec 0 ou NULL, bien souvent ). Cela évite toujours des erreurs ( du moins on les remarques mieux ).
Voilà, pour un premier aperçu, je pense avoir dit pas mal de chose, donc maintenant, codons!
Partager