Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Projets de programmation


Index du Forum » Projets de programmation » L'Odyssée Projet de jeu casio
Math680 Hors ligne Membre Points: 455 Défis: 5 Message

L'Odyssée Projet de jeu casio

Posté le 03/07/2018 21:19

Eléments pratiques :
L'adresse du Gitea : https://gitea.planet-casio.com/Equipe_Odyssee/Odyssee
le scénario : ici et ainsi que sur le Git
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 Gitea
Le Gitea
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 <URL du dépôt en HTTPS ou SSH>

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

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



Précédente 1, 2, 3 ··· 10 ··· 17, 18, 19, 20, 21 Suivante
Lephenixnoir En ligne Administrateur Points: 24146 Défis: 170 Message

Citer : 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)

Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Kikoodx Hors ligne Ancien labélisateur Points: 3011 Défis: 11 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 ?)
ouais ouais
Lephenixnoir En ligne Administrateur Points: 24146 Défis: 170 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 )
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Shadow15510 Hors ligne Administrateur Points: 5498 Défis: 18 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

Hackcell Hors ligne Maître du Puzzle Points: 1524 Défis: 11 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 !
Shadow15510 Hors ligne Administrateur Points: 5498 Défis: 18 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

Hackcell Hors ligne Maître du Puzzle Points: 1524 Défis: 11 Message

Citer : Posté le 14/11/2018 12:45 | #


Un peu comme ça ??
Cahier des charges
   1%

Shadow15510 Hors ligne Administrateur Points: 5498 Défis: 18 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

Kikoodx Hors ligne Ancien labélisateur Points: 3011 Défis: 11 Message

Citer : Posté le 19/11/2018 18:07 | #


Et pour la création de maps ?
Ça se fera comment ?

ouais ouais
Shadow15510 Hors ligne Administrateur Points: 5498 Défis: 18 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

Kikoodx Hors ligne Ancien labélisateur Points: 3011 Défis: 11 Message

Citer : Posté le 03/12/2018 10:29 | #


Du coup vous ne voudriez pas partir directement sur un add-in pour 90+E ?
ouais ouais
Hackcell Hors ligne Maître du Puzzle Points: 1524 Défis: 11 Message

Citer : Posté le 03/12/2018 11:39 | #


Non, ce serait élitiste...
Shadow15510 Hors ligne Administrateur Points: 5498 Défis: 18 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

Ajouté le 17/12/2018 à 12:26 :
Je sais que le projet traîne en longueur et ce par ma faute aussi

Je vous enverrais le script de la première partie dès que possible..., le cahier des charges n'attend que d'être amélioré et vous n'avez pas besoin de moi la-dessus Vous pouvez commencez les brouillon sur les différentes parties du jeu, donner des conseils, des astuces : "moi je ferais un truc comme ça...", ou "Non ton code est pas très propre : regarde là on peut encore optimiser", ... etc si vous pouviez mettre vos brouillons en PJ-image ce serait cool... Bref, en attendant le script vous avez les carte sur le Git des infos,... etc donc n'attendez pas que je soit dispo et tout à vous pour commencer

Ajouté le 18/12/2018 à 08:17 :
La première partie du jeu est dans un *.zip sur le git

le signe « (-?-) » signifie que l'on attend une réaction de la part du joueur et « lancer H » signifie que le joueur doit lancer un dé (ici d'Habilité)
"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

Disperseur Hors ligne Membre Points: 1830 Défis: 1 Message

Citer : Posté le 18/12/2018 13:12 | #


Perso j'ai eu la graph 90 a mon anniv et je suis un peu plus que debutant en C.. je vais essayer de passer mon sdk pour la graph 90 avec les tutos presents sur le site.. mais je garantis rien
Shadow15510 Hors ligne Administrateur Points: 5498 Défis: 18 Message

Citer : Posté le 18/12/2018 13:16 | #


J'aurais la Graph 90+E pour les vacances (elle est sensée arriver demain) Pour la SDK je crois que c'est un ensemble d'outils éparpillés (Linker, compileur, éditeur,...) donc bon courage

Ajouté le 24/01/2019 à 15:18 :
Bon... ben voila, ça fait 7 mois que le projet est officiellement lancé, 7 mois qu'on a pas vu un bout de code... Donc je ne sais pas ce que vous en pensez mais là c'est plus du stand by, c'est carrément du abort... Donc je ne sais pas si ça vaut le coup de poursuivre... Ou alors on re-constitue une équipe et on bosse ?
Si quelqu'un est motivé, toute la doc est en ligne, soit sur le site soit sur le git pour la version démo
"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

Redeyes Hors ligne Membre Points: 630 Défis: 7 Message

Citer : Posté le 24/01/2019 21:54 | #


@Shadow: non ne dis pas ça. Souviens toi que le projet a été lancé au moment où tout le monde était en mesure d'apporter son aide à l'édifice. S'il n'aboutit pas tout de suite, il aboutira plus tard. Ce n'est qu'une question de temps, mais ça serait dommage de voir 20 pages pour un projet abandonné... Il suffit juste d'avancer un maximum plus ou moins une fois par an je pense
Hackcell Hors ligne Maître du Puzzle Points: 1524 Défis: 11 Message

Citer : Posté le 31/01/2019 12:51 | #


Et d'un côté, heureusement qu'il n'y a pas encore de code, on a pas encore décidé de ce que l'on va utiliser
Ityt Hors ligne Membre Points: 216 Défis: 0 Message

Citer : Posté le 03/02/2019 00:11 | #


Salut
Si vous êtes motivés pour commencer à coder je pourrais (peut-être) servir de main-d'œuvre
J'sais pas si vous aviez vu mais je trainais beaucoup sur les topics de C (fxlib, gint)
J'ai fait beaucoup de prototypages mais mon problème c'est le game design j'ai le syndrome de la page blanche et j'ai jamais codé en équipe donc voilà j'sais pas je ferai attention si il y a du nouveau merci
salut je m'appelle sacha et je viens du bourg-palette et voici mon meilleur ami pikachu
Lightmare Hors ligne Membre de CreativeCalc Points: 690 Défis: 0 Message

Citer : Posté le 03/02/2019 07:30 | #


Salut ! ton message ressemble à un sapin de noël !
Je suis prêt à m'occuper de la partie game design, car pour le code je suis un peu pris par mon pokémon...
"Quand je dis à la cour : "Sautez ! ", tout le monde me demande "jusqu'où ?" "
Dijkstra - The Witcher
Shadow15510 Hors ligne Administrateur Points: 5498 Défis: 18 Message

Citer : Posté le 03/02/2019 09:05 | #


Pour dessiner les spirites vous pouvez commencer par jeter un oeil au git
"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

Ityt Hors ligne Membre Points: 216 Défis: 0 Message

Citer : Posté le 03/02/2019 11:52 | #


Ah ok je vois Je verrai après le goûter

EDIT: Je viens de voir que vous mettez les sprites sous forme de tableau, du coup juste pour savoir, pour un 16x16 cela donne un tableau de longueur 256 c'est bien ça ? J'ai vu dans l'exemple que ça utilisait des nombres hex donc pour le noir c'est 0 et pour le blanc c'est 0xFF ? Il y a déjà des ".txt" de prêts ou pas ? Je prends mes marques Ou alors pour l'instant on s'en fout de la partie codage

Ajouté le 03/02/2019 à 19:30 :
Comme utiliser "Modifier" ne notifie pas la shoutbox, je me permets de faire ça
salut je m'appelle sacha et je viens du bourg-palette et voici mon meilleur ami pikachu
Précédente 1, 2, 3 ··· 10 ··· 17, 18, 19, 20, 21 Suivante

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 119 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd