Animacija žogic

S pomočjo naslednjega GUI programa bomo prikazali uporabo objektno usmerjenega programiranja, ki nam olajša preprosto animacijo velikega števila predmetov. Vmesnik GUI programa je pravokotnik, znotraj katerega se bo odbijalo 100 žogic.

Vsako žogico bomo ustvarili kot primerek razreda Zoga, z metodami tega razreda bomo poskrbeli tudi, da bo vsaka izmed žogic lahko imela različen polmer in različno barvo. Žogice se bodo tudi gibale v različnih smereh.

Izgled GUI vmesnika naj bo podoben spodnjemu modelu.


Izvedi Počisti


  1 # encoding: utf-8
  2 import tkinter as tk
  3 import random
  4 
  5 # Definicija globalnih spremenljivk
  6 SIRINA = 400
  7 VISINA = 300
  8 
  9 # Ustvari okno in platno
 10 okno = tk.Tk()
 11 okno.title("Žogice")
 12 
 13 platno = tk.Canvas(okno, width=SIRINA, height=VISINA)
 14 platno.configure(bg="black")
 15 platno.pack()
 16 
 17 # Definicija razreda 'Zoga' 
 18 class Zoga:
 19 
 20   # Ustvari objekt 'Zoga' s privzeto barvo in velikostjo
 21   def __init__(self, barva="white", premer=30):
 22     self._lik = platno.create_oval(10, 10, premer, premer, \
 23                                    fill=barva)
 24     self._hitrost_x = random.randrange(-10, 10)
 25     self._hitrost_y = random.randrange(-10, 10)
 26 
 27   # Metoda, ki med animacijo premakne objekt
 28   def premakni(self):
 29     platno.move(self._lik, self._hitrost_x, self._hitrost_y)
 30     polozaj = platno.coords(self._lik)
 31     if polozaj[3] >= VISINA or polozaj[1] <= 0:
 32       self._hitrost_y = -self._hitrost_y
 33     if polozaj[2] >= SIRINA or polozaj[0] <= 0:
 34       self._hitrost_x = -self._hitrost_x
 35 
 36 
 37 barve  = ["red", "green", "blue", "yellow", \
 38           "orange", "magenta", "cyan"]
 39 zogice = []
 40 
 41 # Dodaj 100 žogic naključnih velikosti in barv
 42 for i in range(100):
 43   zogice.append(Zoga(random.choice(barve), \
 44                      random.randrange(20, 80)))
 45 
 46 # Določi animacijo
 47 def animacija():
 48   for zogica in zogice:
 49     zogica.premakni()
 50   okno.update()
 51   okno.after(20, animacija)
 52 
 53 # Zaženi dogodkovno zanko
 54 animacija()
 55 okno.mainloop()
 56 

Izvorna koda