Le grenier de Berka
Ven 27 Fév 2009 - 23:37
Bonsoir à tous !
J'ai décidé sous ce pompeux titre (je m'en excuse mais je ne suis pas très inspiré ce soir), de déposer ici tous mes petits scripts.
Programmes trop petits pour faire l'objet d'un topic, ils ne seront peut etre pas utiles a tous, mais bon... pour éviter qu'ils soient perdus, je me lance :
Hack de la fonction require:
Détecter l'appui de n'importe quelle touche:
Ouvrir le navigateur web:
Conversion d'un Array vers un Hash:
Conversion de clés de Hash de la chaine au symbole:
Arrondi des coins d'un Bitmap:
Sauver tous les scripts d'un rvdata en ruby pur:
Arrondi à x chiffres après la virgule
Parseur de chaîne
Ecrire à l'envers
Groupement d'éléments de tableau
Couleur hexadécimale vers objet Color Rgss (RGBA)
Symboles mathématiques en ruby
J'espère que ça vous servira !
berka
J'ai décidé sous ce pompeux titre (je m'en excuse mais je ne suis pas très inspiré ce soir), de déposer ici tous mes petits scripts.
Programmes trop petits pour faire l'objet d'un topic, ils ne seront peut etre pas utiles a tous, mais bon... pour éviter qu'ils soient perdus, je me lance :
Hack de la fonction require:
- Spoiler:
- Comme vous l'avez peut etre remarqué, enterbrain a protégé sa methode require, permettant d'importer des fichiers .rb dans rm.
voici comment contourner cette protection:code:- Code:
def require(dll)
$LOAD_PATH<<"./"
Kernel.send(:require,dll)
end
appel:- Code:
require 'mon_fichier'
Détecter l'appui de n'importe quelle touche:
- Spoiler:
- Cette fonction renvoie true si une des touches de rm est presséecode:
- Code:
module Input
def self.all_keys?
self.update
self.constants.each{|i|return true if Input.trigger?(eval(i))}
return false
end
end
appel:- Code:
p 'ok' if Input.all_keys?
Ouvrir le navigateur web:
- Spoiler:
- Cette fonction ouvre votre navigateur web par défaut selon l'adresse indiquée:code:
- Code:
def siteweb(url)
url='http://'<<url if url[0..6]!='http://'
Thread.new{system("explorer",url)}
end
appel:- Code:
siteweb('rpgmakervx.1fr1.net')
Conversion d'un Array vers un Hash:
- Spoiler:
- Transforme chaque valeur d'un tableau en une clé de hash. La donnée en argument est optionnelle, elle représente la valeur du hash, par défaut, nilcode:
- Code:
class Array
def to_hash(val=nil)
return Hash[*self.collect{|v|[v,val]}.flatten]
end
end
appel:- Code:
tab=["clé1","clé2","clé3"]
tab.to_hash(1)
Conversion de clés de Hash de la chaine au symbole:
- Spoiler:
- Cette fonction permet de convertir l'ensemble des chaines clés d'un hash vers des symboles.code:
- Code:
class Hash
def string_to_sym
inject({}){|m,(k,v)|m[k.to_sym]=v;m}
end
end
appel:- Code:
h = {"valeur1" => 1, "valeur2" => 5}
h.string_to_sym
=> {:valeur1 = > 1, :valeur2 => 5}
Arrondi des coins d'un Bitmap:
- Spoiler:
- Permet d'arrondir facilement les coins d'un bitmap suivant un rayon donné. Ne pas utiliser en boucle, le processus étant très lourd.code:
- Code:
class Bitmap
def coins(r=20,c=Color.new(0,0,0,0))
for x in -r..0;for y in 0..-(r**2-x**2)**0.5+r
self.set_pixel(x+r,y,c);self.set_pixel(self.width-y,(self.height-r)-x,c)
end;end
for x in 0..r;for y in 0..-(r**2-x**2)**0.5+r
self.set_pixel(x+(self.width-r),y,c);self.set_pixel(y,x+(self.height-r),c)
end;end
end
end
appel:- Code:
@mon_bitmap.coins(rayon)
Sauver tous les scripts d'un rvdata en ruby pur:
- Spoiler:
- Permet de décrypter tous les scripts d'un fichier rvdata vers des fichiers séprarés en ruby. (Ne comptez pas sur moi pour vous montrer comment faire avec un fichier rgss2a)code:
- Code:
require "zlib"
$scripts={}
File.open("Scripts.rvdata","rb"){|f|Marshal.load(f).each{|s|$scripts[s[1]]=Zlib::Inflate.inflate(s[2])}}
Dir.mkdir("Scripts")rescue nil
$scripts.each_pair{|k,v|File.open("Scripts/#{k}.txt","wb")<<v}
appel:- Code:
lancez le fichier .rb placé dans le répertoire du fichier Scripts.rvdata
Arrondi à x chiffres après la virgule
- Spoiler:
- Permet de préciser le nombre de chiffres après la virgule lors d'un arrondi classique d'un décimal (float). Par défaut, arrondi à l'unité.code:
- Code:
class Float<Numeric
alias :f_round :round unless $@
def round(r=0)
eval sprintf("%.#{r}f",self)
end
end
appel:- Code:
3,14159265.round(3) #3 chiffres après la virgule
Parseur de chaîne
- Spoiler:
- Permet d'extraire le contenu de balises imbriquées. Retourne un tableau de chainescode:
- Code:
class String
def parse(a="<>")
s1,s2=*a.split(//)
l,i,t=0,0,[]
@preg||=eval("/\\#{s1}(.*?)\\#{s2}/")
self.each_char{|c|l-=1 if c==s2
(t[i]||="";t[i]<<c)if l!=0
(i+=1 if l==0;l+=1)if c==s1}
t.compact.each{|l|t<<l.parse(a)if l[@preg]}
t.compact
end
end
appel:- Code:
t="ruby est (un) (super (hyper (voire plus) encore) grand) langage (!)"
t.parse("()") # arg: délimitateur
=> ["un", "super (hyper (voire plus) encore) grand", "!", ["hyper (voire plus) encore", ["voire plus"]]]
Ecrire à l'envers
- Spoiler:
- Indispensable: permet d'écrire à la kikoolol dans tous vos textes. Ce script n'est pas de moi, l'auteur est inconnu, mais il fallait que je le publie ! Je n'ai fait que le remanier à ma sauce.code:
- Code:
class String
$KCODE="u"
MAP=Hash.new{|h,k|k}
{'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghiklmnopqrstuvwxyz'=>
'∀ᗺↃᗡƎℲ⅁HIᒋʞ⅂ƜNOdԾᖈS⊥ႶΛMX⅄Zɐqɔpǝɟɓɥᴉʞ│ɯuodbɹsʇnʌʍxʎz',
'123456890~!@$%^&*()_+{}:|<>?"#`[],./-='=>'|ᘔᗴhᔕ9860~¡Ꭷ$%⋁⅋*)(‾+}{:|><¿„#ˎ][‘˙/-='
}.each{|o,d|o.split(//).zip(d.split(//)).each{|f,t|MAP[f]=t}}
def flip
MAP.values_at(*self.split(//).reverse).join
end
end
appel:- Code:
p "Ruby peut etre un langage tres marrant !".flip
=> "¡ ʇuɐɹɹɐɯ sǝɹʇ ǝɓɐɓuɐ│ un ǝɹʇǝ ʇnǝd ʎqnᖈ"
Groupement d'éléments de tableau
- Spoiler:
- Pour combler la défaillance intellectuelle du précédent script, voici un autre plus intéressant qui permet de grouper les éléments d'un tableau.code:
- Code:
class Array
def groupe_par(n);t=[]
each_with_index{|a,b|t<<[]if b%n==0;t.last<<a};t
end
end
appel:- Code:
p ["un","deux","trois","quatre","cinq","six","sept"].groupe_par(3)
=> [["un", "deux", "trois"], ["quatre", "cinq", "six"], ["sept"]]
Couleur hexadécimale vers objet Color Rgss (RGBA)
- Spoiler:
- Il peut arriver que l'on souhaite convertir des chaines de caractères représentant une couleur hexadécimale ("#3FE532") vers un objet Color de Rgss : Color.new(63, 229, 50).code:
- Code:
class String
def to_rgb
gsub!("#","")
Color.new(*scan(/../).map{|c|c.to_i(16)})
end
end
appel:- Code:
p "#3FE532".to_rgb
=> Color.new(63, 229, 50)
Symboles mathématiques en ruby
- Spoiler:
- Certains symboles mathématiques tels que le Sigma ou la Racine carrée peuvent raccourcir considérablement vos programmes. Voici un petit bout de code vous permettant de les utiliser. C'est du Ruby pur, je ne pense pas qu'il soit possible d'utiliser cela via Rgss.code:
- Code:
#!/usr/bin/env ruby -wKU
# la ligne précédente est à placer en début de fichier rb
module Kernel
def ∑(*a);eval a.join('+');end
def √(a);Math.sqrt(a);end
def π;Math::PI;end
def ∞;1.0/0;end
end
appel:- Code:
p ∑(1, 5, -4)
=> 2
p √(81)
=> 9
p π
=> 3.14159265358979
p ∞
=> Infinity
J'espère que ça vous servira !
berka
Re: Le grenier de Berka
Sam 28 Fév 2009 - 20:43
Merci mon cher Berka !
Il me fallait justement de quoi ouvrir un site depuis mon projet !
Je te remercie fièrement et je teste tout de suite (j'édite après)
Edit1: Pour le moment, ça ne fonctionne pas... Le jeu se fige et le pc rame à mort...
!!! Au moment où j'écris, je viens de voir s'ouvrir une fenêtre... 5 minutes c'est long pour ouvrir. De plus ça l'a pas ouvert avec mon bon navigateur... Ça ouvre Internet Explorer... (comment faire ?)
Je tiendrais au courant
Il me fallait justement de quoi ouvrir un site depuis mon projet !
Je te remercie fièrement et je teste tout de suite (j'édite après)
Edit1: Pour le moment, ça ne fonctionne pas... Le jeu se fige et le pc rame à mort...
!!! Au moment où j'écris, je viens de voir s'ouvrir une fenêtre... 5 minutes c'est long pour ouvrir. De plus ça l'a pas ouvert avec mon bon navigateur... Ça ouvre Internet Explorer... (comment faire ?)
Je tiendrais au courant
Re: Le grenier de Berka
Ven 20 Mar 2009 - 20:36
Cher Berka,
Tu n'as pas répondu à mon problème.
En clair, j'aimerais savoir si on peut ouvrir Firefox.
Merci.
Tu n'as pas répondu à mon problème.
En clair, j'aimerais savoir si on peut ouvrir Firefox.
Merci.
Re: Le grenier de Berka
Ven 20 Mar 2009 - 21:45
Hélas, c'est le seul moyen de faire ca... Je ne sais pas si firefox est par défaut chez toi, mais normalement, cette commande ouvre le navigateur par defaut.
berka
Edit: une toute petite correction censée améliorer la rapidité de lancement... essaye pour voir !
berka
Edit: une toute petite correction censée améliorer la rapidité de lancement... essaye pour voir !
Re: Le grenier de Berka
Sam 21 Mar 2009 - 11:53
En effet, c'est plus rapide. (sur mon vieil ordi environ 1 minute, c'est beaucoup mieux)
Mais je suis désolé de le redire, mais c'est Internet Explorer qui s'ouvre...
Alors que firefox est mon navigateur par défaut...
De plus, le jeu se fige dès le moment où je lance le lien.
Mais ça c'est pas très grave...
Au pire j'ajouterais un $scene = nil
Merci encore pour les améliorations....
Peut être que j'ai un problème chez moi.
Faut que je test sur l'autre ordi puis je te redis ça.
Edit: J'ai testé sur l'autre ordi.
La vitesse se remarque !
Mais ça ouvre encore et toujours Internet Explorer...
Et le jeu fige, même après l'ouverture.
Mais je suis désolé de le redire, mais c'est Internet Explorer qui s'ouvre...
Alors que firefox est mon navigateur par défaut...
De plus, le jeu se fige dès le moment où je lance le lien.
Mais ça c'est pas très grave...
Au pire j'ajouterais un $scene = nil
Merci encore pour les améliorations....
Peut être que j'ai un problème chez moi.
Faut que je test sur l'autre ordi puis je te redis ça.
Edit: J'ai testé sur l'autre ordi.
La vitesse se remarque !
Mais ça ouvre encore et toujours Internet Explorer...
Et le jeu fige, même après l'ouverture.
- elementsquestprojectMembre
- Nombre de messages : 57
Age : 28
Localisation : St-jean-sur-richelieu, QC
Distinction : aucune
Date d'inscription : 05/09/2009
Re: Le grenier de Berka
Mar 8 Sep 2009 - 1:59
J'ai rien compris
Un peut d'aide s'il vous plait :jncpcqtvd:
Un peut d'aide s'il vous plait :jncpcqtvd:
- elementsquestprojectMembre
- Nombre de messages : 57
Age : 28
Localisation : St-jean-sur-richelieu, QC
Distinction : aucune
Date d'inscription : 05/09/2009
Re: Le grenier de Berka
Mer 9 Sep 2009 - 0:08
Bah juste tout! Le script sert a quoi??
- zoneneutreMembre
- Nombre de messages : 129
Age : 36
Distinction : aucune
Date d'inscription : 17/03/2008
Re: Le grenier de Berka
Mer 9 Sep 2009 - 1:01
Il y a plusieurs script et c'est plutot pour les expert en script je crois ^^
- elementsquestprojectMembre
- Nombre de messages : 57
Age : 28
Localisation : St-jean-sur-richelieu, QC
Distinction : aucune
Date d'inscription : 05/09/2009
Re: Le grenier de Berka
Ven 11 Sep 2009 - 0:11
D'accord parce que moi, j'ai rien compris :p
Re: Le grenier de Berka
Sam 12 Sep 2009 - 0:21
C'est seulement pour ajouter des fonctions totalement inutiles ^^'
Mais ça peut rester utile
Mais ça peut rester utile
Re: Le grenier de Berka
Sam 12 Sep 2009 - 19:24
Ha nan ! Je t'arrete tout de suite AnthO ces fonctions là sont compltement utiles, voire indispensables.
berka
berka
- SoketMembre
- Nombre de messages : 200
Age : 30
Localisation : Devant mon écran
Distinction : aucune
Date d'inscription : 27/06/2009
Re: Le grenier de Berka
Sam 12 Sep 2009 - 21:07
Même si c'est inutile, c'est indispensable ...
Re: Le grenier de Berka
Sam 23 Oct 2010 - 14:15
Hop, ajout d'un nouveau bout de code: un parseur de chaine.
Re: Le grenier de Berka
Dim 24 Oct 2010 - 14:40
Ajout de plusieurs codes (indispensables, bien entendu). Réorganisation de la mise en page.
Re: Le grenier de Berka
Jeu 5 Mai 2011 - 22:51
Nouveau bout de code permettant l'utilisation des symboles mathématiques en ruby, tels que ∑ et √.
Re: Le grenier de Berka
Dim 29 Mai 2011 - 0:32
Hop, ajout de la conversion de couleur hexa en couleur rgss Color (RGBA)
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum