Exemple esquema de blocs

Correu electrònic*

*Exemple de Seguretat informàtica IOC

L’objectiu d’aquesta activitat és descriure els conceptes relacionats amb el correu electrònic i el correu electrònic segur.

Copieu la taula i empleneu la columna “Descripció” amb els continguts que cregueu més adients:

ConcepteDescripció
1Feu un esquema i indiqueu el nom dels elements que podeu trobar en un sistema de correu electrònic.
2Definiu el correu segur, expliqueu-ne breument les propietats.
3Indiqueu tres exemples en els quals penseu que és necessari l’ús del correu electrònic segur. Expliqueu-ne breument el perquè.3.1.
3.2.
3.3.
4Quina relació hi ha entre el correu segur, la privadesa de l’usuari i la signatura electrònica?
5Expliqueu la diferència entre el correu paper (tradicional), el correu electrònic i el correu segur.

SOLUCIÓ:

Figura

1. Adreça de correu: la manera d’identificar una persona en el sistema de correu per Internet. L’adreça (que l’ha de subministrar un proveïdor de correu) es divideix en dues parts: el nom de l’usuari i el domini al qual pertany l’adreça.

Servidor de correu: equipament que permet la recepció, l’enviament i el reenviament de correu.

Client de correu: els clients de correu electrònic són programes per gestionar els missatges rebuts i per poder-ne escriure de nous.

Missatge de correu: fitxer amb un format molt ben definit que conté el que volem enviar i la informació addicional perquè el contingut pugui arribar al destinatari.

2. El correu segur és el correu que garanteix la privadesa en les comunicacions, ja que el correu electrònic és inherentment no segur. Les propietats del correu segur són el xifratge, la integritat, la identitat del remitent i la no-repudiació.

3. Indiqueu tres exemples en els quals penseu que és necessari l’ús del correu electrònic segur. Expliqueu-ne breument el perquè.

3.1. Dades mèdiques per Internet. Són dades molt sensibles i viatgen per una xarxa pública de poca seguretat.

3.2. Nòmines per la intranet d’una empresa. Són dades sensibles i cal tenir la seguretat que el correu serà obert exclusivament per la persona interessada.

3.3. Enviar rebuts de cobrament/pagament. És important estar segur que les dades no seran modificades durant el trànsit per Internet.

4. El correu segur garanteix la privadesa en les comunicacions, i per tant protegeix la privadesa de l’usuari. Tanmateix, per assolir aquests nivells de seguretat és necessari l’ús d’eines com la signatura electrònica.

5. El correu electrònic s’assimila a una postal en el món físic. És a dir, que el seu contingut pot ser vist per tots els servidors intermedis des de l’ordinador origen fins a l’ordinador destinació. La diferència principal és que el contingut del correu en paper no es veu, però el del correu electrònic, sí. El correu electrònic, a diferència del correu en paper, només pot ser vist pel destinatari. És a dir, que a més de tenir “sobre digital”, no pot ser obert (a diferència del sobre en paper) per cap persona que no sigui el destinatari (perquè ell té la “clau” per obrir-lo).

RamsomWare

RANSOMWARE per Guillem Galmés Riera

Un ransomware o programari maliciós de rescat (de l’anglès ransom, ‘rescat’, i ware, per programari) és un tipus de programa informàtic malintencionat que restringeix l’accés a determinades parts o arxius del sistema infectat, i demana un rescat a canvi de llevar aquesta restricció. Alguns tipus de ransomware xifren els arxius del sistema operatiu inutilitzant el dispositiu i coaccionant a l’usuari a pagar el rescat.

Es van fer populars a Rússia i el seu ús va créixer internacionalment al juny del 2013. L’empresa McAfee va assenyalar que solament en el primer trimestre del 2013 havia detectat més de 250 000 tipus diferents de ransomware.

Mètodes de propagació

Normalment un ransomware es transmet tant com un troià o com un cuc, infectant el sistema operatiu, per exemple, amb un arxiu descarregat o explotant una vulnerabilitat de programari. En aquest punt, el ransomware s’iniciarà i xifrarà els arxius de l’usuari amb una determinada clau, que només el creador del ransomware coneix i proveirà a l’usuari que la reclami a canvi d’un pagament.

Com actua

Un ransomware sempre entra amb una identitat camuflada

Un atac ransomware comença a través d’un virus camuflat dins elements que conviden a fer click. S’amaga dins elements com per exemple:

  • Arxius adjunts en correus electrònics.
  • Vídeos de pàgines de dubtós origen.
  • Actualitzacions de sistemes.
  • Programes, en principi, fiables com Windows o Adobe Flash.

Tipus de ransomware

-Reveton

El 1989 es va començar a disseminar un ransomware anomenat Reveton. Estava basat en el troià Citadel el qual estava al seu torn basat en el troià Zeus, el seu funcionament es basa a desplegar un missatge pertanyent a una agència de la llei, preferentment corresponent al país on resideix la víctima. Per aquest funcionament es va començar a nomenar-se com a “Trojan cop“, o “troià de la policia“, a causa que al·legava que el computador havia estat utilitzat per a activitats il·lícites, tals com descarregar programari pirata o pornografia infantil. El troià desplega un advertiment informant que el sistema va ser bloquejat per infringir la llei i d’aquesta manera haurà de pagar una fiança per poder alliberar-la, mitjançant el pagament a un compte anònim com pot ser Ukash o Paysafecard.

-CryptoLocker

Al setembre de 2013 va fer la seva reaparició el ransomware basat en el xifrat d’arxius també conegut com CryptoLocker. Es controla el servidor i es xifren arxius d’un tipus d’extensió específica. El virus elimina la clau privada a través del pagament d’un bitcoin o un bo prepagament en efectiu dins dels tres dies després de la infecció. A causa del llarg de la clau utilitzada, es considera que és extremadament difícil reparar la infecció d’un sistema.

-TorrentLocker

Al setembre de 2014, una ona de ransomware va arribar als seus primers objectius a Austràlia, denominats CryptoWall i CryptoLocker. Les infeccions es propagaven a través d’un compte fals del correu australià la qual enviava un correu electrònic notificant lliuraments fallits de paquets. D’aquesta manera s’evadia la revisió mèdica del correu en els filtres de antispam i aconseguia que arribessin als destinataris. Aquesta variant requeria que els usuaris ingressessin en una pàgina web i, prèvia comprovació mitjançant un codi CAPTCHA, accedissin a la mateixa, abans que el malware fos descarregat, d’aquesta manera es va evitar que processos automàtics puguin escanejar el malware en el correu o als enllaços inserits.

-CryptoWall

CryptoWall és una varietat de ransomware que va sorgir a principis de 2014 sota el nom de CryptoDefense dirigida als sistemes operatius Microsoft Windows. Es propaga a través del correu electrònic amb suplantació d’identitat, en el qual s’utilitza programari d’explotació com a Fiesta o Magnitud per prendre el control del sistema, xifrar arxius i així demanar el pagament del rescat del computador. El rang de preus es troba entre els 500 $ i 1000 $.

-Mamba

Un grup d’investigadors de seguretat del Brasil, anomenat Morphus Labs, va descobrir un nou ransomware de xifrat de disc complet  aquesta mateixa setmana, anomenat Mamba. Mamba, com ho van cridar, utilitza una estratègia de xifrat a nivell de disc en lloc d’un basat en arxius convencionals. Això pot ser només el començament d’una nova era pels Ransomwares. “Mamba”, és una serp amb un verí paralitzant. Igual que per a les víctimes d’aquest nou ransomware. Per obtenir la clau de desxifrat, és necessari posar-se en contacte amb algú a través de l’adreça de correu electrònic proporcionada. Sense això, el sistema  no arrenca.

Mètodes de prevenció

La primera passa és la detecció

Degut a que els atacs ransomware son invisibles a l’ull inexpert, l’usuari s’ha de protegir a través de l’ús d’antivirus. Aquests sistemes detecten automàticament la presència d’un component deficitari i normalment posa l’equip o una determinada regió en quarentena de manera que el virus no s’extengui. D’aquesta manera es pot disposar del servei de programaris com McAfee o Kaspersky. A més experts suggereixen instal·lar programaris que ajudin a bloquejar aquest tipus d’atacs coneguts, com així també tenir còpies de seguretat en llocs inaccessibles per a qualsevol malware.http://aula.gimnesia.net/2019/05/10/investigacio-de-ramsonware/http://aula.gimnesia.net/wp-content/uploads/2019/05/ransomware.jpghttp://aula.gimnesia.net/wp-content/uploads/2019/05/ransomware-150×150.jpg2019-05-10T09:43:23+00:00adminseguretatRANSOMWARE per Guillem Galmés Riera Un ransomware o programari maliciós de rescat (de l’anglès ransom, ‘rescat’, i ware, per programari) és un tipus de programa informàtic malintencionat que restringeix l’accés a determinades parts o arxius del sistema infectat, i demana un rescat a canvi de llevar aquesta restricció. Alguns tipus de ransomware xifren els arxius del…admin pereantonibennassar@gmail.comAdministratorAula de InformàticaBlog Aula Informàtica Gimnèsia

Teoria API

Cómo crear una API sin código | AppMaster

Exemple api Gimnèsia.

Cerca les peticions que fa la pàgina: http://dev.gimnesia.net/gimnesia/ (Pitjant F12 i observa l’apartat de xarxa)

Usa Postman per fer l’anàlisi de les peticions fetes.

Analitza el format de les dades json.

Problemes del Jutge 2

El Jutge és una plataforma d’aprenentatge de programació. Per poder accedir als cursos s’ha de tenir un usuari. Una vegada teniu un usuari podeu entrar als cursos, problemes i al corrector.

Mirau les instruccions de lectura de dades, vos heu d’apuntar al curs d’estiu.

Podeu procedir a realitzar dos problemes (que us assignarà el professor) d’aquesta pàgina de bucles.

En acabar el professor us assignarà dos problemes de bucles dins bucles -> aquí

Recordau que al quadern s’ha de mostrar el procès d’anàlisi i disseny de l’algoritme. Desprès ho posau al vostre portafoli personal.

Problemes del jutge

El Jutge és una plataforma d’aprenentatge de programació. Per poder accedir als cursos s’ha de tenir un usuari. Una vegada teniu un usuari podeu entrar als cursos, problemes i al corrector.

Mirau les instruccions de lectura de dades, vos heu d’apuntar al curs d’estiu i desprès podreu procedir a realitzar tres problemes (que us assignarà el professor) d’aquesta pàgina.

Recordau que al quadern s’ha de mostrar el procès d’anàlisi i disseny de l’algoritme. Desprès ho posau al vostre portafoli personal.

ESTRUCTURES DE CONTROL I VARIABLES

1. Introducció.

Segons Turing “si vols que un computador faci A basta que li diguis que faci A” i l’objectiu que sigui senzill, clar, finit i ben definit.

Crear un algoritme és un procediment d’abstracció, que a partir d’unes premises es volen treure uns resultats.

Es necessari saber dibuixar i descriure el recorregut de un algoritme que implementa un requeriments previs. Un algoritme es descriu usant estructures de dades i sentències seqüencials, iteratives i condicionals.

Durant la unitat farem exercicis de disseny i implementació d’algoritmes usant el llenguatge javascript.

La implementació la farem mitjançant codepen.io i de manual bàsic usam w3schools.

2. Què és un algoritme?

  1. Un algoritme és una seqüència d’intruccions, variables i condicionals lògics que resolen un problema.
  2. A programació s’anomena funció, i té un nom, pot tenir valors d’entrada que s’anomenen paràmetres i retorna un valor de sortida.
  3. Una funció s’ha d’invocar o cridar desde un punt del “programa”.
  4. Una funció o algoritme pot cridar altres funcions. També es pot cridar a ella mateixa, és el que s’anomena funció recursiva.
  5. La implementació de un algoritme és pasar la idea del disseny a un llenguatge de programació.
Algoritme de com fregir un ou. Cavall Fort

3.
Elements d’un algoritme

