Rpg²S Forum uses cookies. Read the Privacy Policy for more info. To remove this message, please click the button to the right:    I accept the use of cookies

Vai al contenuto

Rpg²S Forum uses cookies. Read the Privacy Policy for more info. To remove this message, please click the button to the right:    I accept the use of cookies

Screen Contest #90

Kamikun






  • Si prega di effettuare il log in prima di rispondere
Laboratorio - Grado 1 - - - - -

    Alato
  • R²S Scripting Team

  • Utenti Speciali
  • Rens: 0
  • 0
  • StellettaStellettaStellettaStellettaStelletta
  • 1099 messaggi
  • Sesso:Maschio
  • Provenienza:Genova
  • Abilità:Maestro

#1 Inviato 03 December 2006 - 15:06 PM

Allora, vediamo.

Questo ? il primo abbozzo del Laboratorio, un posto in cui gli utenti possono lavorare su piccolli script proposti dall'insegnante di turno e in generale fare esercizio. Era un po' che pensavo di aprirlo ma mi mancava un argomento da cui partire: vista l'assenza, almeno per ora, di una lezione che spieghi l'utilizzo degli Array, proprio questi saranno il nostro primo argomento!
Il Grado 1 sta ad indicare il livello che bisogna avere per partecipare, poich? questo ? un servizio esclusivo per gli Studenti del Campus.
 

Laboratorio di RGSS - Array e Ciclo for

Ora cercher? di darvi una breve infarinatura dei concetti di base per poter metterci subito al lavoro.

Concetti di base

"Un array (o matrice) ? un gruppo di locazioni di memoria che hanno lo stesso nome e si distinguono le une dalle altre attraverso un indice" questa ? la sua definizione.
Ma andiamo ad analizzarne il significato: considerando che le variabili sono etichette associate a locazioni di memoria, si capisce che gli array in pratica sono un insieme di variabili con lo stesso nome.
Per poterle distinguere l'una dall'altra si utilizza un indice che viene inserito all'interno di due parentesi quadre subito dopo il nome. L'indice parte da 0 e va aumentando.

Vediamo questo esempio:

@array[0] = 10

Che cosa abbiamo fatto? @array ? un array, e abbiamo inserito il valore 10 nella suo primo elemento. Ogni elemento funziona esattamente come una qualunque variabile.
Quindi:

@array[0]

@array[1]

@array[2]

sono tutte considerabili come variabili differenti accomunate dallo stesso nome.

Probabilmente vi starete chiedendo perch? bisogna utilizzarli se funzionano esattamente come le variabili: ora non ? chiaro perch? abbiamo pochi elementi, ma immaginate di avvere un array con migliaia di elementi, la comodit? di poterli richiamare semplicemente tramite un indice ? enorme!

Per creare un array ci sono diversi modi:

@array = []

@array = Array.new

Questi creano un array generico, insomma non sappiamo qual ? il numero di elementi e cosa contengono.
Possiamo invece scrivere:

@array = [10, 15, 20]

per ottenere un array di tre elementi che contengono rispettivamente i valori 10, 15 e 20.

Continuando sulla falsariga di quest'ultimo esempio, immaginiamo di voler stampare il contenuto dei tre elementi dell'array.

print @array[0]

print @array[1]

print @array[2]

Come vedete l'indice parte sempre da 0 e non da 1, quindi se volete richiamare il secondo elemento dell'array dovete mettere un 2 tra le quadre.

Ora pensate che ci sono comandi che permettono di fare la stessa azione 'n' volte: capirete che potrete in poche righe applicare un comando a centinaia di elementi di un array.
Uno di questi comandi, il pi? comodo per questo utilizzo, ? il for.

@array = []

for i in 0..3

@array[i] = 10 * i

end

Analizziamo questo pezzettino di codice: il for ? un ciclo che ripete l'azione contenuta tra for ed end e ad ogni giro aumenta la variabile i di 1, variabile che si pu? utilizzare per qualunque operazione. Questo lo fa partendo dal primo numero dopo l'in fino al numero dopo i puntini: in questo caso quindi parte da 0 e va fino a 3.
ATTENZIONE: non lasciatevi ingannare dallo zero, il ciclo viene ripetuto 4 volte e non 3 come sembrerebbe a prima vista; infatti i valori di i ad ogni giro saranno 0, 1, 2 e 3 quindi il ciclo far? 4 giri.

In questo caso ? possibile fare la stessa operazione senza utilizzare for:

@array = []

@array[0] = 10 * 0

@array[1] = 10 * 1

@array[2] = 10 * 2

@array[3] = 10 * 3

In questo caso gli elementi erano solo quattro, ma se per esempio fosse stato for i in 0.. 2700 evidentemente sarebbe stato impossibile farlo senza l'utilizzo degli array e di for.


Un po' d'esercizio

Invito chi gi? conosceva l'argomento ad evitare di partecipare, per dare spazio a chi ha pi? bisogno di aiuto. Col passare del tempo baster? controllare il Grado ma per ora conto sul vostro buonsenso. ;P

Ora proviamo a fare qualcosa, cominciando da qualcosa di semplice:

Create 5 diversi array ognuno con un nome di un attributo: Forza, Destrezza, Agilita(non metteteci l'accento che non lo accetta), Intelligenza e Costituzione.
Ovviamente cercate nel limite del possibile di fare da soli, altrimenti ? tempo perso. ^^

 


o•°' - '°•o
Hei, mitä kuuluu?
Immagine inserita


    Sclero Fritz
  • Utente avanzato

  • Utenti
  • Rens: 0
  • 0
  • StellettaStellettaStelletta
  • 450 messaggi
  • Sesso:Maschio
  • Provenienza:La Mitica Valle di Castelgomberto *_*
  • Abilità:Novizio

#2 Inviato 03 December 2006 - 17:25 PM

Create 5 diversi array ognuno con un nome di un attributo: Forza, Destrezza, Agilita(non metteteci l'accento che non lo accetta), Intelligenza e Costituzione.


ecco, i nomi... ma come/dove devo metterlo il nome? XD @arrayDestrezza, @array.destrezza, @destrezza.array... oppure semplicemente al posto di array mettiamo il nome e dopo le [n] tipo @Destrezza = [n] o @Destrezza = Array.new? Per il resto, è tutto chiaro :wink:

il ciclo di for lo conosco piuttosto bene, non servono spiegazioni su quello :b

XD

Immagine inserita
Immagine inserita


    Zerathul
  • Utente avanzato

  • Utenti
  • Rens: 0
  • 0
  • StellettaStellettaStelletta
  • 308 messaggi
  • Sesso:Maschio
  • Provenienza:Ayur
  • Abilità:Novizio

#3 Inviato 03 December 2006 - 17:43 PM

Oltre a quotare sclero e ringraziare per la lezione, vorrei chiedere una cosa....cosa significa "10 * i" oppure " 10 * 2"? inserisci il valore 10 in quella cella di memoria dell'array? se così fosse, in @array[1] = 10 * 1, se tra parentesi quadre c'era già 1, che bisogno c'è di ripeterlo dopo *?
Spoiler

    Alato
  • R²S Scripting Team

  • Utenti Speciali
  • Rens: 0
  • 0
  • StellettaStellettaStellettaStellettaStelletta
  • 1099 messaggi
  • Sesso:Maschio
  • Provenienza:Genova
  • Abilità:Maestro

#4 Inviato 03 December 2006 - 17:56 PM

Per quanto riguarda i nomi: @array era un nome qualsiasi, potete metterci quello che vi pare.

@pippo = []
@pluto = []
...

Non dovete assolutamente usare il '.' e per quanto riguarda le regole sui nomi utilizzabili sono le stesse relative alle variabili
Rispondendo a Zerathul, quel 10 * i significa "dieci moliplicato per i" quindi ad ogni giro cambiando i cambia anche il valore inserito nell'elemento dell'array.

Infatti nella versione "svolta" in ognuno ho messo il valore che ha i all'interno dell'indice.

o•°' - '°•o
Hei, mitä kuuluu?
Immagine inserita


    Sclero Fritz
  • Utente avanzato

  • Utenti
  • Rens: 0
  • 0
  • StellettaStellettaStelletta
  • 450 messaggi
  • Sesso:Maschio
  • Provenienza:La Mitica Valle di Castelgomberto *_*
  • Abilità:Novizio

#5 Inviato 03 December 2006 - 18:09 PM

ok, grazie. Penso di aver capito. Provo a fare l'interrogazione B adesso ;)

Immagine inserita
Immagine inserita


    Zerathul
  • Utente avanzato

  • Utenti
  • Rens: 0
  • 0
  • StellettaStellettaStelletta
  • 308 messaggi
  • Sesso:Maschio
  • Provenienza:Ayur
  • Abilità:Novizio

#6 Inviato 03 December 2006 - 18:28 PM

Per quanto riguarda i nomi: @array era un nome qualsiasi, potete metterci quello che vi pare.

@pippo = []
@pluto = []
...

Non dovete assolutamente usare il '.' e per quanto riguarda le regole sui nomi utilizzabili sono le stesse relative alle variabili
Rispondendo a Zerathul, quel 10 * i significa "dieci moliplicato per i" quindi ad ogni giro cambiando i cambia anche il valore inserito nell'elemento dell'array.

Infatti nella versione "svolta" in ognuno ho messo il valore che ha i all'interno dell'indice.

Ok grazie ho capito....al posto del valore numerico si può inserire una variabile? Il numero tra [ ] può essere a de sempio " i-1 " ?

Modificato da Zerathul, 03 December 2006 - 18:34 PM.

Spoiler

    Lord Bel
  • Utente avanzato

  • Utenti
  • Rens: 10
  • 0
  • StellettaStellettaStelletta
  • 241 messaggi
  • Sesso:Maschio
  • Provenienza:Ravenna (RA)
  • Abilità:Esperto

#7 Inviato 03 December 2006 - 18:49 PM

si.

~ R²S ~ - '°•o Realizing Random Scrips o•°'


    Alato
  • R²S Scripting Team

  • Utenti Speciali
  • Rens: 0
  • 0
  • StellettaStellettaStellettaStellettaStelletta
  • 1099 messaggi
  • Sesso:Maschio
  • Provenienza:Genova
  • Abilità:Maestro

#8 Inviato 04 December 2006 - 11:22 AM

Sì, però l'esercitazione proseguiva, chi vuole partecipare lo faccia. ;O;

o•°' - '°•o
Hei, mitä kuuluu?
Immagine inserita


    Maverik
  • Utente avanzato

  • Utenti
  • Rens: 0
  • 0
  • StellettaStellettaStelletta
  • 212 messaggi
  • Sesso:Maschio
  • Provenienza:Napoli
  • Abilità:Novizio

#9 Inviato 06 December 2006 - 14:54 PM

Questa cosa sembra abbastanza semplice cosi com'è spiegata (thx alato ^^)

quindi se ho ben capito dovrebbe essere:

@Forza = []
for i in 0..99
@Forza[i] = 3 + i
end

@Destrezza = []
for i in 0..99
@Destrezza[i] = 2 + i
end

@Abilita = []
for i in 0..99
@Abilita[i] = 2 + i
end

@Inteligenza = []
for i in 0..99
@Inteligenza[i] = 2 + i
end

@Costituzione = []
for i in 0..99
@Costituzione[i] = 5 + i
end

Ora so che da 0 a 99 in base all'array ho che per ogni valore cambia il risultato!Non so se mi sono spiegato comunque spero sia tutto corretto e di aver capito! ^^

The Italian Scripter Team
istminibannerqe2wo7.jpg


<[Blake]> (e le giustificazioni, se serve, le falsifico)
<Iryka> bravo ma questo e warez


    Alemix
  • Utente avanzato

  • Utenti
  • Rens: 0
  • 0
  • StellettaStellettaStelletta
  • 216 messaggi
  • Provenienza:Savona
  • Abilità:Novizio

#10 Inviato 06 December 2006 - 16:32 PM

piccolo dubbio io ho capito che gli array sono delle variabili che contengono un valore, però gli array non sono delle variabili. Ok come hai detto forse ora non ne se ne capisce la differenza però a me sembrano identiche, poi la cosa più complicata è questo (cioè quella che non ho capito) se te fai @array=1+i per un ciclo for non riesco a capire cosa aumenta cioè aumenta 1 2 3 4 5 ecc.. fino a che non finisce il for oppure prende la variabili da qualche parte perchè mi sa che non ho capito un passaggio e ora non so quanto può valere!
Immagine inserita


Progetti in fase di costruzione:
Guida all'uso di RPG MAKER XP link

    DaD
  • Animatore

  • Utenti
  • Rens: 0
  • 0
  • StellettaStellettaStellettaStelletta
  • 759 messaggi
  • Sesso:Maschio
  • Provenienza:Inferno ... si trova vicino Rò o_
  • Abilità:Novizio

#11 Inviato 06 December 2006 - 16:47 PM

piccolo dubbio io ho capito che gli array sono delle variabili che contengono un valore, però gli array non sono delle variabili. Ok come hai detto forse ora non ne se ne capisce la differenza però a me sembrano identiche, poi la cosa più complicata è questo (cioè quella che non ho capito) se te fai @array=1+i per un ciclo for non riesco a capire cosa aumenta cioè aumenta 1 2 3 4 5 ecc.. fino a che non finisce il for oppure prende la variabili da qualche parte perchè mi sa che non ho capito un passaggio e ora non so quanto può valere!

Non ho capito molto di quello che hai detto comunque ...
A differenza delle variabili gli array al loro interno contegono piu' di un valore, infatti come tu saprai una variabile può contenere un solo valore che può essere elaborato durante il programma ma di certo non aggiunto ad un altro.
L'array quindi metaforicamente è un contenitore come le variabili che però possono contenere piu' valori al suo interno.

for i in 0..3
  @array[i] = 10 * i
end
In pratica moltiplico la i[Index] per 10 per 4 volte fino a che il ciclo non si conclude.
Non capisco cosa tu voglia dire con questo;

"oppure prende la variabili da qualche parte perchè mi sa che non ho capito un passaggio e ora non so
quanto può valere!"


Cioè non hai capito dove prende il valore i[Index]? la i è una variabile normale che viene inserita all'interno dell'array (@array[i]), e poi viene moltiplicata per 10 volte tutto qua ...

    Alemix
  • Utente avanzato

  • Utenti
  • Rens: 0
  • 0
  • StellettaStellettaStelletta
  • 216 messaggi
  • Provenienza:Savona
  • Abilità:Novizio

#12 Inviato 06 December 2006 - 20:45 PM

grazie dad per la spiegzione ma io intendevo solamente dire che la i fa da contatore cioè ogni volta che si va il ciclo aumenta di uno cioè, perchè almeno capisco meglio scrivere il for in c++ cioè
for(i=0;i=3;i++)
oppure scrivere in Ruby
for i in 0. .3
la i è la stessa cosa giusto?
spero di essermi spiegato bene questa volta
Immagine inserita


Progetti in fase di costruzione:
Guida all'uso di RPG MAKER XP link

    DaD
  • Animatore

  • Utenti
  • Rens: 0
  • 0
  • StellettaStellettaStellettaStelletta
  • 759 messaggi
  • Sesso:Maschio
  • Provenienza:Inferno ... si trova vicino Rò o_
  • Abilità:Novizio

#13 Inviato 07 December 2006 - 11:38 AM

Forse sono io duro di comprendonio ma ... non capisco cosa vuoi dire Oo
Che intendi dire con "La i è la stessa cosa?" Oo

    Alemix
  • Utente avanzato

  • Utenti
  • Rens: 0
  • 0
  • StellettaStellettaStelletta
  • 216 messaggi
  • Provenienza:Savona
  • Abilità:Novizio

#14 Inviato 07 December 2006 - 12:59 PM

allora diciamola così i aumenta ad ogni ciclo o no?
Immagine inserita


Progetti in fase di costruzione:
Guida all'uso di RPG MAKER XP link

    DarkSchneider
  • Nuovo Arrivato

  • Utenti
  • Rens: 35
  • 0
  • Stelletta
  • 82 messaggi
  • Abilità:Novizio

#15 Inviato 07 December 2006 - 13:10 PM

...

Ora pensate che ci sono comandi che permettono di fare la stessa azione 'n' volte: capirete che potrete in poche righe applicare un comando a centinaia di elementi di un array.
Uno di questi comandi, il più comodo per questo utilizzo, è il for.

@array = []
for i in 0..3
  @array[i] = 10 * i
end

Analizziamo questo pezzettino di codice: il for è un ciclo che ripete l'azione contenuta tra for ed end e ad ogni giro aumenta la variabile i di 1, variabile che si può utilizzare per qualunque operazione. Questo lo fa partendo dal primo numero dopo l'in fino al numero dopo i puntini: in questo caso quindi parte da 0 e va fino a 3.
ATTENZIONE: non lasciatevi ingannare dallo zero, il ciclo viene ripetuto 4 volte e non 3 come sembrerebbe a prima vista; infatti i valori di i ad ogni giro saranno 0, 1, 2 e 3 quindi il ciclo farà 4 giri.

...


si la i aumenta ad ogni ciclo

    Keroro
  • Animatore

  • Utenti
  • Rens: 34
  • 0
  • StellettaStellettaStellettaStelletta
  • 666 messaggi
  • Sesso:Maschio
  • Provenienza:Atlantide
  • Abilità:Maestro

#16 Inviato 07 December 2006 - 13:37 PM

[suggerimento]
per qualcosa di piu' creativo potete fare le stats come successioni, cioe' fissati 1 o piu' semi (aka valori base) definite la vostra funzione

@str = Array.new
@str[0]= 5
for j in 1..99
	 @str[j] = @str[j-1]+j*7
end

I Miei Script:
Salva Schermata (3 Aprile 2012)
Attacco Personalizzabile (2 Aprile 2012)
Keyboard Input (Porting) (17 Marzo 2012)
Continua...


    Alato
  • R²S Scripting Team

  • Utenti Speciali
  • Rens: 0
  • 0
  • StellettaStellettaStellettaStellettaStelletta
  • 1099 messaggi
  • Sesso:Maschio
  • Provenienza:Genova
  • Abilità:Maestro

#17 Inviato 07 December 2006 - 14:18 PM

Quello che dice Keroro è una possibile formula per la curva di apprendimento (utilizzando le successioni), poi ovviamente anche quelle di Maverick sono possibili formule anche se un po' più lineari.

La mia idea era appunto di farvi partire da quegli array e tirar su qualche formula di battaglia, però volevo capire bene chi è che stava seguendo l'esercitazione.
Mi pare che comunque i dubbi siano venuti fuori lo stesso e hanno ottenuto pronta risposta. :nn:

Tra poco torno a proseguire l'esercitazione.

o•°' - '°•o
Hei, mitä kuuluu?
Immagine inserita


    Alemix
  • Utente avanzato

  • Utenti
  • Rens: 0
  • 0
  • StellettaStellettaStelletta
  • 216 messaggi
  • Provenienza:Savona
  • Abilità:Novizio

#18 Inviato 09 December 2006 - 21:35 PM

@str = Array.new
@str[0]= 5
for j in 1..99
	 @str[j] = @str[j-1]+j*7
end
scusa ma str è una variabile giusto? e te gli dici per prima cosa che gli venga assegnato Array.new e che poi l'array valga 5 e poi gli dici per i=... e fin qua penso di averlo capito!
però scusa ma il primo pasaggio non è inutile cioè non puoi partire con @str[0]= 5 e andare avanti?
Immagine inserita


Progetti in fase di costruzione:
Guida all'uso di RPG MAKER XP link

    Keroro
  • Animatore

  • Utenti
  • Rens: 34
  • 0
  • StellettaStellettaStellettaStelletta
  • 666 messaggi
  • Sesso:Maschio
  • Provenienza:Atlantide
  • Abilità:Maestro

#19 Inviato 09 December 2006 - 22:27 PM

non so se funziona anche senza la prima riga, cmq abitudine da programmatore, prima dichiarazione e poi assegnamento (o nella stessa riga)

I Miei Script:
Salva Schermata (3 Aprile 2012)
Attacco Personalizzabile (2 Aprile 2012)
Keyboard Input (Porting) (17 Marzo 2012)
Continua...


    DaD
  • Animatore

  • Utenti
  • Rens: 0
  • 0
  • StellettaStellettaStellettaStelletta
  • 759 messaggi
  • Sesso:Maschio
  • Provenienza:Inferno ... si trova vicino Rò o_
  • Abilità:Novizio

#20 Inviato 10 December 2006 - 11:16 AM

Bon funge solo se si dichiara prima l'array quindi anche così @str = [], o come ha detto Kero :]




  • Feed RSS