Buongiorno a tutti e benvenuti a questo breve corso di azzeramento di informatica che consisterà in alcune puntate videoregistrate di breve durata, intorno alla mezz'ora ciascuna, il cui scopo principale è quello di fornire a tutti coloro che dovranno frequentare il Politecnico, in particolar modo io l'ho pensato per il mio corso, l'informatica del primo anno, cercherà di fornir loro alcune competenze di base che in alcuni casi non sono disponibili a causa del tipo di scuola o per varie altre ragioni, in modo tale da dare una preparazione omogenea a tutte le persone. Io l'ho pensato in quanto molti studenti lamentano appunto una mancanza di questo tipo di competenze di base e quindi io penso, spero di poter parzialmente supplire a questo tipo di problema. Inoltre vorrei anche dare una piccola introduzione, far vedere due o tre cose relative a quello che può fare l'informatica nel campo dell'ingegneria e quindi l'utilità che può avere l'informatica. In particolar modo oggi...
In questo primo filmato vedremo innanzitutto l'installazione di un programma che useremo per le prime due puntate, dovrebbero essercene cinque in tutto, che si chiama Snap. Dopodiché vedremo un piccolo esempio di un primo programma scritto in Snap che faccia qualcosa, insomma, un piccolo esempio. Dopodiché, siccome io vorrei essere certo che voi...
Possiate capire e possiate vedere bene qual è la differenza tra un programma realizzato con questo tipo di tool e un programma reale, tipo quelli che poi vengono realizzati nel corso di informatica del primo anno. Vedremo il medesimo esempio scritto in C e anche in Python. Vedremo anche un'applicazione reale, Firefox, che tutti conoscete, un browser.
E poi vedremo qualcosa di più curioso, sempre in Snap. e poi io vorrei terminare realizzando un esercizio e in particolar modo vorrei poi alla fine proporvi un esercizio per la prossima volta che voi potrete ovviamente realizzare per conto vostro ora direi che la prima cosa da fare è quella di installarci snap innanzitutto che cos'è snap? snap è un Il programma è realizzato dall'Università di Berkeley, che è di fatto molto simile a Scratch, che è abbastanza famoso. Scratch è stato realizzato per i ragazzini, diciamo dagli 8 al massimo ai 16 anni. Snap è una versione, se vogliamo, un po'più raffinata, nel senso che ha alcuni concetti di programmazione più avanzati.
programmazione avanzata ed è per questo che io l'ho scelto. Ora, si può lanciare Snap direttamente da internet, però supponendo di volerlo lanciare in locale, cosa che io preferisco, andiamo qua, ci dobbiamo dunque scaricare a tutti gli effetti quello che ci serve. Infatti qui l'abbiamo lanciato da internet ovviamente. se noi vogliamo invece scaricarcelo vedete noi qui finiamo su github github è un repository open source qui ci sono le istruzioni per installarlo è sufficiente andare qua ed ecco qua vedete questo è il file se adesso noi facciamo semplicemente così e lo salviamo e possiamo di fatto salvare il l'installazione.
L'installazione in realtà è veramente semplice perché questo file corrisponde a questo, dopodiché con doppio clic lo si decomprime, ne risulta questa cartella e in questa cartella c'è Snap, per cui l'installazione in realtà è di una assoluta semplicità. È sufficiente fare doppio clic qui per riuscire ad avere la... snap in funzione benissimo, allora questo è il nostro ambiente innanzitutto per quale motivo ho scelto snap? e invece di per esempio Scratch che è più famoso. Il motivo l'ho detto prima e cioè perché ritengo che Snap sia più adatto per quello che vogliamo fare noi e questo vale anche nei confronti di Scratch 3.0.
che è uscito pochi mesi fa. Ora, come funziona questo ambiente? Il vantaggio di questo ambiente è che noi possiamo realizzare dei programmi semplicemente mettendo assieme dei blocchetti.
Vi faccio un esempio semplicissimo. Vedete questo. Questo è il blocchetto che dà origine al programma.
Dopodiché c'è un blocchetto di stop finale, questo per esempio. E in mezzo noi possiamo fare qualcosa. Per esempio possiamo far muovere lo sprite.
Per esempio possiamo metterlo così. si aggancia, il nome snap deriva dallo schiocco, insomma, per così dire, dal rumore che viene fatto quando si agganciano i blocchetti. Ebbene, vedete che questo è un programma estremamente semplice e lo scopo di questo ambiente di programmazione e, come avrete immaginato, prevalentemente grafico. Noi qui abbiamo un ambiente, per così dire, molto povero, però potete immaginare questo sfondo bianco sostituito con sfondi colorati e questo, che si è chiamato sprite, cioè Folletto, qui è una semplice freccia, ma lo possiamo sostituire con qualsiasi tipo di personaggio. Infatti l'idea di base di questo tipo di linguaggio grafico è realizzare degli ambienti animati, dei videogiochi, e pensate che si possono ottenere delle cose davvero molto raffinate.
Pensate che i videogiochi più belli realizzati in Scratch hanno fino a un'ottantina di programmi, dove ogni programma è un blocchetto come questo. questo che pilotano un gran numero di sprite come questo diciamo una cinquantina ogni sprite rappresenta un personaggio si muovono all'interno di una scena interagiscono tra di loro e con l'utente tramite il mouse ed eventualmente altri dispositivi insomma molto interessante diciamo che noi ovviamente ne vedremo soltanto una parte veramente minimale perché a noi interessa la parte di programmazione in quanto questo è un corso di azzeramento informati matica. Ora, come funziona?
Nel momento in cui io faccio clic, clicco con il mouse qui sopra, vedete che il mio programmino viene contornato da un alone che indica che il programma è in funzione e vedete che il mio sprite si muove. Posso ottenere la stessa cosa cliccando sulla bandierina verde, perché vedete che qui ho preso il blocchetto quando la bandierina verde viene cliccata. Se il programma dura parecchio tempo, posso interromperlo usando il pulsante rosso, oppure...
oppure metterlo in pausa usando quest'altro pulsante. Comunque adesso vedremo meglio tutto ciò. Ah, notate che se io voglio duplicare questo pezzo di codice, posso fare tasto destro, duplicate, e vedete che io ne ho due.
Comunque vedremo meglio tutto questo tra poco. Ah, se voglio invece buttare il mio pezzo di codice è sufficiente che lo trascini qua ed è fatta. Ora realizziamo quindi un programma, il nostro primo programma un minimo più serio. Allora... Quindi riprendiamo il nostro blocchetto di partenza, riprendiamo il nostro blocchetto di arrivo e in mezzo vogliamo fare qualcosa di interessante.
Per esempio vogliamo realizzare un programmino che cominci, tanto per iniziare, a chiedere qualcosa. Allora vedete che noi qui sulla sinistra in alto abbiamo tutta una serie di menu di vario genere che permettono di chiedere o comunque insomma di effettuare delle... delle azioni di vario tipo, per esempio il moto, che poi capite che riguarda lo sprite, il lux, cioè le apparenze, quindi varie cose tra cui stampare, visualizzare, il suono, che noi non vedremo, la penna, perché questo oggetto può essere pensato come una penna, questo lo vedremo tra poco, poi il menu più importante, control, che vedete che contiene tutta una serie di istruzioni. di controllo, che sono quelle che ci interessano di più, in particolar modo queste. Poi tutta la parte di sensoristica, che anche essa ci interessa moltissimo, gli operatori, che vedremo brevemente più avanti, e poi le variabili, che vedremo tra poco.
La prima cosa che ci interessa dunque è realizzare un programma che chieda per esempio un numero all'utente e poi dopo eseguono operazioni matematiche su questo numero e poi stampi il risultato. Allora, qua per esempio ci possiamo scrivere, inserire. un numero intero due punti spazio ora se noi facciamo partire questo programma vedete cosa succede sullo sprite si attiva un fumetto che mi chiede inserire un numero intero per esempio ci scrivo 12 il programma però finisce lì perché io non sto facendo null'altro ora doveva va a finire questo 12 che io ho appena inserito, va a finire dentro una variabile che si chiama ansver.
Allora, che cos'è una variabile? La variabile è uno dei concetti, dei concetti chiave che vedremo oggi, ed è, cos'è una variabile? Come dice il nome, è...
è un qualcosa che varia nel tempo, quindi è una scatoletta che contiene un valore, questo valore può essere di diverso tipo, in questo caso è un numero intero, quindi un numero 1, 2, 3, una cosa di questo genere, e questo numero può variare nel tempo, in questo caso varia perché noi ne inseriamo uno nuovo e quindi lo andiamo ad incastrare in questa scatoletta. Benissimo, allora, quindi dopo la mia operazione di richiesta all'utente, io mi ritrovo con la variabile answerk. che contiene 12 come faccio a visualizzarla beh potrei fare una cosa del genere faccio 6 e vedete che qui c'è scritto di ello per due secondi anziché e lo io posso fare di answer ok quindi cosa faccio chiedo il numero e poi lo dico diciamolo tramite un fumetto lo visualizza per due secondi naturalmente io qua ci potrei mettere un secondo oggi quello che voglio ora supponiamo di farlo partire vedete che a questo punto io qua ci scrivo di nuovo 12 e lui mi genera un fumetto per un secondo con su scritto 12 bene abbiamo realizzato il nostro primo programma però io lo vorrei un pochino più complicato perché così è veramente troppo semplice vorrei eseguire un'operazione matematica anche semplicissima su questo numerino allora io so che il numero è chiuso dentro ad ansberg però io voglio vorrei avere un'altra un'altra variabile che mi faccia da magazzino e vorrei poi incrementare quel valore. Come faccio? Bene, allora vorrei una variabile chiamata numero, il nome naturalmente lo decido io, me lo invento io a mio piacere.
Benissimo, allora realizziamo questa variabile e la chiamiamo numero. Notate che all'interno delle variabili è bene non mettere, anzi è proprio un grande, diciamo che è un ottimo modo per cercarsi guai, inserire degli spazi. Quindi per esempio... mai una cosa del genere diciamo una cosa simile ecco non ha molto senso quindi niente spazi in realtà dentro a scratch e dentro a snap si può fare però una cosa diventa un pochino complicata bene è quale il concetto principale di variabile il concetto è che la variabile appunto può assumere dei vari valori ma è molto importante tenere conto del fatto che per quanto possa cambiare il valore all'interno la scatoletta in ogni istante in ogni momento all'interno di quella scatoletta ci sarà sempre solo un valore a seconda di quello che noi abbiamo inserito il numero di possibili valori e potenzialmente molto elevato giusto per vostra curiosità magari qualcuno di voi avrà sentito parlare dei computer quantistici una variabile all'interno equivalente di una variabile all'interno di un computer quantistico anziché come in questo caso assumere un solo possibile valore in ogni istante di tempo ebbene all'interno computer quantistico può assumere moltissimi valori tutti allo stesso nello stesso momento che ovviamente una cosa diciamo poco intuitiva bene abbiamo creato la nostra variabile che si chiama numero vedete che ce l'abbiamo qua adesso io voglio innanzitutto caricare il valore di answeer che era il 12 che io ho inserito eventualmente voglio caricarlo dentro numero allora devo andare a prendere questo blocchetto vedete questo blocchetto cosa fa?
setta, inserisce, che cosa? numero vedete che qui in questo piccolo menu a discesa c'è solo numero perché è l'unica variabile che abbiamo creato se ne avessimo creato delle altre ci sarebbe stata a cosa? a 0, e no, io voglio metterlo ad answear quindi dopo questo blocchetto notate che qui noi stiamo realizzando un programma e un programma è per definizione una sequenza di istruzioni In questo caso le istruzioni sono dei blocchetti grafici, perché, ripeto, ho scelto Snap?
Perché in questo modo dovrebbe essere più semplice comprendere i concetti di base della programmazione, in quanto con i blocchetti diventa più facile, diciamo, vedere queste, diciamo, strutture dati in azione. Quindi in questo modo noi abbiamo inserito ASVER dentro numero. Benissimo, adesso però noi vogliamo far sì che... che numero venga incrementato di un valore, per esempio 5. Allora, vedete che io qua ho un altro blocchetto che si chiama change, io ovviamente qui pescherò di nuovo un numero, e io qua ci metto 5. Quindi cosa farà questo secondo blocchetto? Il primo blocchetto prenderà un asvera e lo metterà dentro un numero, il secondo blocchetto cambierà numero di 5. Ora, questo secondo blocchetto, che cosa fa?
In pratica fa, aggiunge 5 a numero, ok? Notate che se io mettessi qua... meno 5 farebbe numero toglierebbe 5 a numero ok in questo caso però noi vogliamo fare più 5 ora il questo tipo di blocchetto rappresenta quello che nella programmazione chiamato assegnazione ok questo in particolare questo è un assegnazione nel senso che qui uno prende asver e lo se a numero in questo caso l'assegnazione più che un assegnazione e non è un'assegnazione è un incremento diciamo un calcolo delle proprie quindi io posso fare così quindi allora ho messo a sver dentro numero incrementato numero di 5 e adesso potrei voler stampare numero, ok? Allora io cosa posso fare anziché stampare ello?
Ebbè io trascino questo e ci metto numero. Notate che tutti i blocchetti hanno una loro forma, come i pezzi di un puzzle, e sono appunto realizzati per incastrarsi. Notate anche che lo stop, che è l'ultimo, non ha più possibilità di incastro. Tra l'altro qui vedete che ci sono varie possibilità, io prendo this script perché in questo modo si ferma solo questo. Questo è uno script.
Ok? Ok, benissimo. A questo punto noi abbiamo, leggiamo, chiediamo un numero intero, lo carichiamo dentro a numero a partire da Answer, lo incrementiamo di 5 e lo stampiamo.
Proviamo a vedere. Inserire un numero intero. e vedete che lui mi scrive 17 ok però io vorrei ancora fare qualcosa di un pochino più sofisticato io qui vorrei scrivere non solo numero io vorrei scrivere qualcosa come diciamo una frase, per esempio il numero ora vale, ok? Allora come faccio a fare una cosa del genere? Ho bisogno di questi oggetti che si chiamano operatori.
In particolar modo qui mi viene offerto un operatori chiamato join. A cosa serve? Beh, come dice il termine, join unisce.
Unisce, unisce cosa? Unisce due pezzi, possono essere una stringa, un numero, insomma è molto flessibile da questo punto di vista Snap. E in questo caso... caso io cosa posso scrivere per esempio qui posso scrivere al posto di hello io posso scrivere il numero ora vale ok spazio mentre invece poi qua io prendo numero e lo infilo qui dentro ok quindi il numero ora vale numero benissimo questo questo blocchetto verde e di fatto l'unione di il numero ora vale numero ok quindi a questo punto io non devo dire più è lo ma dirò questo l'unione di questi due blocchetti ok eccolo qua adesso lo riagganciamo e adesso avremo quello che desideravamo desideravamo ok vedete inserire il numero intero il numero ora vale 17 ok bene abbiamo visto di fatto il nostro primo programma anche se sembra abbastanza semplice e in realtà abbastanza raffinato perché contiene inserire se il concetto di programma come sequenza di istruzioni che in questo caso sono dei blocchetti contiene in sé il concetto di di assegnazione e anche il concetto di diciamo di operazione aritmetica e poi questo è l'input quindi l'ingresso dei dati dalla tastiera e questo è l'output cioè la visualizzazione e poi c'è il termine inizio e il termine ok molto bene a questo punto io qui vorrei farvi vedere siccome altrimenti qua rischiamo di essere avulsi da quello che poi vedrete nel corso del primo anno, io vorrei farvi vedere l'equivalente di questo programma, che direi che è sicuramente semplice, l'equivalente nei due linguaggi che vengono usati principalmente. E quindi cominciamo dal C.
Questo è lo stesso identico programma scritto in C. Ora, se voi lo mettete a fianco, vedete che, a parte alcune cose che ovviamente noi qui non vedremo, questa è la dichiarazione della variabile numero, quella che noi abbiamo fatto tramite il menu. Poi, questa è la parte di...
di lettura, in particolar modo la scanf legge il numero, ok? Legge il numero e lo assegna, quindi fa contemporaneamente questo e questo, ok? Poi c'è il numero uguale al numero più 5 e questa, questo blocchetto qua, ok?
Ok, change numero by 5 significa, in questo caso, numero uguale numero più 5. Notate che se io facessi, per esempio, numero uguale numero più 1, incrementerei semplicemente il numero di 1. Per vostra curiosità, in C, se io incremento... numero di 1, posso anche scrivere numero più più e sempre per vostra curiosità avrete sicuramente sentito nominare il linguaggio di programmazione C++ e come potete pensare C++ è un C con qualcosa in più, quindi un C più 1, C uguale C più 1, è un piccolo aneddoto ovviamente, però dovrebbe dare l'idea dello spirito della programmazione in C. E questo è l'output, quindi input, elaborazione, output.
di base di tutti o quasi tutti i programmi quindi input elaborazione output ok bene l'abbiamo visto in c adesso con passi che ovviamente non vedremo proviamo a lanciarlo ok quindi in questo caso scriviamo 12 inserire un numero intero 12 lui mi scrive il numero ora vale 17 è esattamente quello che ci aspettavamo ora guardiamo la stessa cosa in parte Questo è il programma scritto in Python. Io sto ovviamente visualizzando questi programmi in una maniera che non è esattamente quella standard, ma per semplificare molto le cose. Vedete che il numero, il programma scritto in Python è ancora più semplice, è veramente direi banale.
Per cui noi cosa facciamo? Chiamiamo una funzione chiamata input, inseriamo un numero intero da cui ne viene fuori una stringa, la stringa viene convertita in un numero tramite questa int e viene inserita nella variabile chiamata numero. Dopodiché si fa numero uguale numero più 5 e poi si fa...
print che voi capite essere l'output il numero ora vale numero ok quindi di nuovo input elaborazione output se voi andate a guardare vi è una corrispondenza quasi bionivoca con i blocchetti di snap ok ora questo lo possiamo chiudere lanciamo l'equivalente in python inserire un numero intero 12 17 ok ora ripeto non è il sistema più standard per lanciare i programmi python però per questo per i miei scopi in questa prima puntata direi che è ottimale ora sempre per darvi un'idea più la più chiara possibile di di che cos'è un programma voi direte sì però questi sono programmi giocattolo bene allora vedete qui noi adesso stiamo usando il browser che si chiamano questo browser e firefox notate che il firefox per esempio l'internet explorer non è sufficiente per farlo fa girare Snap ma neanche Scratch, quindi ci vuole per esempio Firefox, quindi se non l'avete sul vostro computer ve lo dovete installare, ma non ci sono particolari problemi. Ebbene, questo programma voi capite che è decisamente importante. Ora, se qui voi guardate il numero di linee di codice corrispondenti, supponendo di mettere una linea per ogni riga, siamo a 6, ok?
Più o meno lo stesso numero che c'era in C, più o meno lo stesso numero che c'era in Python, in Python qualcosa meno, ok? Ok? Bene, allora il programma equivalente che controlla Firefox, voi capite che è molto più grande perché deve far funzionare tutto quanto. Ebbene, parliamo di una cifra, un numero di linee di codice superiore al milione.
Un milione, un milione e mezzo, forse due, adesso io non ho un'idea precisa. Però, sempre per farvi vedere, per darvi un'idea, quindi è un numero mastodontico, tenete presente che durante il corso di informatica del primo anno... i programmi che vi saranno richiesti saranno dell'ordine delle 100 linee di codice, quindi decisamente malleabili.
Ora però io volevo farvi vedere per pochi istanti com'è veramente il codice di un programma come Firefox. Firefox è un programma di tipo open source e quindi il codice si può scaricare. Io l'ho scaricato per mostrarvelo.
Eccolo qua. In questa cartella, di dimensioni piuttosto cospicue in realtà, c'è tutto il codice sorgente. si può ricompilare completamente da zero, cioè si può rigenerare Firefox a partire di qua.
Ora, per esempio, vedete, ci sono moltissime directory, perché è chiaro che un milione o due milioni di linee di codice non possono certo essere messe in un file, quindi io vado dentro a browser, per esempio prendiamo qua, vedete, questo è solo un esempio, ma ce ne sono a decine di queste directory, per esempio prendiamo uno di questi, ok prendiamo questo va via come facciamo ad aprirlo lo dobbiamo aprire in qualche maniera diciamo apri con apriamo con wordpad ecco Ecco, vedete, questo programma, che già nel suo piccolo è molto più grande di quelli che abbiamo visto noi, ma ripeto, sono una piccolissima parte, bene, questo è un programma scritto in JavaScript, diciamo un parente stretto del JavaScript. E quindi, diciamo... Diciamo che Firefox è in parte scritto sicuramente in JavaScript, ma non solo in JavaScript.
Per esempio, possiamo andare in quest'altra directory. Ora, in quest'altra directory vedete che qua questo è un file Python, ok? Quindi qui di nuovo possiamo fare WordPad e vedete che qui abbiamo un pezzo, vedete, c'è scritto Python, questo ovviamente il programma è molto più complicato di quello che abbiamo fatto noi, e quindi significa che è scritto anche in Python, ok? Ma non solo, qui c'è del C++. Vedete?
Io faccio apricon, workpad, vedete questo è C++, molto simile al C, anche se ha oggetti, vedete che questo programma, in particolar modo questo pezzo di codice è decisamente più lungo e più complicato. Ebbene, complessivamente potete considerare almeno, penso che il numero in realtà sia superiore, un milione di linee di codice. Ora, un milione è un numero molto grande, ma per darvi l'idea della... dell'importanza dell'enormità di questo numero vi ricordo che la treccani la enciclopedia treccani composta da circa una cinquantina di volumi ciascuno di questi volumi da 2000 pagine ogni ogni pagina possiamo dire che sia da 50 righe sono 5 milioni di righe ebbene qui ce n'è almeno uno di milioni di righe quindi è un quinto della treccani scrivere la treccani diciamo che uno sforzo non banale quindi scrivere firefox è uno sforzo non banale non solo un milione di linee di codice per un browser ma il sistema operativo windows per esempio per funzionare e lui stesso un programma un programma molto più gigantesco di un browser ebbene un sistema operativo può viaggiare intorno alle 20 milioni di linee di codice infine due piccole note innanzitutto questi programmi non sono perfetti in generale l'ingegneria del software che diciamo la parte dell'ingegneria informatica che si occupa della progettazione del software, ha delle piccole regole empiriche. Ora, una regola empirica dice che ogni mille linee di codice scritte c'è un errore chiamato bug e questo bug non si riesce a correggere, nel senso che c'è anche se noi non lo sappiamo, non sappiamo dov'è.
Quindi se ci pensate significa che il Firefox con il suo milione di linee di codice potrebbe avere. circa mille bug bachi non corretti che nessuno correggere mai e che ogni tanto possono provocare dei malfunzionamenti parziali ok infine un ultimo numero interessante pensate che voi direte ma quanto ci vuole a scrivere un programma così grande ok ebbene un'altra regola semi empirica dell'ingegneria del software dice che uno sviluppatore professionista in media 10 linee di codice al giorno. Questo numero sembrerebbe piccolissimo, ma comprende naturalmente tutta la fase di progettazione e di test, che deve essere ovviamente molto complessa, perché un conto è realizzare un conto. un programmino come quello che abbiamo fatto noi e un altro conto e realizzare un programma professionale che deve funzionare perfettamente. Ora, dopo questo breve scursus che aveva il compito sostanzialmente di farvi capire a cosa andiamo incontro, anche se noi naturalmente ci occuperemo di qualcosa di molto più piccolo, vediamo degli altri piccoli esempi.
Abbiamo visto il nostro primo programma, bene, cancelliamo questo primo programma e vediamo subito qualcosa di più interessante, di più semplice, ma... tempo stesso più interessante vi ho fatto vedere prima un esempio in cui io facevo muovere il mio sprite ok perché vi ripeto questo ambiente di programmazione è fatto soprattutto per i videogiochi insomma per ambienti di animazione per interazione di un bari di vario tipo benissimo allora mettiamo move e vedete che noi qui poi qua facciamo fermiamo lo scritto ok ricordo che questo è uno script cioè nella terminologia snap è un programma. Questo programma può viaggiare per i fatti suoi, come abbiamo fatto prima, ma in generale il suo input e il suo output si verificano in questa finestra che, come vi dicevo prima, è fatta per applicazione. Grafiche, quindi il suo scopo principale è ad esempio fare muovere o animare questi sprite, questi folletti.
Benissimo, allora vedete che io prima ho fatto così, tutto a posto. Adesso io cosa voglio fare? Beh, allora...
e qui sia in C sia in Python non abbiamo fatto un solo programma, ok? Ma qui questo meccanismo snap così come anche scratch permette di fare qualcosa di più carino con sforzo veramente minimo. anziché move noi possiamo anche fare turn ok cioè facciamo girare ebbene cosa succede se io adesso premo il clicco sul tasto con la bandierina verde vedete che il mio sprite contemporaneamente si muove e gira ok quindi questo significa che noi abbiamo due programmi due script così come vengono chiamati che contemporaneamente agiscono sullo stesso sprite ok Ora, sembra una cosa banale, ma in realtà è una cosa estremamente raffinata, perché significa che noi abbiamo realizzato, con pochi blocchetti, un programma multi-thread, che cioè segue più thread, cioè più fili di programmazione, cioè più programmi, e questi programmi in questo caso stanno collaborando, stanno lavorando assieme, perché vedete che tutti e due questi programmi, questi script, intervengono sullo stesso sprite.
facendolo muovere in modo opportuno, ok? Quindi vedete, se io faccio partire soltanto questo, lui ruota solo, se io faccio partire solo questo va avanti, ma se io li faccio partire tutti e due assieme, vedete che lui ruota attorno a un centro, ok? Bene, ma quindi noi possiamo realizzare un programma multi-thread, pensate, con questo snap, cosa che in G è decisamente più difficile, anche in Python non troppo, però decisamente più difficile.
Bene, però io posso fare... ancora delle altre cose in più vi ho detto che questo sistema serve per i videogiochi è chiaro che un videogioco non può avere un solo spray pensate a un videogioco con svariati personaggi allora io cosa posso fare posso aggiungere un nuovo sprite eccolo qua il mio nuovo sprite è sempre una freccia però vi ricordo che qui io posso metterci qualsiasi cosa posso disegnarlo anche posso fare quello che voglio anche lo sfondo può essere colorato a piacere ora vedete che il mio programma è sparito non è sparito in realtà questi erano gli script dello sprite 1, questo è lo sprite 2 e quindi può avere degli altri script. Per esempio, supponiamo di voler copiare questo script in questo secondo sprite, beh, se io lo trascino così, vedete, mi si attiva, mi si illumina questo, sembra che non sia successo nulla, ma se io vado qua, vedo che qua c'è quest'altro.
Ora, se io faccio partire tutto assieme, vedete cosa succede? Succede che... lo sprite grigio scuro ruota attorno a un centro ipotetico, quello blu si sposta. Quindi ancora una volta noi stiamo utilizzando un programma multitasking composto da due processi, questo processo è composto da due thread e quest'altro processo è composto da un unico thread. Questi due processi non dialogano espressamente tra di loro, mentre questi due thread si dialogano.
espressamente perché tutti e due pilotano lo stesso sprite. Ora, ancora una volta, voglierei sottolineare che questa cosa apparentemente così banale è estremamente complicata e porta con sé delle complicazioni non banali che vedremo brevemente in una delle prossime puntate. Bene, adesso però dobbiamo ancora fare alcune cose prima di finire questa puntata. Allora, innanzitutto eliminiamo il secondo sprite e adesso... Adesso proviamo a fare qualcosa di più raffinato.
Allora, tanto per cominciare, questo lo riportiamo un po'qua. Allora, innanzitutto ci sono anche dei blocchetti che permettono di portare lo sprite in posizione iniziale, quindi per esempio 0,0, questo lo dovete immaginare come un piano cartesiano, ok? Quindi qui c'è il primo quadrante, quindi asse delle x, asse delle y positivo e qui c'è lo 0,0, ok?
Quindi 0,0 lo porterà qua. qua dopodiché c'è anche il l'inclinazione no il verso perché naturalmente questo anche un verso 90 gradi e verso destra quindi in questo modo va di in centro punto verso destra e quindi lo posso mettere per così adesso io vorrei provare a percorrere con questo sprite un piccolo quadrato quindi partire di qua puoi fare così così e così e tornare al suo fare in modo che torni al suo posto allora io cosa devo fare quindi Quindi mi devo muovere per esempio di facciamo 20 passi e poi devo girare però non in senso orario ma in senso anti-orario di 90 gradi ovviamente. Ok?
Ecco qua. Quindi in questo modo mi porto lì, mi allineo, vado così e mi giro. Proviamo a vedere che cosa succede.
Vedete? Ovviamente i passi li ha svolti molto rapidamente. allora io cosa potrei fare beh per esempio potrei aspettare qua mettiamo qua wait in questo modo riesco a vederlo un pochino meglio vedete ecco così benissimo a questo punto io posso vedete questo il blocchettino che mi interessa io lo duplico ok lo aggancio li duplica tutto quanto metto qua poi qui faccio un poco di spazio questo momento qua questo incasso qua sotto ok vedete ha percorso il suo quadrato molto bene però non lo vedo questo quadrato bene come posso farlo vedere vi ricordo che questo che questo ambiente serve esplicitamente per videogiochi e sistemi di animazione Bene, quindi possiamo far finta, possiamo immaginare che questo sprite in realtà sia una penna che normalmente vola al di sopra di un foglio di carta bianco, però al momento buono io la posso abbassare.
E allora vedete che qui c'è la voce penna. penna, io cosa faccio all'inizio? Pulisco il foglio, pulisco il foglio bianco, poi mi porto al centro e poi cosa faccio? Abbasso la penna per poter scrivere. A questo punto a questo punto vedete che io pulisco il foglio vado in posizione centrale abbassò la penna per scrivere scrivo e a questo punto qui faccio pen up se adesso io faccio partire vedete che lui mi disegna il mio quadrato, ok?
Molto bene, a questo punto vorrei fare ancora qualcosa di più. Vedete, allora vedete che noi qui abbiamo questo oggettino, questa sequenza di blocchetti, quindi questo... programma che è formato da quattro pezzi tutti uguali voi avrete probabilmente immaginato che non è una cosa molto furba scrivere quattro volte lo stesso codice se fosse un esagono già di sarebbe più complicato figuriamoci un decagono quindi uno potrebbe per esempio pensare ma posso fare questa realizzare questa operazione molte volte dicendogli semplicemente di fare questa operazione molte volte sì se io vado qua vedete che io qui ho vari i blocchetti per esempio forever per sempre ma io posso prendere ripetanti il ok quante volte lo devo realizzare questa operazione 4 questo questo blocchetto io cosa faccio lo vado a incastrare qui dentro vedete perché la ripete costruita appositamente per questo in questo modo che cosa succede succede che lui cosa farà scusate che ho dimenticato però un pezzetto ecco qua Vedete che io a questo punto ripeto per quattro volte l'operazione e non devo più questa cosa, questo lo posso prendere e buttare.
Per cui io a questo punto vedete che ottengo lo stesso identico risultato. Bene, direi che abbiamo quasi finito. per oggi ma vorrei ancora vedere una cosa vedete quando ci muoviamo di 20 posizioni ok ma perché ci dobbiamo proprio muovere di vendere potremmo mettere 30 40 e allora perché non realizziamo una variabile e leggiamo dalla variabile il valore, quindi potremmo prendere per esempio una variabile e leggere il valore, ok? E vi faccio solo vedere perché poi questo sarà di fatto il vostro piccolo esercizio. Allora io cosa potrei fare?
Per esempio, scusate, ecco qua, è bene che lo fermi. Allora io qua potrei fare, potrei mettermi qua, ok? E creare una variabile, vedete che qui c'era numero, questa la posso, vabbè, facciamo un'altra variabile, lunghezza. Lato, ricordatevi, mai spazi.
Notate che vuol dire che questa variabile è visibile per tutti gli sprite, anche questo è un concetto di programmazione multi-thread e multi-processo, ma per il momento lo ignoriamo. Lunghezza lato, ok? Benissimo, quindi questa è la mia variabile, quindi io che cosa posso fare?
Posso andare qua, chiedere... lunghezza lato punto interrogativo che poi vi ho detto prima che la risposta dentro ad asver diciamo semplifichiamo la faccenda diciamo così e siccome la lunghezza del lato è piazzata qua, io potrei andare a prendere semplicemente qui e scrivercelo qui. Ripeto, se invece volete fare un lavoro come si deve, prendete lunghezza lato, copiate answer dentro a lunghezza lato, come abbiamo fatto prima, e qui dentro ci mettete lunghezza lato.
Proviamo a vedere che cosa succede. Lunghezza lato ci mettiamo 50. vedete che a questo punto il disegno è da 50 come lato ok bene con questo direi che abbiamo terminato ancora solo una cosa supponiamo che voi vogliate salvare questo vostro programma perché lo volete riutilizzare andate qua fate export project c'è anche un altro modo però è meno pratico sport project per esempio lo chiamate quadrato ok fate ok vedete accettate salva file notare che è un file punto xml faccio salva file vedete che a questo punto lui esattamente come se avessi fatto il download di un qualche file me l'ha messo qua quindi io lo posso semplicemente prendere di qui e caricare qua ok quindi questo è il mio programma se io poi decida di ricaricarlo faccio così faccio import ok vado sul desktop dove sono salvato prendo quadrato lui me lo carica ed eccolo qua come prima ok quindi l'esercizio per la prossima volta quale sarà sarà quello è quello di dire ok qui abbiamo la lunghezza del lato ma io vorrei anche poter disegnare non un solo quadrato ma un poligono con un numero di lati a piacere. Quindi in pratica io vorrei cambiare il numero di lati. Cambiare il numero di lati significa avere una nuova variabile, la nuova variabile si verrà inserita. qua, al posto di 4, però andrà a influenzare anche questo 90, perché 90 è 360 diviso 4, ma io qua dovrò inserirci il valore opportuno.
Come posso fare? Vedete, se io qua prendo operatori, io potrei per esempio qui scrivere, anziché 90, ci scrivo per esempio 360 diviso 4, ma nel caso del programmino che vi sto suggerendo di fare, al posto del 4 ci metto il numero dei lati. Quindi questo esercizio lo svolgeremo la prossima volta e per oggi è tutto, grazie.