Per aconseguir dissenyar i implementar un algoritme s’usen els següents elements:

  1. Variables: permeten guardar valors que es podran modificar. Les variables tenen un nom, tenen un abast d’accesibilitat i poden ser del tipus:
    • Boleà: un bit que pot tenir el valor vertader o fals.
    • Numèric
    • Cadena de caràcters. String
    • Llistes: conjunts de variables amb una estructura i accesibilitat concreta.
  2. Condicionals: Permeten controlar el recorregut de l’algorisme. Decideixen, mitjançant una premisa condicional quin camí ha d’agafar l’algoritme. Pot ser un condicional que s’executa una sola vegada (if) o un condicionals que fa un bucle (while, for, …).
  3. Comentaris: Els comentaris són elements que ajuden a explicar el funcionament de l’algoritme. Quan s’implementa són parts del codi que no s’executen.

Condicional if

El condicional d’una execució triar camins diferents alhora de seguir un algoritme. S’expresa mitjançat una o varies condicions que resolen el camí.

La construcció d’aquestes condions s’ha de controlar per tal de no tenir resultats desfavorables. Imagina que alhora d’entrar un usuari i password la decisió sempre és entra al programa, això seria un mal algoritme.

La forma per expresar aquesta condició és dins un rombe d’on hi surten els camins per les condicions vertader o fals.

Exercicis i pràctiques.

Per entendre la teoria ho feim amb els següents exercicis de disseny i implementació d’algoritmes o funcions

Exercici 1.

Dissenya i implementa la funció retornaMaxim(x,y) i ens ha de retornar el nombre més alt dos que s’han passat per paràmetre. Es suposa que les dues entrades són enters.

ex: retornaMaxim(4,8)->8 , retornaMaxim(4,4)->4

Disseny de l’exercici 1

Implementació de l’exercici

https://www.youtube.com/embed/rRlmFusBu9M https://codepen.io/pereantoni/embed/ExKGJqR?height=265&theme-id=light&default-tab=js%2Cresult&user=pereantoni&slug-hash=ExKGJqR&pen-title=Exercici%201.&name=cp_embed_1

Queden per vosaltres els següents exercicis.

Exercici 2. S’ha de dissenyar i implementar la funció retornaMaxim(x,y,z) que ens ha de retornar el nombre més alt dels tres. Es suposa que tots els paràmetres són numèrics.

Exercici 3. S’ha de dissenyar i implementar l’algoritme esbyte(x) que:
-si la x està entre 0 i 255 retorna true
-sino retorna false.

Exercici 4. Cerca la funció de javascript que ens mostri si un nombre és parell o senar. Dissenya i implementa una funció esSenar(x) que ens retorni true si és senar.

Entrada de dades i variables.

Per poder entrar dades es pot fer mitjantçant una finestra de prompt(). És una simle finestra on l’usuari pot introduïr una cadena de caràcters, també pot introduir un número. L’algoritme pot enregistrar l’entrada dins d’una variable.

Existeix moltes formes diferents de que l’usuari es pugui comunicar amb el programa (conjunt algorimes ordenats). Com per exemple l’entrada dins un input, pitjar un botó, pitjar una tecla, etc.

Més endavant veurem com s’implementen aquestes altres formes i com es tracten les dades que es produeixen.

Dit això ens centram amb la funció prompt(). Aquesta funció obri una finestra amb un input on l’usuari pot entrar caràcters i després els envia al programa. Aquestes dades es poden guardar dins una variable, així es poden mantenir, variar i usar.

Les variables tenen un nom i contenen un valor o conjunt de valors.

var x, y, z; // Statement 1
x = 5; // Statement 2
y = 6; // Statement 3
z = x + y; // Statement 4

//La variable z valdrà x + y, o sigui 5 + 6 que és 11.
mira el link w3schools statements.

Mirau el video per veure el procés:
https://www.youtube.com/embed/K-seBrFKlnc

CONDICIONAL ITERATIU

El condicional iteratiu proposa una condició de control i repeteix l’acció mentres aquesta condició és vertadera.

Pot ser un while o un for. En principi empram els while ja que ens permeten tenir més control sobre les iteracions.

Mirau el video següent que ens mostra com fer una iteració usant while.

PROBLEMA RESOLT.

Volem saber si un nombre és primer. Per això pensam l’algorisme i l’implementam. També podem observar que alguns algoritmes són més ràpids que altres simplement girant la forma en que s’implementen. Mira el següent video.

I aquí baix teniu la implementació on podeu fer les comprovacions.

EXERCICI PER IMPLEMENTAR:

demanar quatre nombres i passarlos a una funció esIP(a,b,c,d) que retorni true si a,b,c,d estan entre 0 i 255.

PROBLEMA EXTRA:

Pensau una solució d’algoritme. Pensau abans quina estratègia s’ha de seguir, quines condicions té la solució del problema.

Ens donen 4 numeros i volem crear l’hora més alta possible.

ex: horaAlta(3,2,1,2)->23:21
ex: horaAlta(3,2,6,6)->error
ex: horaAlta(5,2,2,6)->23:56 https://codepen.io/pereantoni/embed/poyGVKy?height=265&theme-id=light&default-tab=js%2Cresult&user=pereantoni&slug-hash=poyGVKy&pen-title=exercici%208.%20%C3%89s%20primer.&name=cp_embed_2 http://aula.gimnesia.net/2020/01/10/unitat-7-programacio-javascript/http://aula.gimnesia.net/wp-content/uploads/2020/01/C0247871-F549-4242-88C6-3B84386EB172-1024×768.pnghttp://aula.gimnesia.net/wp-content/uploads/2020/01/C0247871-F549-4242-88C6-3B84386EB172-150×150.png2020-01-10T16:44:00+00:00admin2on batxillerat’Which programming language should you learn first?ʇdıɹɔsɐʌɐɾ :ɹǝʍsuɐ.’— Quincy Larson 1.Introducció. Segons Turing “si vols que un computador faci A basta que li diguis que faci A” i l’objectiu que sigui senzill, clar, finit i ben definit. Crear un algoritme és un procediment d’abstracció, que a partir d’unes premises es volen…admin pereantonibennassar@gmail.comAdministratorAula de InformàticaBlog Aula Informàtica Gimnèsia

Treball POO.

El projecte bolla.py s’ha de modificar i s’han d’aplicar l’herència, el polimorfisme i la composició. Cada crup ha de fer un estudi on s’apliquin els coneixements adquirits durant el curs, es farà una presentació a l’aula, del disseny i de la implementació.

Les preguntes: descriu breument el projecte actual, descriu la nova forma, quins objectes i esdeveniments treballareu.

Metodologia SCRUM, cada dia s’informarà de la tasca al director de grup, el professor.

El projecte de grup es fa sobre http://aula2.gimnesia.net/2022/03/18/moviment-dobjectes/ i s’ha d’ampliar la programació. El procés de treball:

  1. Cada dia presentam al professor les tasques (en 3 minuts)
  2. Treballam, pensam, comentam,… la idea.
  3. Realitzam el disseny.
  4. Feim la implementació.
  5. Preparam la presentació.
  1. Idea, ha de de tenir:
    1. Un nou objecte que hereta de la classe bolla. S’ha de modificar un mètode.
    2. Una estructura tipus llistat per contenir els objectes del programa.
    3. Un control de esdeveniments.
    4. Disseny formal de la pantalla
  2. Disseny:
    1. Sobre un paper dibuixam la distribució dels objectes i explicam breument el seu comportament.
    2. Sobre el següent diagrama UML, definiu els canvis que heu fet al projecte. Per fer canvis a l’UML s’ha d’anar a la pàgina de plantUML i editar aquest codi adjunt.
  3. Implementació:
    1. Es realitzen els canvis de codi sobre el programa actual
    2. Cada canvi s’ha de comprovar, s’han de fer especificacions de proves.
  4. Presentació:
    1. Es preparen els punts anteriors en forma de document.
    2. Es destaquen els aspectes més importants en un document de presentacions
    3. A la presentació s’ha de presentar un punt del programa de grup que destaqui els conceptes de classe, herència, polimorfisme, estructura de dades, esdevenients, ….
@startuml
Bolla <|-- Floc
Bolla <|-- Persona
Bolla <|-- Bombilla

Bolla : posicioX, int
Bolla : posicioY, int
Bolla : setx()
Bolla : setY()
Bolla : draw()
Bolla : update()

Bombilla : encen()
Bombilla : apaga()

Llista *-- Bolla

Llista : append() 

@enduml

Estudi moviment amb cursor

import arcade

SCREEN_WIDTH = 640
SCREEN_HEIGHT = 480
VELOCITAT = 3

class Ball:
    """ This class manages a ball bouncing on the screen. """

    def __init__(self, position_x, position_y, change_x, change_y, radius, color):
        """ Constructor. """

        # Take the parameters of the init function above, and create instance variables out of them.
        self.position_x = position_x
        self.position_y = position_y
        self.change_x = change_x
        self.change_y = change_y
        self.radius = radius
        self.color = color

    def draw(self):
        """ Draw the balls with the instance variables we have. """
        arcade.draw_circle_filled(self.position_x, self.position_y, self.radius, self.color)

    def update(self):
        """ Code to control the ball's movement. """

        # Move the ball
        self.position_y += self.change_y
        self.position_x += self.change_x

        # See if the ball hit the edge of the screen. If so, change direction
        if self.position_x < self.radius:
            self.change_x *= -1

        if self.position_x > SCREEN_WIDTH - self.radius:
            self.change_x *= -1

        if self.position_y < self.radius:
            self.change_y *= -1

        if self.position_y > SCREEN_HEIGHT - self.radius:
            self.change_y *= -1

class Pere(Ball):

    def __init__(self, position_x, position_y, change_x, change_y, radius, color):
        super().__init__(position_x, position_y, change_x, change_y, radius, color)
        
        self.key=[0]*4
        #UP,DOWN,LEFT,RIGHT
        print(self.key)

    def update(self):
        """ Code to control the ball's movement. """

        # Move the ball
        self.position_y += self.change_y
        self.position_x += self.change_x

        # See if the ball hit the edge of the screen. If so, change direction
        if self.position_x < self.radius:
            self.change_x = 0

        if self.position_x > SCREEN_WIDTH - self.radius:
            self.change_x = 0

        if self.position_y < self.radius:
            self.change_y = 0

        if self.position_y > SCREEN_HEIGHT - self.radius:
            self.change_y = 0
    
    def key_press(self,key):
        #self.key = key
        #print("agafant", self.key)
        if key == arcade.key.UP or key == arcade.key.W:
            self.change_y = VELOCITAT
            self.key[0]=1
        elif key == arcade.key.DOWN or key == arcade.key.S:
            self.change_y=-VELOCITAT
            self.key[1]=1
        elif key == arcade.key.LEFT or key == arcade.key.A:
            self.change_x = -VELOCITAT
            self.key[2]=1

        elif key == arcade.key.RIGHT or key == arcade.key.D:
            self.change_x = VELOCITAT
            self.key[3]=1
        print(self.key)
    
    def key_release(self,key,modifiers):
        if key == arcade.key.UP or key == arcade.key.W:
            self.change_y = 0
            self.key[0]=0
        elif key == arcade.key.DOWN or key == arcade.key.S:
            self.change_y=-0
            self.key[1]=0
        elif key == arcade.key.LEFT or key == arcade.key.A:
            self.change_x = 0
            self.key[2]=0

        elif key == arcade.key.RIGHT or key == arcade.key.D:
            self.change_x = 0
            self.key[3]=0
        print(self.key)

class MyGame(arcade.Window):

    def __init__(self, width, height, title):

        # Call the parent class's init function
        super().__init__(width, height, title)
        arcade.set_background_color(arcade.color.ASH_GREY)

        self.pere = Pere(50, 50, 0, 0, 15, arcade.color.AUBURN)
          
        # Create a list for the balls
        self.ball_list = []
        


    def on_draw(self):
        """ Called whenever we need to draw the window. """
        arcade.start_render()

        # Use a "for" loop to pull each ball from the list, then call the draw
        # method on that ball.
        self.pere.draw()
        for ball in self.ball_list:
            ball.draw()

    def update(self, delta_time):
        """ Called to update our objects. Happens approximately 60 times per second."""

        # Use a "for" loop to pull each ball from the list, then call the update
        # method on that ball.
        self.pere.update()
        for ball in self.ball_list:
            ball.update()

    def on_key_press(self, key, modifiers):
        """Called whenever a key is pressed."""
        self.pere.key_press(key)
        

    def on_key_release(self, symbol, modifiers):
        #print("amollant ", self.pere.key)
        self.pere.key_release(symbol,modifiers)
        return super().on_key_release(symbol, modifiers)

    



def main():
    window = MyGame(640, 480, "Drawing Example")

    arcade.run()


main()

Pràctica esdeveniments

Copia el següent codi i fes els exercicis.

import arcade

SCREEN_WIDTH = 640
SCREEN_HEIGHT = 480

class Ball:
    """ This class manages a ball bouncing on the screen. """

    def __init__(self, position_x, position_y, change_x, change_y, radius, color):
        """ Constructor. """

        # Take the parameters of the init function above, and create instance variables out of them.
        self.position_x = position_x
        self.position_y = position_y
        self.change_x = change_x
        self.change_y = change_y
        self.radius = radius
        self.color = color

    def draw(self):
        """ Draw the balls with the instance variables we have. """
        arcade.draw_circle_filled(self.position_x, self.position_y, self.radius, self.color)

    def update(self):
        """ Code to control the ball's movement. """

        # Move the ball
        self.position_y += self.change_y
        self.position_x += self.change_x

        # See if the ball hit the edge of the screen. If so, change direction
        if self.position_x < self.radius:
            self.change_x *= -1

        if self.position_x > SCREEN_WIDTH - self.radius:
            self.change_x *= -1

        if self.position_y < self.radius:
            self.change_y *= -1

        if self.position_y > SCREEN_HEIGHT - self.radius:
            self.change_y *= -1


class MyGame(arcade.Window):

    def __init__(self, width, height, title):

        # Call the parent class's init function
        super().__init__(width, height, title)

        # Set the background color
        arcade.set_background_color(arcade.color.ASH_GREY)

                # Attributes to store where our ball is
        self.ball = Ball(50, 50, 3, 3, 20, arcade.color.AUBURN)

    def on_draw(self):
        """ Called whenever we need to draw the window. """
        arcade.start_render()
        self.ball.draw()

    def update(self, delta_time):
        """ Called to update our objects. Happens approximately 60 times per second."""
        self.ball.update()

def main():
    window = MyGame(640, 480, "Drawing Example")

    arcade.run()


main()

Exercicis

  1. Crear una altra bolla, d’un altre color.
    • es crea a init amb self.ball2(paràmetres)
  2. Fer que la bolla es mogui, al codi de MyGame a l’objecte self.ball2
    • fer update
    • fer draw
  3. Crea l’objecte arbre dels exercicis anteriors, fes que surti a la pantalla.
  4. Canvia la velocitat de la bolla nova.
  5. Crear un nou mètode a ball per canviar de color.
  6. Crear una funció de canvi de color aleatori.
  7. S’ha de posar un “colisionador” que detecti quan una bolla toca a una altra.
  8. Cream una classe nova que ens calcularà les colisions.

Solució colisionador.

La funció de colisió ha de retornar si colisionen dos objectes amb un true i un false. Ho calculam mitjançant la fòrmula de distància. La fòrmula:

  • ELS PUNTS A I B SERAN LES BOLLES DEL NOSTRE PROGRAMA, (CENTRE + RADI)
  • PER OBTENIR AQUESTES DADES HO MIRAM DINS LA CLASSE BOLLA:
    • def init(self, position_x, position_y, change_x, change_y, radius, color)
    • Cada objecte Bolla
  • 7.1 Cream la funció colisionador. La funció retrona true quan els objectes colisionen. Aquesta té un petit error de distàncies, a veure si la trobes:
def colisio(self,a,b):
   distancia = math.sqrt(math.pow((a.position_x - b.position_x),2) + math.pow((a.position_y - b.position_y),2))
   #print(distancia)
    if distancia <= (a.radius):
       return True
    else:
       return False
  • 7.2 Per controlar la colisió em de