Posté le 26/02/2016 12:18
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
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.
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
Citer : Posté le 26/02/2016 12:59 | #
Avec plaisir
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.
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 :
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 !
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
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 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.
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?
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é.
Citer : Posté le 26/02/2016 13:38 | #
Question stupide mais c'est ou log?
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 ?
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)
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 ?
Citer : Posté le 26/02/2016 13:56 | #
Si mais si tu sais pas c'est pas grave
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
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
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é
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.
Remplissez facilement vos listes avec Statistiques
Et des conversions des unités du système métrique.
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
Un beat them all pour les CPC 19
Un jeu de Tank multijoueur en version graphique
Un jeu de boxe rigolo
Le moteur de combat épique d'un RPG
soccer physics : Un jeu de foot totalement wtf !
Survie 1 & 2 te laisseras-tu attraper par la méchante IA ?
Séquestrez les tous avec Catch'em all !
Joué à la calcultarice et pécher ? Facile !
Battle un système de combat dément !!
Débombe pas tout à fait un démineur
Mon mario pour le concours des 10 ans de PC
Casio jump un doodle jump pas comme les autres !
Rush four your life : tu cours ou tu meurs
Cookie clicker ! More cookies MOOORE !
Move et esquive : bouge pour esquiver les ennemis !
Guitar Hero !! Let's rock !
INVASION : Au secours on se fait envahir !
Un devine nombre entièrement customisable (mon 1er jeu)
Un outil pour dessiner des sprites en super drawstat et qui vous le compile pour vous donner un code utilisable dans vos programmes
Un super programme de dessin bourré de trucs funcs
Sortir une version finale de Tankasio
Bien m'améliorer en C parce que pour l'instant c'est pas jojo
Une ou plusieurs idées qui mûrissent petit à petit