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 » RPG en mode texte
Gdubol Hors ligne Membre Points: 160 Défis: 2 Message

RPG en mode texte

Posté le 20/10/2015 13:04

Bonjour à tous,

Mon objectif est de créer un genre de moteur de jeu afin d'améliorer au maximum mes compétences en basic et quoi de mieux pour cela que de créer un petit RPG tout simple.

Donc si quelqu'un est intéressé par ce projet n'hésitez pas a poser vos questions et voici l'avancement du jeu:

Menus
   1%

Maps
   50%

moteur du jeu
   25%



1, 2 Suivante
Lephenixnoir Hors ligne Administrateur Points: 24574 Défis: 170 Message

Citer : Posté le 20/10/2015 13:08 | #


Hmm, il manque une problématique, une question : en quoi pouvons-nous t'aider ?

Pour la structure de ton programme, je te conseille quelque chose comme ceci (indépendamment des sous-programmes) :
Lbl 0 // Disons menu principal
... // Renvoie au différents labels : 1, 2, ...

Lbl 1 // Menu d'options
... // Configuration
Goto 0

Lbl 2 // Boucle principale : map
...
If K=47 // Pour revenir au menu
Goto 0
IfEnd
...

etc.

L'idée est de gérer des morceaux de programme comme des fonctions. Ça demande un peu d'entraînement mais c'est très souple, et ça évite d'utiliser trop de sous-programmes.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Gdubol Hors ligne Membre Points: 160 Défis: 2 Message

Citer : Posté le 20/10/2015 13:58 | #


Oui je vois ce que tu veux dire, mais le problème c'est que étant donné mon niveau de programmation je vais rapidement me retrouver avec:

Lbl 124...

Mais j'avais aussi l'idée de faire 2 programme un avec le moteur du jeu et l'autre avec les maps pense tu que c'est une bonne idée sinon autre ?

Et j'ai eu aussi un autre problème, en mode texte je n'arrive pas à créer de boîte de collision pour mes décors don si tu une solution.

merci de m'avoir répondu

Je n'ai pas échoué. J'ai simplement trouvé 10000 solutions qui ne fonctionnent pas.
Lephenixnoir Hors ligne Administrateur Points: 24574 Défis: 170 Message

Citer : Posté le 20/10/2015 14:01 | #


Gdubol a écrit :
Oui je vois ce que tu veux dire, mais le problème c'est que étant donné mon niveau de programmation je vais rapidement me retrouver avec:

Lbl 124...

Aucune chance, on ne peut assigner que des lettres ou des chiffres à des labels !

Pour éviter ça, il faut bien penser que chaque label a le rôle d'une fonction : en d'autre termes, le rôle d'un mini programme.

Gdubol a écrit :
Mais j'avais aussi l'idée de faire 2 programme un avec le moteur du jeu et l'autre avec les maps pense tu que c'est une bonne idée sinon autre ?

Je ne vois pas ce que tu voudrais mettre dans le programme avec les maps ? S'il s'agit juste d'un programme qui charge une map dans une matrice, alors oui mieux vaut séparer pour gagner en lisibilité dans le programme principal.

Gdubol a écrit :
Et j'ai eu aussi un autre problème, en mode texte je n'arrive pas à créer de boîte de collision pour mes décors don si tu une solution.

Utilise une matrice, c'est d'autant plus pratique avec le mode texte (la matrice fait 7 par 21, c'est rapidement réglé)

Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Gdubol Hors ligne Membre Points: 160 Défis: 2 Message

Citer : Posté le 20/10/2015 14:39 | #


merci pour ta réponse, je vais écrire le programme comme je peux et te recontacte plus tard


Ajouté le 20/10/2015 à 20:46 :
J'ai juste une dernière question avant de me mettre à la programmation de ce RPG (oui encore une )
Comment feriez vous pour l'affichage de maps parce que je compte en mettre un certain nombre et la seule solution que j'ai c'est d'afficher la map avec des locate sois 7 par map et d'enregistrer chaque élément à sa place dans une matrice 21x7 pour les boîtes de collisions des objets.
Ce qui par map fait un peu beaucoup alors si vous avez une autre solution n'hésitez pas à m'en faire part

merci d'avance et bonne soirée
Je n'ai pas échoué. J'ai simplement trouvé 10000 solutions qui ne fonctionnent pas.
Lephenixnoir Hors ligne Administrateur Points: 24574 Défis: 170 Message

Citer : Posté le 20/10/2015 21:17 | #


Pendant l'exécution du programme, il est en effet judicieux d'utiliser une matrice : mais seulement pour la map qui est en cours d'affichage. Ça ne fait guère que 1764 octets, ce qui reste tout à fait raisonnable. En général, on se contentera d'une seule matrice pour la map courante, que l'on modifiera quand on changera de map.

Pour le stockage, il faut être inventif ! Généralement, on a un programme qui charge la map dans la matrice a partir des données qui sont inscrites en brut dans le code. Le but est alors de les faire tenir dans le plus petit espace mémoire possible histoire de pouvoir écrire un maximum de maps en utilisant un minimum de RAM !
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Gdubol Hors ligne Membre Points: 160 Défis: 2 Message

Citer : Posté le 21/10/2015 23:08 | #


Merci pour ton conseil, mais avant de faire les map de mon jeu j'ai décidé de revoir le moteur de combat qui n'est pas complètement au point par rapport à mes compétences, j'ai décidé de faire un mode de combat en tour par tour pour privilégier la stratégie... Et aussi parce que c'est plus simple à programmer oui je l'avoue
Le problème c'est que j'ai beaucoup de variables qui sont enregistrée dans une matrice (vie, attaque, mana, défense, armure, xp...) et au lancement du programme de combat je les enregistre dans des "lettre" pour alléger le code au niveau des calculs. Jusque là aucun problème mais on y arrive: voilà je dois maintenant enregistrer mes variables dans les lettres et je me retrouve avec un code très répétitif
Mat A[1,1]→A
Mat A[1,2]→B
Mat A[2,1]→C
...


Et je me demandais si quelqu'un n'aurai pas une idée pour raccourcir ce code, car j'ai déjà une idée pour ce qui est de choisir la matrice mais pour la mettre dans la bonne variable je n'en ai aucune idée. J'espère que ma question est claire, si elle ne l'ai pas dites le moi j'essaierai de préciser.

Sur ce bonne soirée à tous.
Je n'ai pas échoué. J'ai simplement trouvé 10000 solutions qui ne fonctionnent pas.
Lephenixnoir Hors ligne Administrateur Points: 24574 Défis: 170 Message

Citer : Posté le 22/10/2015 09:41 | #


(Pour le code, il y a une balise dédiée : )

En général c'est plus intéressant de les stocker directement dans les variables. Si tu utilises une liste ou une matrice tu ne peux pas tout charger d'un coup.

J'ai essayé une affection de type List 1→A~C mais ça ne fonctionne pas. Du coup, aucune chance pour les matrices...
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Gdubol Hors ligne Membre Points: 160 Défis: 2 Message

Citer : Posté le 25/10/2015 14:19 | #


Comme je l'ai dit dans mon post précédent, je suis en train de revoir mon moteur de combat et au passage je suis obligé de créer les différentes armes et armures du jeu pour faire les calculs de dégâts. Seulement je voudrai que le joueur puisse équiper l'arme de son choix même si ce n'est pas la meilleure. J'ai une solution pour équiper automatiquement la meilleur arme mais si vous avez une solution pour que le joueur puisse prendre celle de son choix je suis preneur

PS: Désolé pour le code il me semble que je l'ai fait mais visiblement ça n'a pas marché
Je n'ai pas échoué. J'ai simplement trouvé 10000 solutions qui ne fonctionnent pas.
Lephenixnoir Hors ligne Administrateur Points: 24574 Défis: 170 Message

Citer : Posté le 25/10/2015 14:28 | #


Eh bien, il suffit d'afficher la liste des armes que le joueur possède et lui permettre de choisir non ?

Cela dit, s'il n'y a pas d'effets spéciaux intéressants tu peux équiper par défaut la meilleure arme, ça ne gênera personne
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Gdubol Hors ligne Membre Points: 160 Défis: 2 Message

Citer : Posté le 25/10/2015 16:59 | #


Pour déterminer quelle arme est équipée par le joueur, j'ai attribué à chaque arme un nombre. Derrière j'ai une liste (une valeur pour chaque arme) si la valeur est égale à 1 l'arme est équipée si la valeur est égale 0 l'arme n'est pas équipée. Du coup je me retrouve avec un code hyper répétitif et très long comme j'ai à le faire 11 fois:
Ans=72⇒5→Dim List 3
Ans=72⇒1→List 3
Ans=62⇒5→Dim List 3
Ans=62⇒1→List 3[2
...


Si vous avez une solution pour le raccourcir, je réfléchit à une solution depuis un moment mais je ne trouve pas

PS: Désolé si je suis très embêtant pour vous mais je débute dans la programmation et c'est mon premier projet donc excusez moi si je vous dérange

Je n'ai pas échoué. J'ai simplement trouvé 10000 solutions qui ne fonctionnent pas.
Dark storm Hors ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 25/10/2015 17:20 | #


Si il ne peut avoir qu'une seule arme sur lui, tu peux virer tes listes et dire 0 > pas équipée et * > arme nº*
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Programateur Hors ligne Membre Points: 222 Défis: 10 Message

Citer : Posté le 25/10/2015 17:21 | #


Je veux bien t'aider, mais je pense que tu t'es trompé ici :
1->List 3

Est-ce List 3[1] ?
J'ai besoin de votre participation ici :
94%
Cliquer pour enrouler
Lephenixnoir Hors ligne Administrateur Points: 24574 Défis: 170 Message

Citer : Posté le 25/10/2015 17:28 | #


Gdubol a écrit :
Pour déterminer quelle arme est équipée par le joueur, j'ai attribué à chaque arme un nombre. Derrière j'ai une liste (une valeur pour chaque arme) si la valeur est égale à 1 l'arme est équipée si la valeur est égale 0 l'arme n'est pas équipée.

D'après ta phrase, on ne peut équiper qu'une seule arme... bon, ben tu enregistres l'id de cette arme dans une variable. Pourquoi s'embêter avec une liste qui ne contient finalement qu'une information ? (la seconde, le nombre total d'armes, étant inutile ici)
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Gdubol Hors ligne Membre Points: 160 Défis: 2 Message

Citer : Posté le 25/10/2015 18:06 | #


Effectivement je n'avais pas pensée à cette solution qui est pourtant toute simple je suis vraiment nul

Est-ce List 3[1] ?

Oui c'est bien cela petite erreur de ma part désolé

Ajouté le 27/10/2015 à 22:01 :
Je suis toujours en train de travailler sur mes armes/armures et j'ai rencontré un autre problème: les armes modifient les caractéristique du personnage donc pour modifier la valeur dans la matrice je n'ai pas de problème mais c'est pour changer d'arme: les valeurs de la matrice sont déjà modifiée donc cela modifiera les valeurs actuelles et non pas les valeurs de départ comme je le souhaiterai. Je pensai donc enregistrer les valeurs de base dans une liste ou dans une colonne de la matrice mais je suis sûr qu'il y a une solution plus simple.
Si l'un d'entre vous à une idée je suis preneur.
Je n'ai pas échoué. J'ai simplement trouvé 10000 solutions qui ne fonctionnent pas.
Lephenixnoir Hors ligne Administrateur Points: 24574 Défis: 170 Message

Citer : Posté le 27/10/2015 22:10 | #


En général, on préfère enregistrer la force ou la vitalité, qui sont les stats de base, indépendamment de l'attaque ou la défense, qui prennent en compte les équipements

En l'occurrence, je te conseille d'avoir quatre valeurs : les stats pures et celles avec équipements. Lorsque tu changes d'équipement, tu recalcules les secondes à partir des premières et quand tu modifies les stats de base tu recalcules tout.

De cette manière, tu peut facilement accéder à toutes les valeurs. Une autre manière, peut-être mieux à la réflexion, serait de calculer l'attaque totale et de la stocker dans une variable en début de combat ou autres occasions pendant lesquelles tu en aurais besoin et de ne conserver que les stats pures dans les listes/matrices.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Gdubol Hors ligne Membre Points: 160 Défis: 2 Message

Citer : Posté le 27/10/2015 22:48 | #


Je vois ce que tu veux dire (du moins je pense). Donc tu suggère d'avoir deux colonnes de ma matrice dédiées à mon personnage: une pour les stats de base et une pour les stats +bonus/malus (si j'ai bien compris)

Par contre pour la suggestion vis à vis d'enregistrer l'attaque totale dans une liste/matrice je ne pense pas le faire car ce sont des algorithmes très simple (comme tu dois t'en douter) et par conséquent ils ne gênent pas au niveau de la fluidité du du combat et consomment (je pense) moins de mémoire que de les enregistres dans une liste néanmoins je garde ton conseil à l'esprit car je suis sûr qu'il est valable pour des programmes plus complexes mais comme pour ma part c'est un petit jeu en mode texte je pense que ce n'est pas forcément utile (après je me trompe peut-être c'est à voir) en tout cas merci pour ton conseil.

Ajouté le 02/11/2015 à 22:41 :
Bon maintenant que mon moteur de combat a bien avancé et que je ne vais pas tarder à attaquer le moteur du jeu plus que quelques trucs a ajouter et 2 ou 3 petites erreurs par ci par là j'ai commencé a penser aux maps et je rencontre un petit problème : j'ai une matrice 21*7 et plutôt que d'en plus tout faire avec la matrice je voudrai pas mettre des locate pour afficher les décors, à la je voudrai avoir un code du genre:
Mat B[X,Y]=2=>Locate X,Y,"#"


Avec X et Y qui ne désignent pas une valeur mais toutes les cases de la matrice donc si une valeur de la matrice est égale à 2 alors à cette position la afficher un symbole et pareil pour les autre cases qui sont égalés à 2. Donc je ne sais pas s'il existe une commande pour faire ce que je veux.

En tout cas merci de votre aide jusqu'à maintenant cela me fait très plaisir et me motive beaucoup.


Je n'ai pas échoué. J'ai simplement trouvé 10000 solutions qui ne fonctionnent pas.
Dark storm Hors ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 03/11/2015 07:27 | #


Ah, là t'es obligé de boucler dans la matrice. Y'a pas de fonction qui puisse accélérer le processus…
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Lephenixnoir Hors ligne Administrateur Points: 24574 Défis: 170 Message

Citer : Posté le 07/11/2015 16:01 | #


Ben, en termes d'algorithme, il faut boucler... soit c'est toi, soit c'est l'interpréteur et en l'occurrence ça va être toi.

Après je ne sais pas ce qu'il en est de la vitesse mais si tu veux simplifier le code pour quand tu auras beaucoup de tiles, tu peux faire quelque chose comme :
"#-9O~"→Str A
For 1→Y To 7
For 1→X To 21
Locate X,Y,StrMid(Str 1,Mat A[Y,X],1)
Next:Next

Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Gdubol Hors ligne Membre Points: 160 Défis: 2 Message

Citer : Posté le 09/11/2015 22:27 | #


Je suis sur la fin de mon moteur de combat en ce moment et si e joueur sort victorieux du combat il drop un des 8 item disponibles avec différent taux de drop selon l'item. Et le problème c'est que mon code devrai marcher mais pour une raison obscure ne fonctionne pas bien.

RanInt#(1,100)→E
1≤E≤20⇒List 2[1]+1→List 2[1]
1≤E≤20⇒Locate 5,5,"+1 Potion 20PV"
21≤E≤35⇒List 2[2]+1→List 2[2]
21≤E≤35⇒Locate 5,5,"+1 Potion 20PV"
...


Pour la liste 2 chaque valeur détermine de quel objet il s'agit et la valeur représente la quantité

le problème est que même si E est compris entre 21 et 35 il va considérer que la condition de lignes 2 et 3 est remplie alors qu'elle ne l'est pas.

Si quelqu'un peut m'expliquer mon erreur car je ne comprend vraiment pas.
Je n'ai pas échoué. J'ai simplement trouvé 10000 solutions qui ne fonctionnent pas.
Dark storm Hors ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 09/11/2015 22:51 | #


Tu n'as pas le droit d'encadrer comme ça un nombre

Il faut ajouter le mot-clé "And" (Optn, F6, F6, F5, F1) entre les deux : Si E est supérieur à 1 et si E est inférieur à 20

RanInt#(1,100)→E
1≤E And E≤20⇒List 2[1]+1→List 2[1]
1≤E And E≤20⇒Locate 5,5,"+1 Potion 20PV"
21≤E And E≤35⇒List 2[2]+1→List 2[2]
21≤E And E≤35⇒Locate 5,5,"+1 Potion 20PV"
...

Finir est souvent bien plus difficile que commencer. — Jack Beauregard
1, 2 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 226 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