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 - Autres questions


Index du Forum » Autres questions » Inventaire à Slots
Paulchartres Hors ligne Membre Points: 9 Défis: 0 Message

Inventaire à Slots

Posté le 26/02/2016 12:18

Bonjour/Bonsoir à tous!

Je me présente, paulchartres, codeur indépendant qui fait des jeux casio inspirés de jeux sur téléphone à ses heures perdues en cours..
Bref, si je suis ici c'est pour solliciter votre aide. Effectivement je travaille sur un projet, une reproduction du fameux jeu Case Clicker sur ios si vous connaissez. Dans ce jeu, on ouvre des caisses qui nous donnent des objets aléatoires. jusqu'ici, aucun problème, il suffit d'une simple génération aléatoire de nombre. Cependant après avoir reçu cet objet il faut trouver un moyen de le stocker dans l'inventaire. Pour cela je veux faire un système de slots, c'est à dire que je veux que dès que l'on aie un objet, il se montre dans l'inventaire en premier, puis un deuxième en dessous, etc. Donc pas un inventaire précréé avec Objet 1 x0 ainsi de suite.
Je suppose donc qu'il faut utiliser les strings?

Je vous remercie d'avance pour votre aide.

Paulchartres

PS: J'utilise une Casio Graph 35+ USB


Remiweb Hors ligne Membre de CreativeCalc Points: 1040 Défis: 32 Message

Citer : Posté le 26/02/2016 12:36 | #


Bonjour et bienvenue

Alors, dans la version que je suis en train de développer de Calcraft j'ai reproduit l'inventaire de Minecraft.
Pour ça j'utilise une liste. Chaque case de cette liste correspondant à une case de l'inventaire.

Pour les valeurs elles sont stockée de la manière suivante : (ID de l'objet),(quantité).
Prenons par exemple l'ID 1 pour la pierre.
Si je veux mettre 12 pierres dans la 1ere case de l'inventaire je met 1,12 dans la première case de ma liste.

Pour ajouter un objet récupérer dans l'inventaire je parcours ma liste.
Si l'ID de l'objet est déjà dans une case, j'augmente simplement la quantité (dans mon exemple 1,12 devient 1,13 si on récupère un bloc de pierre).
Si en parcourant la liste l'ID je lui crée simplement une nouvelle case à la fin de la liste.

Le plus délicat avec cette méthode c'est d'afficher l'inventaire, mais ça dépend vraiment de comment tu veux le faire fonctionner dans ton jeu.
Tweaks : ||||| ||||
Paulchartres Hors ligne Membre Points: 9 Défis: 0 Message

Citer : Posté le 26/02/2016 12:45 | #


Je vois à peu près ce que tu veux dire
Donc dans cet inventaire, qui est en fait juste ligne 1 objet 1, ligne 2 objet 2, etc, Il suffirait que j'aie un tableau vide, dans lequel j'ajoute un objet et sa quantité, puis je configure ça pour que la première case du tableau s'affiche dans le tableau dans la ligne 1.

Par exemple, j'ouvre une caisse, je gagne disons un P250 | Ivoire (Ptit truc de csgo ) qui aura pour ID 18 par exemple. La case 1 du tableau est en 0,0 et donc il sera maintenant en 18,1.

Maintenant le problème, c'est de une comment faire en sorte qu'un tableau ait deux valeurs? (Je ne me sert pas énormément des tableaux, sauf quand j'ai plus de variables...) et de deux comment faire en sorte que si la case 1 est différente de 0,0, la case 2 soit remplie?

Merci pour la réponse et j'espère une autre réponse !

Paulchartres
Remiweb Hors ligne Membre de CreativeCalc Points: 1040 Défis: 32 Message

Citer : Posté le 26/02/2016 12:59 | #


Avec plaisir

Paulchartres a écrit :
Maintenant le problème, c'est de une comment faire en sorte qu'un tableau ait deux valeurs?

En fait quand je dis x,y c'est "x virgule y".
C'est à dire que j'utilise la partie entière du nombre pour l'ID, et la partie fractionnaire pour la quantité.
Pour récupérer l'un ou l'autre il faut utiliser Int et Frac.


Paulchartres a écrit :
de deux comment faire en sorte que si la case 1 est différente de 0,0, la case 2 soit remplie?

Admettons que tu aies obtenu l'objet avec l'ID A.
En gros je procède comme ça :
For i=0 to Dim(List 1) :
If Int(List 1[i])=A //Si on tombe sur une case où il y a déjà l'objet
Then List 1[i]+0.1→List 1[i]
Break
IfEnd
If Int(Liste 1[i])=0 //Si on tombe sur une case vide (donc que toutes les autres cases avant n'avait pas notre objet)
Then A+0.1→List 1[i]
Break
IfEnd
Next

Après ce code est à adapter.

Edit :
Là on ne peut pas stocker plus de 9 fois un objet par exemple.
Car s'il y en a 9, on aura quelque-chise comme : 1.9
Donc si on augmente de 0.1 obtient 2.0...
Dans ton cas il faudrait plutôt faire deux tableaux, un pour l'id et un pour la quantité. Ça sera bien plus simple !

Tweaks : ||||| ||||
Paulchartres Hors ligne Membre Points: 9 Défis: 0 Message

Citer : Posté le 26/02/2016 13:14 | #


Je viens de le faire, ça fonctionne, maintenant il faut juste que je trouve un moyen de pas avoir a réécrire "If List 2[1] = 1 Then Locate item" à chaque ligne
Remiweb Hors ligne Membre de CreativeCalc Points: 1040 Défis: 32 Message

Citer : Posté le 26/02/2016 13:28 | #


Je ne sais pas si tu as vu j'ai édité mon message.

Sinon pour l'affichage :
Admettons que ton tableau fasse 10*10 et que tu stockes les ID dans la matrice A
For X=0 To 10
For Y=0 To 10
Mat A[Y,X]≠0⇒Locate 6X,6Y,StrMid("■△●",Mat A[Y,X],1)
Next
Next

Déjà je fais Locate 6X et 6Y histoire d'espacer un peu tout ça. A toi de t'arranger pour que s'affiche au bon endroit

Ensuite l'astuce c'est StrMid !
En fait StrMid(chaine,x,1) va récupérer le xième caractère de la chaine.
Donc si Mat A[Y,X]=1 on aura le premier caractère : "■", Mat A[Y,X]=2 "△", etc...
Donc si ta chaine est faite des caractères correspondants à chaque objet, et que tu les mets dans l'ordre de leurs ID, on va tout simplement récupérer l'apparence de l'objet a partir de son ID.
Tweaks : ||||| ||||
Paulchartres Hors ligne Membre Points: 9 Défis: 0 Message

Citer : Posté le 26/02/2016 13:30 | #


Ok! Merci beaucoup! Encore une dernière question pratique, mais est-il possible de voir de combien de caractères est composé un nombre? Genre 1.2063 = 6 Caractères?
Remiweb Hors ligne Membre de CreativeCalc Points: 1040 Défis: 32 Message

Citer : Posté le 26/02/2016 13:34 | #


Là c'est des mathématiques
Si ton nombre est entier tu peux faire Int(Log(nombre))+1 tu sauras de combien de chiffres il est composé.

Mais franchement ne t'embêtes pas avec les virgules et fait deux mattrices différentes, ça sera plus simple et tout aussi adapté.
Tweaks : ||||| ||||
Paulchartres Hors ligne Membre Points: 9 Défis: 0 Message

Citer : Posté le 26/02/2016 13:38 | #


Question stupide mais c'est ou log?
Remiweb Hors ligne Membre de CreativeCalc Points: 1040 Défis: 32 Message

Citer : Posté le 26/02/2016 13:42 | #


J'ai pas la calculette devant moi mais il doit directement y avoir une touche pour.

Tu ne veux vraiment pas de mes deux matrices ?
Tweaks : ||||| ||||
Paulchartres Hors ligne Membre Points: 9 Défis: 0 Message

Citer : Posté le 26/02/2016 13:45 | #


Ahh sisi j'ai oublié de dire que oui! Après étant débutant en basic je suis pas encore pro mais j'essaie de faire des petits programmes primitifs (j'avais fait un simulateur d'ouverture de caisse csgo qui se sert d'un nombre au hasard pour choisir un item et qui choisit aléatoirement la condition de l'objet)
Remiweb Hors ligne Membre de CreativeCalc Points: 1040 Défis: 32 Message

Citer : Posté le 26/02/2016 13:49 | #


C'est cool le simulateur de caisses, et c'est plus original que les + ou - et les morpions.

Mais du coup tu n'as plus besoin de savoir la longueur d'un nombre ?
Tweaks : ||||| ||||
Paulchartres Hors ligne Membre Points: 9 Défis: 0 Message

Citer : Posté le 26/02/2016 13:56 | #


Si mais si tu sais pas c'est pas grave
Remiweb Hors ligne Membre de CreativeCalc Points: 1040 Défis: 32 Message

Citer : Posté le 26/02/2016 14:00 | #


Je ne sais pas s'il y a vraiment une solution si c'est un nombre a virgule...
Tu peux toujours multiplier ta valeur par 10 jusqu'à ce que Frac(nombre)=0 puis faire mon Int(Log (nombre) )+1
Mais c'est assez lourd...

Si ce n'est pas lié à mes id,quantité c'est pour faire quoi ? J'aurai peut-être un autre moyen de le faire
Tweaks : ||||| ||||
Paulchartres Hors ligne Membre Points: 9 Défis: 0 Message

Citer : Posté le 27/02/2016 13:55 | #


Désolé de la réponse tardive

En fait, j'ai dans ce jeu ce clicker un affichage avec sur une ligne le mot Money, et centré sur la ligne d'en dessous la valeur 0 (Donc en dessous du n). Le truc c'est que j'aimerais faire en sorte que si la valeur est disons 1.3, qu'elle bouge de façon à ce que le premier chiffre soit situé en dessous du o de money, afin qu'elle soit centrée.
Sinon je peux faire la technique que tu m'as proposée, du x10 tant que Frac(nombre)!=0 puis le nombre +1 pour compter la virgule...

Bref, je sais que c'est un peu audacieux de se lancer dans un projet comme celui-ci a mon niveau d'étudiant mais bon.. désolé j'adore coder
Eltoredo Hors ligne Modérateur Points: 4301 Défis: 35 Message

Citer : Posté le 27/02/2016 21:57 | #


Ne t'excuse pas, on a tous des projets audacieux, c'est normal

En gros, tu veux un décalage de texte quand la valeur devient décimale parce que ça prend plus de place ? Avec les Str, c'est vite réglé
La procrastination est une vertu. (voir ma description pour comprendre mon raisonnement)
Amael Hors ligne Membre Points: 253 Défis: 9 Message

Citer : Posté le 01/03/2016 13:48 | #


Oui, mais dans ce cas, il faut convertir le nombre en Str. Ça ralenti le prog. Après, faire x10 jusqu'à ce que Frac nombre=0, ça prend du temps aussi. Il faut voir lequel prend le moins de temps.
Si c'est possible, c'est fait; si c'est impossible, cela se fera.

Mes programmes (À noter sous peine de ban )
Notez les !
Monopoly bank Pratique si vous perdez les billets
Remplissez facilement vos listes avec Statistiques
Et des conversions des unités du système métrique.
Matt36230 Hors ligne Membre Points: 1888 Défis: 0 Message

Citer : Posté le 02/03/2016 07:51 | #


Je pense que le plus simple et rapide serait de convertir ton nombre en str grâce a Var2Str de Totoyo.Tu peux te débrouiller après avec StrLen () pour connaitre la taille de ta Str et la placer en fonction ensuite
Un truc du style : Locate Int(11-StrLen(Str 1)/2) , 3, Str 1

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 87 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