scr_StringUsing

Scripts e snippets scritti in GameMaker Language (gml)
Rispondi
Will
Newbie
Messaggi: 27
Iscritto il: 14/10/2013, 18:01
Specialità: Programmazione
Uso: GM:Studio 1.4 Master
Contatta:

scr_StringUsing

Messaggio da Will »

Salve, ho scritto uno script in memoria dei bei tempi del BASIC. Ammetto che è solo la pallida ombra del glorioso PRINT USING ma mi occorreva quel poco che fa.

scr_StringUsing( String, Real );

Codice: Seleziona tutto

///scr_StringUsing ( String, Real );
///         String = stringa con marcatori ( # per la parte intera, % per la parte decimale )
///         Real = valore numerico con quantità di posizioni intere non superiori alla quantità di marcatori #

var format=argument0, intPart=string(floor(argument1));                                                     //
var formLen=string_length(format), intField=string_count("#",format), decField=string_count("%",format);    //
var decPart=string_delete(string_format(argument1-floor(argument1),0,decField),1,2);                        // Dichiarazione variabili
var intLen=string_length(intPart);                                                                          //
var check=0, using="", char="";                                                                             //

check=intField-intLen;                                                                                      // Calcolo posizioni dispinibili
if (check>-1)                                                                                               // Controllo posizioni disponibili
{
    intPart=string_repeat("0",check)+intPart;   // ottimizzazione posizioni vuoti
    repeat(formLen)                             // inizio ciclo di analisi
    {
        char=string_char_at(format,1);          // lettura primo carattere disponibile dalla coda 'formato'
        format=string_delete(format,1,1);       // la coda 'formato' viene decurtata
        if (char="#")                           // analisi posizione parte intera
        {
            using+=string_char_at(intPart,1);       // inserimento valori nella posizione intera
            intPart=string_delete(intPart,1,1);     // la coda 'parte intera' viene decurtata
        } else {
            if (char="%")                       // analisi posizione parte decimale
            {
            using+=string_char_at(decPart,1);       // inserimento valori nella posizione decimale
            decPart=string_delete(decPart,1,1);     // la coda 'parte decimaleì viene decurtata
            } else {                            // nessuna posizione utile trovata
                using+=char;                        // inserimento carattere raw
            }
        }
    }
} else {                                                                                                    // Se non ci sono posizioni disponibili
    using=string_replace_all(format,"#","*");                                                               // l'output viene settato con asterischi
    using=string_replace_all(using,"%","*");                                                                // per la parte intera e per la decimale
}

return using;                                                                                               // ritorno al codice con output string
Download: http://www.datafilehost.com/d/1b26a205 (3Kb)

Entrambi gli argomento sono necessarii ed, in particolare, il primo deve essere formattato con dei marcatori posizionali.
In particolare:
# per indicare le posizioni che la cifre della parte intera possono occupare.
% per indicare le posizioni che le cifre della parte decimale possono occupare.

Per esempio:
scr_StringUsing( "Esempio: ###.%%", 123.45 );

restituirà:

"Esempio: 123.45"

potete aumentare la precisione della parte decimale:

scr_StringUsing( "Esempio: ###.%%%%", 123.45 );

in output:

"Esempio: 123.4500"

potete aumentare anche le posizioni della parte intera:

scr_StringUsing( "Esempio: ######.%%%%", 123.45 );

"Esempio: 000123.4500"

aggiungere separatori per le centinaia:

scr_StringUsing( "Score: ###,###,###.%%", 123456789.10 );

"Score: 123,456,789.10" (Cookie Clicker Style)

Etc. Etc.

Non importa come formattate la stringa: potete mettere i marcatori ovunque purchè soddisfino il numero di cifre recate dal secondo argomento.
scr_StringUsing( "Key Code: ## ## ## ## ##", 1234554321 );

"Key Code: 12 34 55 43 21"

scr_StringUsing( "#,###,###,### Highscore", 1234554321 );

"1,234,554,321 Highscore" (questo è il formato che adopero per i punteggi nel gioco a cui sto lavorando)

E' tutto.
(troppo lungo, spiacente...)

Spero vi sia utile.

Rispondi

Chi c’è in linea

Visitano il forum: Nessuno e 5 ospiti