Forums Casio - Projets de programmation

Index du Forum > Projets de programmation > L'Odyssée Projet de jeu casio
Math680
Hors ligne
Membre
Points: 367
Défis: 0
Message
Posté le 03/07/2018 21:19

L'Odyssée Projet de jeu casio :

Nous cherchons des personnes pour la création d’un RPG se nommant
L'Odyssée

Mettre un « je participe » dans les commentaires


Eléments pratiques :
L'adresse du GitLab : GitLab
le scénario : ici et
Mécanique de base et combats
Fuite et sorts
Les niveaux ils vont jusqu'ici
Les objets

Connaissances
Le système de matrice pour les maps
Le GitLab
Le GitLab
Pour git, c'est pas sorcier :
1) faut installer git (la complexité varie en fonction de votre OS)
2) une fois installé, on lance la console, on se rend dans le fichier où l'on veut bosser à coup de cd sous linux et mac et de mv sous windows
3) git clone https://git.planet-casio.com/Shadow15510/odyssee

Vous avez cloné le dépôt git, vous pouvez bosser dessus.

Pour mettre à jour votre dépôt : git fetch
Pour sauvegarder chez vous les changements que vous avez fait : git commit
Pour envoyer vos modif sur le dépôt central :git push


Avancement du projet
Avancement global du projet
   14%

Détails de l'avancement du projet
Détails de l'avancement du projet

Cahier des charges
   25%

Cahier des tâches
   5%

Sprites
   20%

Moteur graphique
   1%

Moteur physique
   1%

Moteur de combat
   45%

Moteur du jeu
   1%






Lephenixnoir
Hors ligne
Administrateur
Points: 13150
Défis: 136
Message
Dernier message de la page précédente :Posté le 05/11/2018 21:51 |
Heureusement mon navigateur est plus fort que ça. Je vous ai peut-être sous-estimé dans cette explication, désolé si c'est le cas.

Je me permets de faire une version légèrement revisitée de tout ça, d'abord pour contribuer à expliquer, et aussi parce que gint vous simplifie la vie sur ce point...

En C, les graphismes, (sprites, tiles,...) sont convertis du *.png initial à des *.txt contenant les code hexadécimal de l'image monochrome... Tu me suis ? Ces codes hexadécimaux sont présenté sous forme d'un tableau.
C'est pratique : tu oublies aucun code hexa...

En fait, peu importe le langage dans lequel tu travailles, ce qui importe c'est que tu aies les données de l'image. C'est-à-dire, des informations te permettant de savoir, d'une façon ou d'une autres, quels pixels sont blancs et lesquels sont noirs.

Comme en C, on peut faire à peu près tout ce qu'on veut (et même plus), on décide d'utiliser un bit de mémoire pour chaque pixel : 0 pour blanc et 1 pour noir. Ça nous prend autant de bits qu'il y a de pixels dans l'image, disons N.

Du coup il nous reste à trouver un moyen de mettre ces N bits dans le programme. La méthode classique consiste à créer un tableau de char avec des données en hexa, mais c'est pas obligé. gint fait ça bien plus joliment par exemple.

Ensuite, pour les afficher, eh bien on appelle une fonction de MonochromeLib, par exemple ML_bmp_or_cl() en lui disant où les bits de ton image où été mis, et elle se débrouille pour afficher.

Ces tableaux ont un petit nom (c'est le petit plus du C) et si on met ces petits noms dans un autre tableau, on va obtenir un gros tableau qui va contenir tous les autres tableaux qui contiennent les codes hexa des images...

Dans un programme C, toutes les données ont un nom, ça fait partie du jeu. Donc en fait ce qu'on a une variable qui représente les données de l'image. Par exemple logo_du_jeu.

Donc ça c'est bien pour afficher une seule image. Attention à ne pas confondre avec ce qui suit.

Quand tu vas afficher ta map, tu auras tes tiles, et si tu y vas naïvement, une image par tile. Donc tile_arbre, tile_maison_1, tile_maison_2, tile_puits... bref, tout un paquet. C'est pas terrible, tu vois venir le désastre au momen d'afficher un tile :

Si le tile est un arbre
  ML_bmp_or_cl(tile_arbre ...)
Sinon, si le tile est la partie gauche d'une maison
  ML_bmp_or_cl(tile_maison_1 ...)
Sinon, si le tile est la partie droite d'une maison
  ML_bmp_or_cl(tile_maison_2 ...)
Sinon, si le tile est un puits
  ML_bmp_or_cl(tile_puits ...)

C'est la galère complète ! Chaque fois que tu veux ajouter un tile, tu es obligé de modifier le code. Hors de question de faire ça.

En fait tu n'as pas vraiment envie d'avoir un nom pour chaque tile. Tu as plutôt envie d'avoir un nombre pour chaque tile, c'est-à-dire de mettre tes tiles dans un tableau. Comme je suis flemmard, je l'appelle tiles[] (les crochets c'est juste pour rappeler que c'est un tableau). Bien sûr, on va vouloir écrire des trucs comme tiles[i] avec i une valeur entière bien choisie. Ce qui donne :

Pour afficher le tile i, eh bien...
ML_bmp_or_cl(tiles[i] ...)

Hop, plus besoin de travailler. Il te suffit de regarder le numéro du tile que tu veux afficher (ça, c'est marqué quelque part dans la map) et tu affiches. Plus besoin de te poser de questions inutiles comme « est-ce un arbre ? » ou bien « est-ce que j'ai pensé à ajouter mon tile fleur au code ? ».

On sait que les sprites font (c'est un exemple) 8*8 pixel, ça fait un écran qui est composé de 12 cases par 8
Maintenant on créer une matrice de 12*8 qui contient "l'intérieur" de la case, ça va ? Donc on va avoir un "1" pour un bout de mur, un "2" pour une fenêtre, un "3" pour une porte,... etc

Ici, il s'agit simplement de décider d'un numéro pour chaque tile. Il faut que ça corresponde à l'ordre des tiles dans le tableau, donc ne le change pas trop souvent. Ajouter des nouveaux numéros est safe, renuméroter ce qui existe veut dire que tu dois modifier toutes tes maps (et ça t'as pas envie !).

Maintenant passons au moteur physique (la base)
On va construire deux boucles For qui vont balayer la matrice et à chaque tour de boucle on regarde le chiffre stocké dans la matrice. On regarde aussi le numéro de la grosse liste qui correspond à numéro stocké dans la matrice...

Ça c'est bien clair, tu lis les données dans la matrice, tu vas chercher les sprites, tu dessines. Pouf.

Btw Shadow, le moteur d'affichage... c'est le graphique. Le moteur physique, c'est les collisions, les mouvements des personnages, tout ça tout ça.

Ajouté le 05/11/2018 à 21:52 :
If (Map [x] [y] !=-1)

Ahrem
if(Map[x][y] > 0)
----------------------------------
Rise.



Pages: Précédente | 1 ... , 15, 16, 17, 18, 19, 20

Kikoodx
Hors ligne
Membre
Points: 803
Défis: 7
Message
Citer : Posté le 05/11/2018 22:01 | #
Ah oui c'est complet
J'avais comprit la majorité, mais ce sera sûrement utile à quelqu'un d'autre
Merci LePhénixNoir ! (niveau capitalisation, tu veux ça ou Lephénixnoir ?)
----------------------------------
Lbl 1
Goto 1


Une boucle optimisée
Lephenixnoir
Hors ligne
Administrateur
Points: 13150
Défis: 136
Message
Citer : Posté le 05/11/2018 22:22 | #
Ça m'est égal, tu peux même enlever l'accent, mettre en minuscules, écrire juste "LePhe" avec ou sans apostrophe... (tant que t'enlèves pas le "h", ce qui me rapplerait Intelligide )
----------------------------------
Rise.
Shadow15510
Hors ligne
Administrateur
Points: 2192
Défis: 15
Message
Citer : Posté le 06/11/2018 08:11 | #
C'était l'idée que je voulais faire passer, mais Lephe' s'y connait mieux que moi on devrait actualisé le post principal avec un spoiler géant : connaissances voire faire des mini-tuto pour démarrer le C sur de bonnes bases
----------------------------------
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Moral
   85%
Hackcell
Hors ligne
Membre
Points: 892
Défis: 6
Message
Citer : Posté le 13/11/2018 12:56 | #
À présent que le triconcours est passé, que les résultats sont tombés, je pense qu'il est l'heure de réveiller le projet

Ainsi, je vous invite à clamer avec vigueur votre volonté à poursuivre le projet, afin de montrer aux autres membres que vous êtes là, armés et près pour cette longue et ardue bataille qui nous attend. Certains tomberont, d'autres nous rejoindrons, mais de part notre sang et notre sueur, nous triompherons, et le récit de nos exploits seront transmis à nos descendants génération après génération si bien que dans 1000 ans, l'on continuera de conter notre épopée.

Je ne vous le demanderais donc qu'une fois.... Casionautes, est-ce que vous êtes prêts ? Prêts à affronter les foudres des dieux, les mers déchaînées, et les flammes des enfers ? Alors manifestez-vous,criez, criez à en faire trembler le sol, déchirer les cieux, et faire résonner la planète Casio toute entière !
----------------------------------
I usually spend meow time cosplaying as a diligent student...
So it can get pretty stressful.
That's exactly why PC is such a happy place for meow to be ⭐
Shadow15510
Hors ligne
Administrateur
Points: 2192
Défis: 15
Message
Citer : Posté le 13/11/2018 13:15 | #
"Nous partîmes cinq cents et nous nous vîmes trois mille en arrivant au port" Espérons que cela sera le bon port...
Il est temps en effet

Je pensais peut-être changer la parenté du topic avec l'accord de maht680 avec un membre étant plus présent pour optimiser les mises à jour du post principal...
On pourrait par exemple peut être avoir plusieurs personnes parentes ? De mainière à mettre à jour chacun notre jauge du truc que l'on fait (par exemple : moteur graphique⇒Hackcell : 50%, moteur physique⇒Shadow15510 : 10%,...)
----------------------------------
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Moral
   85%
Hackcell
Hors ligne
Membre
Points: 892
Défis: 6
Message
Citer : Posté le 14/11/2018 12:45 | #
Un peu comme ça ??
Cahier des charges
   1%

----------------------------------
I usually spend meow time cosplaying as a diligent student...
So it can get pretty stressful.
That's exactly why PC is such a happy place for meow to be ⭐
Shadow15510
Hors ligne
Administrateur
Points: 2192
Défis: 15
Message
Citer : Posté le 14/11/2018 18:37 | #
Oui ça ressemble à ça

Edit : Post principal mis à jour

Ajouté le 17/11/2018 à 12:41 :
Je viens de vous ajouter au Git Je savais pas comment faire mais c'est ok

Ajouté le 19/11/2018 à 14:47 :
Alors c'est partit !!

Cahier des charges :

Présentation du projet
Nom : Odyssée
Langage : C (reprise du projet BASIC)
Modèles de calculatrice visées : Graph 35++/75/85/95 (SD) (+CG90+ ?)
Technologie utilisée : Non définie (à choisir entre Gint, le Fx-SDK, et le Prizm SDK)
Taille : Non définie (mais sans doute vers les 150-200 Ko max)

Les tâches
Les Sprites : Se mettre d'accord pour la taille, les faire, ainsi que les fichiers Sprites.c et le header correspondant
Le moteur Graphique : Gestion et création du design des maps et agencement des éléments dans la carte via la matrice (inclura sans doute la gestion de la mini-map)
Le moteur Physique : va gérer le moteur Graphique avec les collisions. Inclut les lieux d'interactions et l'affichage
Le moteur de Combat : Gestion du temps réel dans les combats avec les attaques via le pavé numérique, la partie théorique des combats est ok
Le moteur de Jeu est le plus important : il regroupe les mécanismes indispensables au jeu, à savoir, la partie scénario, les interactions, la gestion du clavier, la gestion du temps fictif du jeu, les systèmes de niveau du jeu et l'intégration du narrateur
Gestion IA et PnJ : dialogues mouvements, action, et interactions avec le joueur
Le moteur des Dialogues rejoint les intaractions et les PnJ, comprend la partie vente de jeu : objets, armes,...
Gestion des sauvegardes : les variables indispensable à l'avancée du jeu

Bon... Je pense avoir balayer les différents aspect du projets... On le modifiera au besoin. On peut commencer à travailler !

Infos supplémentaires sur les sprites
Infos supplémentaires sur les sprites
Taille : 16*16 ? (+ mini-map)
Couleurs : ? (sans doute monochrome au début)
Dessins déjà fait (monochromes) :
Personnages
Arbres (x2)
Buissons
Design extérieur (mur, portes, fenêtres)
Design toits (x2)
Interrupteur (On/Off) + Levier (3 postions : Gauche, milieu, droite)
petit caillou
Interface joueur "in game" (texte, clafs, vies, rubis, gemmes)
Petit objets divers : rubis, gemmes, vies (coeur), drapeau, fanion, fioles (vide, 1/2, pleine)

Dessins à faire :
Design éléments interne : porte, fenêtre
Design pièce
Meubles : lit, armoire, coffre, bar, chaise, table
design herbe


J'ai réfléchis au système de monnaie, plutôt que d'avoir quatre types de Drachmes, j'ai pensé qu'il serait préférable d'avoir que deux "échelles", en remplaçant les Drachmes par des Rubis et des Gemmes ont résout quelques problèmes... On peut dire 1 Rubis = 10 Gemmes ou l'inverse... et cela simplifie grandement toutes les transactions !




----------------------------------
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Moral
   85%
Kikoodx
Hors ligne
Membre
Points: 803
Défis: 7
Message
Citer : Posté le 19/11/2018 18:07 | #
Et pour la création de maps ?
Ça se fera comment ?
----------------------------------
Lbl 1
Goto 1


Une boucle optimisée
Shadow15510
Hors ligne
Administrateur
Points: 2192
Défis: 15
Message
Citer : Posté le 19/11/2018 18:08 | #
En gros le moteur Graphique entre la map dans la matrice et le moteur Physique affiche la matrice à l'écran en gérant les déplacements du joueurs, les collisions, les lieux où l'on peut interagir,... etc

Ajouté le 23/11/2018 à 08:40 :
Les Sprites sont sur le Git Il y a les :
Artefacts : cœur, diamant, rubis, gemmes, drapeau, jambon,...
Les éléments des mains : design toit, mur, porte et fenêtre, il n'y a que l'extérieur
Les éléments des maps et décors : Arbre, buissons, boutons, levier
Les personnages : le joueur (animé) mais aussi cinq autres sprites, non-animés, et d'autres non-isolés (ces derniers appartiennent à une série que Drak a présentée ici )
Et c'est tout pour l'instant, je ne pense pas que les sprites soient la priorité mais ceux-là étaient fait depuis longtemps donc je les met et on avancera sans doute dessus un peu plus tard dans le projet...

Ajouté le 03/12/2018 à 10:11 :
Suite au Triconcours il s'avère qu'Hackcell et moi-même avons pris une Graph 90+E donc il sera plus simple de faire le portage pour ce modèle vu que nous sommes trois au minimum à en avoir une (avec math680)
----------------------------------
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Moral
   85%
Kikoodx
Hors ligne
Membre
Points: 803
Défis: 7
Message
Citer : Posté le 03/12/2018 10:29 | #
Du coup vous ne voudriez pas partir directement sur un add-in pour 90+E ?
----------------------------------
Lbl 1
Goto 1


Une boucle optimisée
Hackcell
Hors ligne
Membre
Points: 892
Défis: 6
Message
Citer : Posté le 03/12/2018 11:39 | #
Non, ce serait élitiste...
----------------------------------
I usually spend meow time cosplaying as a diligent student...
So it can get pretty stressful.
That's exactly why PC is such a happy place for meow to be ⭐
Shadow15510
Hors ligne
Administrateur
Points: 2192
Défis: 15
Message
Citer : Posté le 03/12/2018 11:59 | #
Nous ferons les deux, en partant de l'add-in monochrome puis en le portant avec couleurs et en réajustant les tailles des sprites
----------------------------------
"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Moral
   85%

Pages: Précédente | 1 ... , 15, 16, 17, 18, 19, 20

Index du Forum > Projets de programmation > L'Odyssée Projet de jeu casio

Planète Casio v42 © créé par Neuronix et Muelsaco 2004 - 2018 | Il y a 19 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire indépendant, géré bénévolement et n'est donc pas affilié à Casio | Toute reproduction de Planète Casio, même partielle, est interdite
Les fichiers, programmes et autres publications présents sur Planète Casio restent la propriété de leurs auteurs respectifs et peuvent être soumis à des licences ou des copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd