Partagez
Aller en bas
avatar
Neo_Ryu
Membre

Nombre de messages : 17
Age : 32
Localisation : France (02)
Distinction : aucune
Date d'inscription : 18/11/2014

[ANNULE] Affichage d'une variable numérique en image

le Dim 23 Nov 2014 - 21:06
Bonjour à toutes et tous !

Venant de m'inscrire sur le forum, et ayant pu découvrir quelques aspects de la programmation Ruby (apprentissage débuté hier soir), j'en ai profité pour pondre une classe permettant l'extraction de chiffres dans un nombre (entier ou flottant, j'ai pensé au deux cas de figure). Attention, ce script est succeptible d'être modifié ultérieurement etant actuellement en cours de création !

Quel est l'intérêt de cette classe ?
Elle peut avoir diverses applications, comme par exemple gérer l'affichage des chiffres sous forme d'images.
En effet pour afficher un chiffre variable, par exemple 1337, vous n'allez pas créer 1337 images voir plus.
L'idée est donc de faire une picture (charset ou autre selon les besoins) comprenant les chiffres 0 1 2 3 4 5 6 7 8 9 ;
puis d'afficher les dites images.

C'est la tout l’intérêt de la classe qui s'occupera de la récupération d'une variable numérique que nous passeront en paramètre au script, dans un tableau ou chaque colonne contiendra l'un des chiffres. Il ne restera alors plus qu'a lire ce dit tableau, puis d'afficher l'image correspondant au chiffre et le tour est joué !

Code:
# CLASS_EXTRACT - by Neo_Ryu
# (libre de droit d'utilisation et de modification, en laissant me citant simplement comme auteur d'origine)
class Extract_Chiffres

  def initialize
    # Recuperation du nombre arrondi (le 0.5 sert pour arrondir a l'inferieur)
    @number = $game_variables[1].to_i
    nbr = @number - 0.5
    @nbr_entier = nbr.round
    # Verification de la longueur du nbr_entier via la forme d'une chaine
    chaine = @nbr_entier.to_s
    $longueur = 4 #chaine.lenght #-> Je met 4 pour tester 
    # Création d'un tableau vide
    $tabNbr = Array.new
#TEST DEBUG
$tabNbr.push(@number)
    # Appel de la methode exctract_nbr_entier
    self.extract_nbr_entier
  end
    
  def extract_nbr_entier
    # Application d'une division adequate en rapport à la longueur de la valeur entière
    case $longueur
      when 0 then nbr_division = 0 # on evite le nil
      when 1 then nbr_division = @nbr_entier % 10
      when 2 then nbr_division = @nbr_entier / 10            
      when 3 then nbr_division = @nbr_entier / 100
      when 4 then nbr_division = @nbr_entier / 1000
      when 5 then nbr_division = @nbr_entier / 10000
      when 6 then nbr_division = @nbr_entier / 100000
      when 7 then nbr_division = @nbr_entier / 1000000
      when 8 then nbr_division = @nbr_entier / 10000000
      when 9 then nbr_division = @nbr_entier / 100000000
      when 10 then nbr_division = @nbr_entier / 1000000000
      # Nombre pouvant aller jusqu'a 9 999 999 999 (,999....) !!!
      else nbr_division = 0
      # nombre trop grand... a moins d'ajouter quelques when !
    end    
    if $longueur >= 1
      # Application d'un modulo de 10 à nbr_division
      nbr_division %= 10
      # On retire les chiffres après la virgule
      nbr_soustraction = nbr_division - 0.5    
      nbr_stockage = nbr_soustraction.round #.ceil
      # Stockage de la valeur dans le tableau a l'emplacement suivant
      $tabNbr.push(nbr_stockage)
      # Valeur suivante à stocker dans le tableau
      $longueur -= 1
      self.extract_nbr_entier
    else
      nbr_stockage = @number.to_i - @nbr_entier
      # Stockage des chiffres flottant dans le tableau (si besoin de reutiliser)
      $tabNbr.push(nbr_stockage)
      #> on quitte la fonction, le tableau est récupérable pour être utilisé dans une autre class
      # $TabNbr.each { |n| puts n }
    end
    return $tabNbr
  end
  
end

class Extract_Lettres

  def initialize
    phrase = $game_variables[1]
    # Création d'un "tableau" (une chaine est en réalité considérée comme un tableau)
    # ce qui facilite les chose. Pour être sur qu'il s'agisse d'une chaine : .to_s
    $tabChaine = phrase.to_s
    # Verification de la longueur de la chaine
    $longueur = $tabChaine.lenght
    self.extract_chaine
  end
    
  def extract_chaine
    # A faire
    # $tabChaine.each { |l| puts l }
    return $tabChaine
  end
  
end

Bon je post le script, je n'ai pas encore pu le tester (mais le jeu ne plante pas donc pas de soucis), si vous avez des remarques ou autres pour l'améliorer je suis preneur ! ^^ Je modifierai le titre lorsque tout sera testé et fonctionnel (d'ailleurs si des volontaires veulent tester, voir créer une classe d'affichage d'image, pas de soucis au contraire ! ^^
EDIT : Quelques erreurs corrigées, mais reste une erreur critique d'incomprehension de l'interpreteur sur des []
-> soit cela proviendrai du tableau, soit de la variable du jeu, si vous avez des idées...

Conditions en event:
> J'ai rajouté des attente en frames, et modif la variable de re uperation du return nouvellement intégré.


Dernière édition par Neo_Ryu le Mer 24 Déc 2014 - 0:59, édité 4 fois (Raison : Toujours non fonctionnel, mais quelques corrections... (2))
avatar
Nozvez
Membre

Nombre de messages : 354
Distinction : aucune
Date d'inscription : 16/03/2012

Re: [ANNULE] Affichage d'une variable numérique en image

le Dim 23 Nov 2014 - 22:14
C'est une très bonne idée ! Je le testerai ultérieurement (là c'est dimanche et je ne vais pas trop traîner devant le PC, je bosse demain) et te ferai un petit compte-rendu !
avatar
Neo_Ryu
Membre

Nombre de messages : 17
Age : 32
Localisation : France (02)
Distinction : aucune
Date d'inscription : 18/11/2014

Re: [ANNULE] Affichage d'une variable numérique en image

le Lun 24 Nov 2014 - 0:34
Ca marche, par contre vu que je débute depuis avant-hier sur Ruby, je coince un peu pour l'appel de l'event sur la map, ainsi que l'appel de la fonction avec passage de la variable en paramètre.

EVENT NON FONCTIONNEL:

Voila un screenshot de l'event actuel, non fonctionnel (et si il y a de grossières erreurs, j'accepte les critiques constructives !) =)


Edit : Je vais placer un pointeur de variable, ca esquivera le probleme du passage de parametre pour commencer...

Need info sur l'affichage d'image (mon aide RPG Maker VxAce est en japonais, ca n'aide pas x) ), voir si vous avez le fichier d'aide en anglais et francais je suis preneur ! =)
avatar
LightNox
Membre

Nombre de messages : 1756
Age : 28
Localisation : Chez Moi ^^
Date d'inscription : 10/04/2008

Re: [ANNULE] Affichage d'une variable numérique en image

le Mar 25 Nov 2014 - 1:52
tiens le fichier d'aide rmvx ace en anglais fais en bon usage Wink
https://mega.co.nz/#!AR1TSISL!qnKJcYCOyKH2sGbzAgvwXGFBsNr1rpBhOxqcOfD_5bI
avatar
Neo_Ryu
Membre

Nombre de messages : 17
Age : 32
Localisation : France (02)
Distinction : aucune
Date d'inscription : 18/11/2014

Re: [ANNULE] Affichage d'une variable numérique en image

le Mar 25 Nov 2014 - 12:09
Merci LighNox ! Ca sera infiniment plus pratique que celui en Jap ! Smile
Vous savez si il existe un fichier d'aide en Fr ?
avatar
Eekoun
Membre

Nombre de messages : 86
Distinction : aucune
Date d'inscription : 06/03/2014

Re: [ANNULE] Affichage d'une variable numérique en image

le Mar 25 Nov 2014 - 13:37
Le code est un peu ridicule. si tu veux tu peux t'inspirer de ce qu'on a fait pour RME :
Code:
#==============================================================================
# ** Numeric
#------------------------------------------------------------------------------
# Managing digits separately
#==============================================================================

class Numeric
  #--------------------------------------------------------------------------
  # * handle isoler
  #--------------------------------------------------------------------------
  def isole_int(i); (self%(10**i))/(10**(i-1)).to_i; end
  #--------------------------------------------------------------------------
  # * Int isoler
  #--------------------------------------------------------------------------
  [:units, :tens, :hundreds, :thousands,
    :tens_thousands, :hundreds_thousands,
    :millions, :tens_millions,
    :hundreds_millions ].each.with_index{|m, i|define_method(m){isole_int(i+1)}}
  #--------------------------------------------------------------------------
  # * alias
  #--------------------------------------------------------------------------
  alias :unites              :units
  alias :dizaines            :tens
  alias :centaines          :hundreds
  alias :milliers            :thousands
  alias :dizaines_milliers  :tens_thousands
  alias :centaines_milliers  :hundreds_thousands
  alias :dizaines_millions  :tens_millions
  alias :centaines_millions  :hundreds_millions
end

Par contre ça sert a rien...
avatar
LightNox
Membre

Nombre de messages : 1756
Age : 28
Localisation : Chez Moi ^^
Date d'inscription : 10/04/2008

Re: [ANNULE] Affichage d'une variable numérique en image

le Mar 25 Nov 2014 - 17:30
Neo_Ryu le fichier d'aide de rmvx ace n'existe pas en FR mais si je n'avais pas une flemme phénoménale je le traduirais bien volontiers mais la x)
Ou alors il existe mais en traduction grossière (Google Trad).
avatar
Neo_Ryu
Membre

Nombre de messages : 17
Age : 32
Localisation : France (02)
Distinction : aucune
Date d'inscription : 18/11/2014

Re: [ANNULE] Affichage d'une variable numérique en image

le Mer 26 Nov 2014 - 0:47
@Eekoun a écrit:Le code est un peu ridicule. si tu veux tu peux t'inspirer de ce qu'on a fait pour RME :
Code:
#==============================================================================
# ** Numeric
#------------------------------------------------------------------------------
# Managing digits separately
#==============================================================================

class Numeric
   #--------------------------------------------------------------------------
   # * handle isoler
   #--------------------------------------------------------------------------
   def isole_int(i); (self%(10**i))/(10**(i-1)).to_i; end
   #--------------------------------------------------------------------------
   # * Int isoler
   #--------------------------------------------------------------------------
   [:units, :tens, :hundreds, :thousands,
     :tens_thousands, :hundreds_thousands,
     :millions, :tens_millions,
     :hundreds_millions ].each.with_index{|m, i|define_method(m){isole_int(i+1)}}
   #--------------------------------------------------------------------------
   # * alias
   #--------------------------------------------------------------------------
   alias :unites              :units
   alias :dizaines            :tens
   alias :centaines           :hundreds
   alias :milliers            :thousands
   alias :dizaines_milliers   :tens_thousands
   alias :centaines_milliers  :hundreds_thousands
   alias :dizaines_millions   :tens_millions
   alias :centaines_millions  :hundreds_millions
end

Par contre ça sert a rien...

Mon but est d'apprendre le Ruby, il faut donc bien commencer par quelques chose ! Donc malgres la critique (en soit surement justifiee je n'en doute pas), je prendrai le temps demain soir de regarder plus en détails ton code (merci au passage) pour m’améliorer. ^^
Quand a l'utilité, j’avais quelques petites idées en tête qui nécessite de passer par cette classe ^^

RME = https://github.com/funkywork/RMEBuilder ?
avatar
Zangther
Membre

Nombre de messages : 904
Distinction : aucune
Date d'inscription : 06/02/2013

Re: [ANNULE] Affichage d'une variable numérique en image

le Mer 26 Nov 2014 - 10:20
Nope, RME = https://github.com/funkywork/RME
Wink
avatar
Neo_Ryu
Membre

Nombre de messages : 17
Age : 32
Localisation : France (02)
Distinction : aucune
Date d'inscription : 18/11/2014

Re: [ANNULE] Affichage d'une variable numérique en image

le Jeu 27 Nov 2014 - 12:18
@Zangther a écrit:Nope, RME = https://github.com/funkywork/RME
Wink
@Eekoun a écrit:si tu veux tu peux t'inspirer de ce qu'on a fait pour RME

Merci Zanghter ! ^^ Impossible de lancer le projet RME (pour voir ce que ca donne), j'imagine que ce n'est pas 'normal' ?!


Mais je regarderai plus en details le code source dans mes moments libres pour apprendre en tout cas ^^


Dernière édition par Neo_Ryu le Jeu 27 Nov 2014 - 13:31, édité 2 fois (Raison : EDIT : RUBY de RMVXAce est en version 1.9.2, et RUBY verison stable actuel (hors RM) est en version 2.1.5)
avatar
Eekoun
Membre

Nombre de messages : 86
Distinction : aucune
Date d'inscription : 06/03/2014

Re: [ANNULE] Affichage d'une variable numérique en image

le Jeu 27 Nov 2014 - 12:31
1.9.3
avatar
Neo_Ryu
Membre

Nombre de messages : 17
Age : 32
Localisation : France (02)
Distinction : aucune
Date d'inscription : 18/11/2014

Re: [ANNULE] Affichage d'une variable numérique en image

le Jeu 27 Nov 2014 - 13:32
Merci Eekoun (je venais de trouver la solution et ai modif mon post avant d'avoir refresh la page ><)
cf : http://www.rpg-maker-detente.com/t583p50-rpg-maker-vx-ace

Je me demandais ca car sur ma verison actuelle de ACE, j'ai recup un script de Khas (awesome light effect) que je n'arrive pas a faire fonctionner correctement pour le slumieres dynamique (meme en copiant collaant les maps/scripts sur mon projet.
J'ai donc verifier si il y avais conflit avec d'autres scripts : nop
Ma supposition est donc la suivante :

y a t-il des differences entre les scripts inclus nativement de la verison JAP (celle de Khas) et ceux de la version FR (ma version non officielle) ?

Ca n'expliquerai aps pourquoi RME ne veux aps fonctionner correctement chez moi, mais si il y a un souci avec la version que je possède de RM VX Ace, ca va poser des soucis pour la suite quand meme ><
avatar
Zangther
Membre

Nombre de messages : 904
Distinction : aucune
Date d'inscription : 06/02/2013

Re: [ANNULE] Affichage d'une variable numérique en image

le Jeu 27 Nov 2014 - 17:24
Normalement non, a part peut être les tables de caractères. C'est quoi ton problème de lumières dynamiques ?
avatar
Eekoun
Membre

Nombre de messages : 86
Distinction : aucune
Date d'inscription : 06/03/2014

Re: [ANNULE] Affichage d'une variable numérique en image

le Jeu 27 Nov 2014 - 17:30
Ché pas essaye d'enlever ça "# -*- coding: utf-8 -*-" en haut des scripts.
avatar
Neo_Ryu
Membre

Nombre de messages : 17
Age : 32
Localisation : France (02)
Distinction : aucune
Date d'inscription : 18/11/2014

Re: [ANNULE] Affichage d'une variable numérique en image

le Jeu 27 Nov 2014 - 18:37
@Zangther a écrit:Normalement non, a part peut être les tables de caractères. C'est quoi ton problème de lumières dynamiques ?

Les lumières dynamiques (même avec changement skin du perso) ne se découpent pas en touchant les rebords des murs, j'ai tenté le changement de la variable booléenne en début de script sans aucun changement, seul le script de Khas marche sur sa démo, pas en importation sur mon projet. Je regarderai a ca samedi (projet vierge / installation d'une autre version de Ace / etc) mais bon, je trouve ca plutot bizarre...

EDIT...

@Eekoun a écrit:Ché pas essaye d'enlever ça "# -*- coding: utf-8 -*-" en haut des scripts.



Aucun rapport a ma version win8 x64 peut etre ? EN tout cas je verif samedi si ca ne viens pas de ma version rpg maker vx ace trad fr qui me ferait ca...
avatar
Zangther
Membre

Nombre de messages : 904
Distinction : aucune
Date d'inscription : 06/02/2013

Re: [ANNULE] Affichage d'une variable numérique en image

le Jeu 27 Nov 2014 - 23:06
Je crois que quelqu'un avait eu un problème similaire mais avec des toits. Y'a de la configuration à faire sur tes maps au préalable.
avatar
Neo_Ryu
Membre

Nombre de messages : 17
Age : 32
Localisation : France (02)
Distinction : aucune
Date d'inscription : 18/11/2014

Re: [ANNULE] Affichage d'une variable numérique en image

le Ven 5 Déc 2014 - 17:01
Merci Zanghter, je vais regarder a ca ^^
EDIT : Effectivement, il y a des numeros a mettre sur les tilesets pour indiquer leur hauteur ! =)

Bon je vais regarder au script RME now ^^ (j'ai étais un peu oqp niveau taff, j'ai du mettre tt ca de coté)
avatar
Neo_Ryu
Membre

Nombre de messages : 17
Age : 32
Localisation : France (02)
Distinction : aucune
Date d'inscription : 18/11/2014

Re: [ANNULE] Affichage d'une variable numérique en image

le Sam 6 Déc 2014 - 14:35
J'ai un peu regardé la classe pour RME, très jolie au passage, par contre débutant en Ruby, je me pose une question concernant isolate_int(i) : le i correspond t-il a l'entier que l'on passe en paramètre, ou a une variable d’incrémentation ? (voir les deux ? si oui pourquoi et comment). Ca me laisse plutôt perplexe pour la compréhension (et donc la modification éventuelle) du code... :s

Ayant repris le code source de RME pour le modifier en lui intégrant directement le passage en paramètre d'une variable du jeu (modifiable donc aisément in game, et/ou pouvant servir de pointeur de variable), je bloque sur la compréhension de la dite méthode (auparavant j'utilisai un modulo (%) pour la séparation des chiffres, si une petite analyse du code RME pouvait m'etre donner ca serait parfait).

Code:
#==============================================================================
# ** RGSS3 Classe Extract_Chiffres **
# Manipulation de nombres par separation unitaire des chiffres qui le compose
# pour un affichage d'images
# Support : RPG Maker VX ACE
#==============================================================================
class Extract_Chiffres
  def initialize
    # Initialisation d'un tableau avec éléments en alias en Anglais
    tabNbr = [:units, :tens, :hundreds, :thousands,
    :tens_thousands, :hundreds_thousands,
    :millions, :tens_millions,
    :hundreds_millions ].each.with_index{|m, i|define_method(m){isole_int(i+1)}}
