Jump to content
Rpg²S Forum

Laboratorio - Grado 1


Alato
 Share

Recommended Posts

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. ^^

 

Link to comment
Share on other sites

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

http://img221.imageshack.us/img221/7225/minilogoew1.png

http://img406.imageshack.us/img406/9168/plingbannerbx6.gif

Link to comment
Share on other sites

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 *?

 

 

 

O_______________________________________________________O

(metà delle cose che fanno le faccio anch'io zizi)

(sto qua invece è un mostro....)

 

 

 

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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 " ?

Edited by Zerathul

 

 

 

O_______________________________________________________O

(metà delle cose che fanno le faccio anch'io zizi)

(sto qua invece è un mostro....)

 

 

 

Link to comment
Share on other sites

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
http://img57.imageshack.us/img57/654/istminibannerqe2wo7.jpg


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

Link to comment
Share on other sites

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!

http://img212.imageshack.us/img212/7639/betaew0.jpg

 

 

Progetti in fase di costruzione:

Guida all'uso di RPG MAKER XP link

Link to comment
Share on other sites

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), e poi viene moltiplicata per 10 volte tutto qua ...

TPC Radio Site | Blog | Big-Bug

http://img102.imageshack.us/img102/4332/slackware2userbarok0.gif

http://img141.imageshack.us/img141/1571/nokappams1cf8.png

 

http://i29.tinypic.com/2vijdlh.jpg

Link to comment
Share on other sites

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

http://img212.imageshack.us/img212/7639/betaew0.jpg

 

 

Progetti in fase di costruzione:

Guida all'uso di RPG MAKER XP link

Link to comment
Share on other sites

Forse sono io duro di comprendonio ma ... non capisco cosa vuoi dire Oo

Che intendi dire con "La i è la stessa cosa?" Oo

TPC Radio Site | Blog | Big-Bug

http://img102.imageshack.us/img102/4332/slackware2userbarok0.gif

http://img141.imageshack.us/img141/1571/nokappams1cf8.png

 

http://i29.tinypic.com/2vijdlh.jpg

Link to comment
Share on other sites

...

 

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

Link to comment
Share on other sites

[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...

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

@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?

http://img212.imageshack.us/img212/7639/betaew0.jpg

 

 

Progetti in fase di costruzione:

Guida all'uso di RPG MAKER XP link

Link to comment
Share on other sites

  • 7 months later...

Vediamo se faccio una cosa giusta XD cmq

 

@Forza = [20,15,10,10]
for i in 0..3
@Forza[i] = @forza[i] / 5
end


@Destrezza = [10,20,15,15]
for i in 0..3
@Destrezza[i] = @Destrezza[i] / 5
end


@Agilita = [5,20,10,15]
for i in 0..3
@Agilita[i] = @Agilita[i] / 5
end


@Intelligenza = [5,10,20,20]
for i in 0..3
@Intelligenza[i] = @Intelligenza[i] / 5
end


@Costituzione = [20,15,10,10]
for i in 0..3
@Costituzione[i] = @Costituzione[i] / 5
end

 

 

cn questo coso ho impostato le statistike dei quattro personaggi dovrebbero essere [guerriero,ladro,stregone,mago ke cura] poi le ho divise x 5 x ottenere un modificatore x quella caratteristica (so ke forse una semplice divisione è un pò banale x creare un modificatore x una caratteristica però nn sapevo ke mettere XD)

va bn o ho fatto male tutto XD

Link to comment
Share on other sites

Tecnicamente è ttto giusto, voglio dire lo script fnziona etc.

 

Solamente ti dico che, in genere, viene utilizzato in modo differente. Nel senso che all'indice dell'array si fa corrispondere il livello del personaggio (quindi crei un array generico senza definirne subito il contenuto) poi si fa un ciclo for, dal livello più basso al più alto (es. 1..99) per inserire i valori all'interno dell'array, tramite una formula qualsiasi (tipo @str = 10 * i indica che a livello 73 avrà forza 730).

Poi le differenze tra le classi le inserisci successivamente tramite dei modificatori.

 

Ovvio che poi puoi organizzartela come ti pare, però questo è il metodo più comodo secondo me. ^^

Link to comment
Share on other sites

si ho capito cosa vuoi dire questo lo ho fatto solo x provare a fare qualcosa di diverso se mi viene qualcosa in mente ne creo un altro

 

qnd secondo te ho recepito bn il significato dall'array?

Link to comment
Share on other sites

  • 7 months later...

Allora, ma bisogna essere iscritti in qualche lista per partecipare ??? Perchè io ho guardato ma mi pare che non ci sono topic di iscrizione.

 

Comunque :

 

#esercitazione con gli array
#verranno valori sproporzionati, lol la 1°volta che maneggio uno script !

@ i == 5

@forza = [ ]
for i in 0... 100
 @array[i] = (10 * i) + 2
end

@destrezza = [ ]
for i in 0... 100
 @array[i] = (10 * i) + 1
end

@agilita = [ ]
for i in 0... 100
 @array[i] = (((10 * i) * 2) / 5) %
end

@intelligenza = [ ]
for i in 0... 100
 @array[i] = (10 - i) % 4
end

@Costituzione = [ ]
for i in 0... 100
 @array[i] = (10 * i) + 1
end

 

Io per prima cosa, seguendo la lezione II ho dato un valore alla variabile "i", e poi ho combinato un macello con gli operatori, non so se va bene :biggrin: .

Link to comment
Share on other sites

 Share

×
×
  • Create New...