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.
L’exemple:
import arcade
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
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()
1. MAIN: LA FUNCIÓ PRINCIPAL
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
Funció dibuixaFons
def draw_grass():
""" Draw the ground """
arcade.draw_lrtb_rectangle_filled(0, SCREEN_WIDTH, SCREEN_HEIGHT / 3, 0, arcade.color.AIR_SUPERIORITY_BLUE)
Funció dibuixaNinot
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”.
- Crea una funció per dibuixar el fons on es pugui pasar el paràmetre de color. Pots consultar els tipus de color de l’API d’arcade: https://api.arcade.academy/en/latest/arcade.csscolor.html i https://api.arcade.academy/en/latest/arcade.color.html.
- Afegeix un paràmetre escala al dibuixa ninot. On 1 es l’escala base.