#  :hundreds_millions ].each.with_index{|m, i|define_method(m){isole_int($game_variables[1].to_i)}}
    # puis pour chaque element du tableau, creation d'une methode en métaprogrammation
    # appellant la methode isole_int avec comme parametre la variable RMAce numéro 1 (en entier)
    
      # Définition des alias en Français (millions s'écrit de la même façon)
      alias :unites              :units
      alias :dizaines            :tens
      alias :centaines           :hundreds
      alias :milliers            :thousands
      alias :dizaines_milliers   :tens_thousands
      alias :centaines_milliers  :hundreds_thousands
      alias :dizaines_millions   :tens_millions
      alias :centaines_millions  :hundreds_millions
      
    #self.isole_int($game_variables[1].to_i)
  end
  
  # Methode de séparation unitaire du nombre (modif a faire ?)
  def isole_int(i); (self%(10**i))/(10**(i-1)).to_i; end

  def Affichage_Chiffres
    # Création d'un constructeur de la classe Game_Picture pour l'affichage d'images
    @img = Game_Picture.new(z)
    @img = $game_map.screen.pictures[z]
    # Pour chaque élément (object), selon le chiffre, on affiche une image différente (a définir)
    tabNbr.each do  |object|
     # A FAIRE : incrementation des variables x et/ou y pour afficher l'image suivante a un autre emplacement
     case object
      #-----------------------------------------------------------------------
      # MODIFICATIONS A EFFECTUER ICI !!!
      # show(name, origin, x, y, zoom_x, zoom_y, opacity, blend_type)
      # > Où name est le nom de l'image, origin le point d'origine (0 pour haut-gauche, 1 pour central), x et y la position,
      #   zoom_x et zoom_y l'agrandissement, opacity l'opacité et blend_type le type de transparence.
      #   exemple : $game_screen.pictures[2].show("fond_carte.png", 1, 100, 100, 100, 100, 255, 0)
      #-----------------------------------------------------------------------
      when 0 then @img.show("picture name0", origin, x, y, zoom_x, zoom_y, op, blend_type)
      when 1 then @img.show("picture name1", origin, x, y, zoom_x, zoom_y, op, blend_type)
      when 2 then @img.show("picture name2", origin, x, y, zoom_x, zoom_y, op, blend_type)
      when 3 then @img.show("picture name3", origin, x, y, zoom_x, zoom_y, op, blend_type)
      when 4 then @img.show("picture name4", origin, x, y, zoom_x, zoom_y, op, blend_type)
      when 5 then @img.show("picture name5", origin, x, y, zoom_x, zoom_y, op, blend_type)
      when 6 then @img.show("picture name6", origin, x, y, zoom_x, zoom_y, op, blend_type)
      when 7 then @img.show("picture name7", origin, x, y, zoom_x, zoom_y, op, blend_type)
      when 8 then @img.show("picture name8", origin, x, y, zoom_x, zoom_y, op, blend_type)
      when 9 then @img.show("picture name9", origin, x, y, zoom_x, zoom_y, op, blend_type)
        
=begin
  #--------------------------------------------------------------------------
  # * Game_Picture : Public Instance Variables
  #--------------------------------------------------------------------------
  attr_reader   :number                   # picture index
  attr_reader   :name                     # filename
  attr_reader   :origin                   # starting point
  attr_reader   :x                        # x-coordinate
  attr_reader   :y                        # y-coordinate
  attr_reader   :zoom_x                   # x directional zoom rate
  attr_reader   :zoom_y                   # y directional zoom rate
  attr_reader   :opacity                  # opacity level
  attr_reader   :blend_type               # blend method
  attr_reader   :tone                     # color tone
  attr_reader   :angle                    # rotation angle
=end
  
    end
    # A FAIRE : un update de la methode (quand tout sera fonctionnel) pour que
    # le compteur d'affichage des chiffres se renouvel automatiquement ; ou alors
    # passer par un proces paralelle in game pour appeler la classe en boucle.
  end
end

Merci d'avance pour votre aide !

EDIT : PS : Si il y a des erreurs, n’hésitez pas à le signaler ! Je suis la pour apprendre, donc toute critique constructive est toujours intéressante ! Le code est en brouillon pour le moment donc il y en aura surement, mais bon, je continuerai de m'acharner sur cette classe lol  Rolling Eyes (même si elle semble plus abstraite, le potentiel en lui même serait par exemple de pouvoir gérer l'affichage numérique en image, mais encore si on pouss eplus loin de gérer un évent d'image plus aisement en incrémentant une seule variable comme on le fait souvent pour gérer le fil du scenario in game, mais si le systeme abouti, pourquoi pas gérer un tableau mutlidimensionnel pour y stocker divers autres tableaux, un peu comme une base de donnée pour pictures).

HS : De ce que je peux voir de Ruby, ca me change des autres langages en tout cas, il a vraiment un bon potentiel pour travailler plus vite, j'ai été étonné de voir la metaprogrammation via define_methode, en tout cas ca motive a apprendre ce langage a la fois simple dans son utilisation (type de variable qui s'attribue automatiquement par exemple) mais en meme temps complexe (pour un débutant pur, il y a tout de même des notions avancées a connaitre).
Contenu sponsorisé

Re: [ANNULE] Affichage d'une variable numérique en image

Revenir en haut
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum