rric

Grafik_bis_zum_Abendrot

Nov 17th, 2023 (edited)
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.02 KB | None | 0 0
  1. # Sonnenuntergang in Anlehnung an "Carla's Island",           [Mu: Pygame Zero]
  2. # eine bahnbrechende Computeranimation von Nelson Max (1981),
  3. # siehe z.B. https://archive.org/details/CarlasIsland
  4. # Copyright 2021--2023 Roland Richter
  5.  
  6. from pgzhelper import *
  7.  
  8. # Fenstergröße 800 x 500
  9. TITLE = "Grafik bis zum Abendrot"
  10. WIDTH = 800
  11. HEIGHT = 500
  12.  
  13. # Bilder stammen von https://kenney.nl/assets/planets
  14. planet = Actor("kenney_planets/planets/planet08.png")
  15. planet.pos = (WIDTH-40, 0)
  16. # Setze die Größe des Actors auf 10 % der Originalgröße
  17. planet.scale = 0.1
  18.  
  19. frame_count = 0
  20. total_time = 0.0
  21. delta_times = []
  22.  
  23. light_sky_blue = (135, 206, 235)
  24. warm_black = (0, 66, 66)
  25.  
  26. def lerp_color(beg_clr, end_clr, factor):
  27.     return (round((1.-factor) * beg_clr[0] + factor * end_clr[0]),
  28.             round((1.-factor) * beg_clr[1] + factor * end_clr[1]),
  29.             round((1.-factor) * beg_clr[2] + factor * end_clr[2]))
  30.  
  31. def draw():
  32.     # Zähle die Anzahl der gezeichneten frames mit
  33.     global total_time, frame_count
  34.     frame_count += 1
  35.  
  36.     # Setze den Hintergrund auf eine "interpolierte Farbe"
  37.     if frame_count < 200:
  38.         factor = 0.0
  39.     elif frame_count < 400:
  40.         factor = ((frame_count-200) / 200.)
  41.     else:
  42.         factor = 1.0
  43.  
  44.     bg_color = lerp_color(light_sky_blue, warm_black, factor)
  45.     screen.fill(bg_color)
  46.  
  47.     # Zeichne eine Insel in "La Salle Green"
  48.     screen.draw.filled_circle((0.5*WIDTH, HEIGHT), 0.3*HEIGHT, "#087830")
  49.  
  50.     # Male das Meer quer über den unteren Teil des Fensters in "Dark cerulean"
  51.     screen.draw.filled_rect(Rect((0, 0.8*HEIGHT), (WIDTH, HEIGHT)), "#08457E")
  52.  
  53.     # Male eine weiße Wolke ...
  54.     screen.draw.filled_circle((0.75*WIDTH, 0.30*HEIGHT), 42, "white")
  55.     screen.draw.filled_circle((0.72*WIDTH, 0.31*HEIGHT), 42, "white")
  56.     screen.draw.filled_circle((0.77*WIDTH, 0.28*HEIGHT), 42, "white")
  57.     screen.draw.filled_circle((0.79*WIDTH, 0.32*HEIGHT), 42, "white")
  58.  
  59.     # Male einen Leuchtturm ...
  60.     screen.draw.filled_rect(Rect((0.4*WIDTH, 0.6*HEIGHT), (20, 80)), "#F0EAD6")
  61.  
  62.     # ... mit einem Blinklicht, dessen Farbe zwischen rot und schwarz hin-
  63.     # und herspringt.
  64.     if frame_count % 120 < 20:
  65.         screen.draw.filled_circle((0.4*WIDTH+10, 0.6*HEIGHT), 10, "red")
  66.     else:
  67.         screen.draw.filled_circle((0.4*WIDTH+10, 0.6*HEIGHT), 10, "black")
  68.  
  69.     # Schreibe Informationen in die linke obere Ecke
  70.     avg_delta = sum(delta_times) / len(delta_times)
  71.     frame_rate = 1.0 / avg_delta
  72.     info = "frame " + str(frame_count) + " (" + "{:.2f}".format(frame_rate) + " fps)"
  73.     screen.draw.text(info, (10, 10), color="white", fontsize=24)
  74.  
  75.     # Zeichne den Planeten
  76.     planet.draw()
  77.  
  78.     # Hoppla! Der Planet sollte doch hinter dem Meer und der Wolke verschwinden.
  79.     # PROBIERE, den Planeten so zu zeichnen, dass er hinter dem Meer und hinter
  80.     # der Wolke verschwindet.
  81.  
  82.  
  83. def update(delta_time):
  84.     # delta_time ist die Zeit in Sekunden, die seit dem letzten Aufruf vergangen sind:
  85.     # https://pygame-zero.readthedocs.io/en/stable/hooks.html?highlight=update()#update
  86.     global total_time, delta_times
  87.     total_time += delta_time
  88.  
  89.     delta_times.append(delta_time)
  90.     if len(delta_times) > 10:
  91.         delta_times.pop(0)
  92.  
  93.     # Bewege den Planeten nach links unten
  94.     planet.x -= 2
  95.     planet.y += 1
  96.  
  97.  
  98. # ----------------------------------------------------------------------
  99. # This program is free software: you can redistribute it and/or modify
  100. # it under the terms of the GNU General Public License as published by
  101. # the Free Software Foundation, either version 3 of the License, or
  102. # (at your option) any later version.
  103. #
  104. # This program is distributed in the hope that it will be useful,
  105. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  106. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  107. # GNU General Public License for more details.
  108. #
  109. # You should have received a copy of the GNU General Public License
  110. # along with this program.  If not, see <https://www.gnu.org/licenses/>.
  111.  
Add Comment
Please, Sign In to add comment