Anteprima
Vedrai una selezione di 5 pagine su 17
Appunti lezioni introduttive teoriche Laboratorio di Game Programming Pag. 1 Appunti lezioni introduttive teoriche Laboratorio di Game Programming Pag. 2
Anteprima di 5 pagg. su 17.
Scarica il documento per vederlo tutto.
Appunti lezioni introduttive teoriche Laboratorio di Game Programming Pag. 6
Anteprima di 5 pagg. su 17.
Scarica il documento per vederlo tutto.
Appunti lezioni introduttive teoriche Laboratorio di Game Programming Pag. 11
Anteprima di 5 pagg. su 17.
Scarica il documento per vederlo tutto.
Appunti lezioni introduttive teoriche Laboratorio di Game Programming Pag. 16
1 su 17
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

Commenti in Lua

Per i commenti multilinea, si utilizza il tag --[[ blablabla--]].

Numeri in Lua

I numeri in Lua sono di tipo numerico e possono essere interi o con virgola mobile. Il punto separa la parte intera dalla parte decimale e possono essere scritti anche valori elevati. Si possono utilizzare anche numeri esadecimali mettendo davanti al numero il prefisso 0x.

Tipi e valori in Lua

Lua è un linguaggio typed dynamically, il che significa che non è necessario specificare il tipo di oggetto che viene inserito. Esistono sei tipi di base in Lua:

  • nil: viene utilizzato per indicare l'assenza di un elemento, ad esempio per deallocare dalla memoria un oggetto non più utile.
  • boolean: rappresenta i valori true e false. Tutti i valori che sono false o nil rappresentano il falso, mentre tutti i valori diversi da quest'ultimo sono veri.
  • ...

true: rappresenta un valore booleano vero.

number: rappresenta un numero.

string: rappresenta una sequenza di caratteri, solitamente tra un coppia di virgolette.

function: si può assegnare una funzione ad una variabile.

table: è una lista di proprietà rappresentata da una coppia nome/valore.

Lua definisce alcune regole automatiche di conversione tra numeri e stringhe; se applichiamo un operatore che lavora su numeri ad una stringa, Lua cerca di convertire la stringa in numero. Viceversa, se applichiamo un operatore che lavora su stringhe ad un numero, Lua cerca di convertire il numero in una stringa.

= è l'operatore che serve per concatenare due stringhe.

VARIABILI IN LUA

Sistono tre tipi di variabili in Lua:

global: una variabile globale non si dichiara e nasce dal primo assegnamento che si fa. È una variabile che dura ed è visibile durante tutta l'esecuzione dell'applicazione ed è visibile in tutti i file e script del progetto. Se si vuole

eliminare una variabile si utilizza il tag html nil; il garbage collector la elimina. Sono più inefficienti rispetto alle variabili locali, in quanto appesantiscono il codice. Le variabili locali sono visibili soltanto nel blocco in cui sono state dichiarate. I blocchi si dichiarano con il tag html do e end. Se viene dichiarata una variabile locale all'inizio dello script, verrà visualizzata solo in quello script (come se l'intero script fosse un blocco do end). Le variabili locali si possono utilizzare solo se vengono definite precedentemente. Le tabelle sono insiemi di proprietà, ai quali viene associato un valore; sono variabili locali relative alla tabella in cui sono definite. Tutto in Lua è modellato tramite le tabelle; la sintassi generica per dichiarare una tabella globale è: t = { field1 = val1, field2 = val2, ..., fieldn = valn } Se si volesse dichiarare una tabella locale, basta aggiungere prima del nome t il tag html local.

Possono avere anche tabelle vuote, usando una coppia di graffe {} senza nessuna proprietà. I valori associati alle tabelle possono essere qualsiasi (numeri, valori, stringhe, oggetti complessi come audio o video, funzioni, ecc.)

Nelle tabelle si possono descrivere diverse proprietà come:

  • friction: densità, peso
  • density: elasticità
  • bounce:

Per inserire elementi della tabella si possono usare due notazioni:

  • = tabella, = valore
  • t.x1, t.x2, t["x"]

ESEMPIO

person = {}
person.name = "Gino"
person["surname"] = "Rossi"
person.age = 25
print(person["surname"])
print(person.age)

COMMENTO

Creo la mia tabella vuota

person = {}

Seleziono la proprietà (se non esiste viene creata) e associo la stringa "Gino"

person.name = "Gino"

Faccio la stessa cosa con la proprietà (con la notazione 2)

person["surname"] = "Rossi"

Faccio la stessa cosa con un valore

numericoperson.age = 25
Stampo in console i valori della proprietà selezionata surname
print(person["surname"])
Stampo il valore di (selezionata con la notazione 1)age
print(person.age)

TABELLE E ARRAY
Le tabelle sono un tipo di array chiamato associativo, cioè degli array in cui gli indici non sono dei numeri, ma dei nomi. Si può accedere al contenuto delle celle degli array associativi tramite il nome della proprietà.
Per definire un array:
a = {4,6,7,-1}
Gli indici degli array in Lua partono dal valore 1.
L'esempio sotto stamperà il primo valore della cella.
print(a[1])
Per inserire un valore nell'array si utilizza la sintassi sottostante; verrà creata una quinta cella in coda all'array iniziale con il valore 100.
a[5] = 100

MATRICI
Per modellare delle matrici si utilizzano array di array; nell'esempio la prima riga sarà 1,2, la seconda 3,4, la terza 4,5.
local m ={{1,2}, {3,4}, {4,5}}
Output: 
1 2
3 4
4 5

Se vogliamo

Stampare il valore 5 della matrice m, bisogna indicare il numero di righe e colonne dove è contenuto il valore (riga 3 e colonna 2). Verrà stampato il valore di quella cella.

print(m[3][2])

ESPRESSIONI

somma +

differenza -

moltiplicazione *

divisione /

modulo %

potenze ^

uguale a ==

diverso ~=

minore <

maggiore >

minore o uguale <=

maggiore o uguale >=

Se con l'operatore i tipi sono diversi (stringa e numero per esempio) il test fallisce già in partenza; se sono uguali il programma passa alla confrontazione del contenuto. L'esempio sottostante darà come risultato false, perché i due tipi sono diversi.

print("0" == 0)

Se i tipi sono uguali (due numeri) si passa alla comparazione. L'esempio darà true

print(2+1 == 3)

Con i dati complessi (immagini, suoni) in tabelle il test darà sempre come risultato false. Per avere come risultato true bisogna porre come uguali (=) le due tabelle.

CONNETTORI LOGICI

Le espressioni sintattiche

Possono essere collegate con dei connettori logici che sono and, or, not. Ritorna il primo argomento se il valore è true, altrimenti ritorna il secondo argomento.

and: false and nil, ritorna il primo argomento se il valore è diverso da false, altrimenti ritorna il secondo.

or: nil or false, ritorna il primo argomento se il valore è diverso da nil, altrimenti ritorna il secondo.

Qualsiasi valore diverso da e è (anche un numero).

false nil true

ESEMPI ->

10 or 20 -> 10

10 or error() -> "a"

nil or "a" -> nil

nil and 10 -> false

false and error() -> false

false and nil -> nil

false or nil -> 20

10 and 20 -> false

not(true) -> true

not(nil) -> false

not(20)

OPERATORE DI CONCATENAZIONE DI STRINGHE

Permette di concatenare insieme più stringhe ed è rappresentato da " .. ".

local s = "scia" .. "rada" .. 42

Output: sciarada42

OPERATORE DI LUNGHEZZA

L'operatore # permette di calcolare il numero di elementi di un array. Può essere applicato anche alle stringhe. È inutile applicarlo

alle tabelle perché darà sempre come risultato 0, perché l'operatore calcola solo le celle referenziate da dei numeri (indici).
a= {4,6,7,-1}
print(#a)
Output: 4

STRUTTURA DI CONTROLLO IF
Il comando che ci permette di effettuare delle scelte è il comando a unico ramo.
if
if (condition) then
block of commands
end

ESEMPIO
if(number_of_lives == 0) then
game_over = true
go_to_start()
end

STRUTTURA DI CONTROLLO IF - ELSE
Il comando di controllo a due rami contiene l'else.
if
if (condition) then
block of commands 1
else
block of commands 2
end

STRUTTURA DI CONTROLLO IF - ELSEIF
In questa struttura abbiamo una serie di condizioni e verrà eseguito solo il blocco corrispondente alla condizione che è stata verificata. Se nessuna delle condizioni viene soddisfatta verrà eseguito il ramo else finale (che non è obbligatorio, in quel caso non esegue nulla).
if(condition) then
block of commands 1
elseif (condition2) then
block of commands 2
elseif(condition3)

then block of commands 3…else block of commands Nend

STRUTTURA DI CONTROLLO WHILE

La parola chiave while esegue il blocco di istruzioni e continua a ripetere il ciclo ogni volta che la condizione associata ad essa è vera.

local i = 0
while (i <= 5) do
    print(i)
    i = i + 1
end

STRUTTURA DI CONTROLLO REPEAT

Il blocco ripete il blocco di istruzioni finché la condizione in coda finale è falsa.

local i = 5
repeat
    print(i)
    i = i - 1
until i < 0

STRUTTURA DI CONTROLLO FOR NUMERICO

È il primo modo per definire i cicli. Si definisce una variabile (v) che sarà locale al ciclo for. Questa variabile prende tre espressioni:

  • valore iniziale (e1: v)
  • valore finale che deve raggiungere (e2: v)
  • passo con cui arrivare da a durante l'esecuzione del ciclo (per default il valore è 1) (e3: e1 e2)

Questo valore può essere anche negativo.

for v = e1, e2, e3 do
    block of commands
end

ESEMPIO

for a = 0, 8, 2
doprint(a)end
<STRONG>STRUTTURA DI CONTROLLO FOR GENERICO</STRONG>
<p>I cicli generici sfruttano delle funzioni esterne chiamati iteratori; gli iteratori sono funzioni che
permettono sequenzialmente di estrarre valori da una certa struttura. La sequenza con cui vengono
selezionati gli elementi è definita dall'iteratore.</p>
<p>for è un'operatore sequenziale che permette di selezionare due elementi dall'array; l'indice della cella
pairse il suo valore (ritorna due valori) e verranno inseriti nelle variabili edindex elem.
Successivamente verranno stampati posizione, indice e valore.</p>
<p>array = {3,7,10}
for index, elem in ipairs(array) do
print("position"..index..":"..elem)
end</p>
<STRONG>FUNZIONI</STRONG>
<p>Le funzioni si definiscono utilizzando la parola chiave <code>function</code> seguita dal nome della funzione; tra una
coppia di parentesi tonde si inseriscono eventuali elementi di input della funzione, i parametri formali.
Questi parametri sono necessari alla funzione per calcolare un determinato</p>
ate utilizzando il tag <script> all'interno del tag <head> del documento HTML. Ad esempio: ```html Titolo della pagina ``` Le funzioni definite in questo modo saranno visibili solo all'interno dello script in cui sono state definite.
Dettagli
A.A. 2020-2021
17 pagine
SSD Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher Giulia_Cancian di informazioni apprese con la frequenza delle lezioni di Game programming e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi di Udine o del prof Ballis Demis.