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:
Concepte
Descripció
1
Feu un esquema i indiqueu el nom dels elements que podeu trobar en un sistema de correu electrònic.
2
Definiu el correu segur, expliqueu-ne breument les propietats.
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. 3.2. 3.3.
4
Quina relació hi ha entre el correu segur, la privadesa de l’usuari i la signatura electrònica?
5
Expliqueu la diferència entre el correu paper (tradicional), el correu electrònic i el correu segur.
SOLUCIÓ:
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).
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 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ó
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àtica
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.
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.
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?
Un algoritme és una seqüènciad’intruccions, variables i condicionals lògics que resolen un problema.
A programació s’anomena funció, i té un nom, pot tenir valors d’entrada que s’anomenen paràmetresi retorna un valor de sortida.
Una funció s’ha d’invocar o cridar desde un punt del “programa”.
Una funció o algoritme pot cridar altres funcions. També es pot cridar a ella mateixa, és el que s’anomena funció recursiva.
La implementació de un algoritme és pasar la idea del disseny a un llenguatge de programació.
3. Elements d’un algoritme
Per aconseguir dissenyar i implementar un algoritme s’usen els següents elements:
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.
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, …).
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.
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àtica
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.
Cada dia presentam al professor les tasques (en 3 minuts)
Treballam, pensam, comentam,… la idea.
Realitzam el disseny.
Feim la implementació.
Preparam la presentació.
Idea, ha de de tenir:
Un nou objecte que hereta de la classe bolla. S’ha de modificar un mètode.
Una estructura tipus llistat per contenir els objectes del programa.
Un control de esdeveniments.
Disseny formal de la pantalla
Disseny:
Sobre un paper dibuixam la distribució dels objectes i explicam breument el seu comportament.
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.
Implementació:
Es realitzen els canvis de codi sobre el programa actual
Cada canvi s’ha de comprovar, s’han de fer especificacions de proves.
Presentació:
Es preparen els punts anteriors en forma de document.
Es destaquen els aspectes més importants en un document de presentacions
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
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()
extret de https://learn.arcade.academy/en/latest/chapters/09_drawing_with_functions/drawing_with_functions.html
A la secció anterior hem après a dibuixar amb la llibreria python. Instrucció rera instrucció. En aquesta i als pròxims temes ens dedicarem a reduïr i aclarir codi.
Amb el codi d’exemple farem tres tasques: 1. MAIN: Crear l’estructura principal de programa. 2. FUNCIONS: Millorar la lectura del codi. 3. PROGRAMA: control i crida de funcions. 4. EXERCICIS.
Per tenir el programa ordenat s’usa la funció Main que conté la gestió d’esdeveniments i el control lògic del programa. Desprès compondrem el codi per aconseguir que el main sols invoqui funcions.
import arcade
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
def main():
arcade.open_window(SCREEN_WIDTH, SCREEN_HEIGHT, "Drawing with Functions")
arcade.set_background_color(arcade.color.DARK_BLUE)
arcade.start_render()
# Draw the ground
arcade.draw_lrtb_rectangle_filled(0, SCREEN_WIDTH, SCREEN_HEIGHT / 3, 0, arcade.color.AIR_SUPERIORITY_BLUE)
# Draw a snow person
# Snow
arcade.draw_circle_filled(300, 200, 60, arcade.color.WHITE)
arcade.draw_circle_filled(300, 280, 50, arcade.color.WHITE)
arcade.draw_circle_filled(300, 340, 40, arcade.color.WHITE)
# Eyes
arcade.draw_circle_filled(285, 350, 5, arcade.color.BLACK)
arcade.draw_circle_filled(315, 350, 5, arcade.color.BLACK)
# Finish and run
arcade.finish_render()
arcade.run()
# Call the main function to get the program started.
main()
2. FUNCIONS
Per crear funcions (o objectes) a un programa seleccionarem les parts que fan alguna cosa concreta.
Una funció fa una tasca que sol ser repetitiva, té un nom que l’anomena i uns paràmetres on fa els càlculs. Per exemple podem fer una funció per a cada forma existent al dibuix, així tendrem el fons, el ninot, arbre, …
La funció main serà l’encarregada de invocar tots els elements que formaran la imatge
def draw_snow_person(x, y):
""" Draw a snow person """
# Draw a point at x, y for reference
arcade.draw_point(x, y, arcade.color.RED, 5)
# Snow
arcade.draw_circle_filled(x, 60 + y, 60, arcade.color.WHITE)
arcade.draw_circle_filled(x, 140 + y, 50, arcade.color.WHITE)
arcade.draw_circle_filled(x, 200 + y, 40, arcade.color.WHITE)
# Eyes
arcade.draw_circle_filled(x - 15, 210 + y, 5, arcade.color.BLACK)
arcade.draw_circle_filled(x + 15, 210 + y, 5, arcade.color.BLACK)
Funció dibuixaArbre
De l’exercici anterior
Funció main
def main():
arcade.open_window(SCREEN_WIDTH, SCREEN_HEIGHT, "Drawing with Functions")
arcade.set_background_color(arcade.color.DARK_BLUE)
arcade.start_render()
draw_grass()
draw_snow_person(150, 140)
draw_snow_person(450, 180)
# Finish and run
arcade.finish_render()
arcade.run()
3. PROGRAMA. CODI SENCER
import arcade
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
def draw_grass():
""" Draw the ground """
arcade.draw_lrtb_rectangle_filled(0, SCREEN_WIDTH, SCREEN_HEIGHT / 3, 0, arcade.color.AIR_SUPERIORITY_BLUE)
def draw_snow_person(x, y):
""" Draw a snow person """
# Draw a point at x, y for reference
arcade.draw_point(x, y, arcade.color.RED, 5)
# Snow
arcade.draw_circle_filled(x, 60 + y, 60, arcade.color.WHITE)
arcade.draw_circle_filled(x, 140 + y, 50, arcade.color.WHITE)
arcade.draw_circle_filled(x, 200 + y, 40, arcade.color.WHITE)
# Eyes
arcade.draw_circle_filled(x - 15, 210 + y, 5, arcade.color.BLACK)
arcade.draw_circle_filled(x + 15, 210 + y, 5, arcade.color.BLACK)
def main():
arcade.open_window(SCREEN_WIDTH, SCREEN_HEIGHT, "Drawing with Functions")
arcade.set_background_color(arcade.color.DARK_BLUE)
arcade.start_render()
draw_grass()
draw_snow_person(150, 140)
draw_snow_person(450, 180)
# Finish and run
arcade.finish_render()
arcade.run()
# Call the main function to get the program started.
main()
4. EXERCICIS
Treballa sobre el darrer codi.
Fes que desde main es dibuixin 6 ninots en posicions aleatories.
Fes que desde main es dibuixin 6 arbres en posicions aleatories i mida “estudiada”.