To delo je na voljo pod pogoji slovenske licence Creative Commons 2.5:
priznanje avtorstva - nekomercialno - deljenje pod enakimi pogoji.
Celotna licenca je na voljo na spletu na naslovu http://creativecommons.org/licenses/by-nc-sa/2.5/si/. V skladu s to licenco je dovoljeno vsakemu uporabniku delo razmnoževati, distribuirati, javno priobčevati, dajati v najem in tudi predelovati, vendar samo v nekomercialne namene in ob pogoju, da navede avtorja oziroma avtorje in izdajatelja tega dela. Če uporabnik delo predela, kar pomeni, da ga spremeni, preoblikuje, prevede ali uporabi to delo v svojem delu, lahko predelavo dela ponudi na voljo le pod pogoji, ki so enaki pogojem iz te licence oziroma pod enako licenco.
import simplegui import random # Definicija globalnih spremenljivk SIRINA = 400 VISINA = 300 # Definicija razreda 'Kvadrat' class Kvadrat: # Ustvari objekt 'Kvadrat' privzete barve in velikosti def __init__(self, barva="white", dolzina=30): self._barva = barva self._d = dolzina self._polozaj = [dolzina+1, dolzina+1] self._hitrost_x = random.randrange(-10, 10) self._hitrost_y = random.randrange(-10, 10) def premakni(self, platno): self._polozaj[0] += self._hitrost_x self._polozaj[1] += self._hitrost_y tocke = [ (self._polozaj[0], self._polozaj[1]), (self._polozaj[0]+self._d, self._polozaj[1]), (self._polozaj[0]+self._d, self._polozaj[1]+self._d), (self._polozaj[0], self._polozaj[1]+self._d) ] platno.draw_polygon(tocke, 1, "black", self._barva) if (self._polozaj[1] >= VISINA-self._d or self._polozaj[1] <= 0): self._hitrost_y = -self._hitrost_y if (self._polozaj[0] >= SIRINA-self._d or self._polozaj[0] <= 0): self._hitrost_x = -self._hitrost_x barve = ["red", "green", "blue", "yellow", \ "orange", "magenta", "cyan"] kvadrati = [] # Dodaj 100 kvadratov naključnih velikosti in barv for i in range(100): kvadrati.append(Kvadrat(random.choice(barve), \ random.randrange(20, 80))) # Določi rokovalnik animacije def draw(platno): for kvadrat in kvadrati: kvadrat.premakni(platno) # Ustvari okvir in ga poveži s rokovalnikom animacije okvir = simplegui.create_frame("Kvadrati", SIRINA, VISINA) okvir.set_draw_handler(draw) # Zaženi animacijo okvirja okvir.start()
# encoding: utf-8 import tkinter as tk import random # Definicija globalnih spremenljivk SIRINA = 400 VISINA = 300 # Ustvari okno in platno okno = tk.Tk() okno.title("Kvadrati") platno = tk.Canvas(okno, width=SIRINA, height=VISINA) platno.configure(bg="black") platno.pack() # Definicija razreda 'Kvadrat' class Kvadrat: # Ustvari objekt 'Kvadrat' s privzeto barvo in dolžino def __init__(self, barva="white", d=30): self._oblika = platno.create_rectangle(10, 10, d, d, \ fill=barva) self._hitrost_x = random.randrange(-10, 10) self._hitrost_y = random.randrange(-10, 10) # Metoda, ki med animacijo premakne objekt def premakni(self): platno.move(self._oblika, self._hitrost_x, self._hitrost_y) polozaj = platno.coords(self._oblika) if polozaj[3] >= VISINA or polozaj[1] <= 0: self._hitrost_y = -self._hitrost_y if polozaj[2] >= SIRINA or polozaj[0] <= 0: self._hitrost_x = -self._hitrost_x barve = ["red", "green", "blue", "yellow", \ "orange", "magenta", "cyan"] kvadrati = [] # Dodaj 100 kvadratov naključnih velikosti in barv for i in range(100): kvadrati.append(Kvadrat(random.choice(barve), \ random.randrange(20, 80))) # Določi animacijo def animacija(): for kvadrat in kvadrati: kvadrat.premakni() okno.update() okno.after(20, animacija) # Zaženi dogodkovno zanko animacija() okno.mainloop()
import simplegui import random # Definicija globalnih spremenljivk SIRINA = 400 VISINA = 300 kvadrati = [] stevilo = 0 # Definicija razreda 'Kvadrat' class Kvadrat: # Ustvari objekt 'Kvadrat' privzete barve in velikosti def __init__(self, barva="white", dolzina=30): self._barva = barva self._d = dolzina self._polozaj = [dolzina+1, dolzina+1] self._hitrost_x = random.randrange(-10, 10) self._hitrost_y = random.randrange(-10, 10) def premakni(self, platno): self._polozaj[0] += self._hitrost_x self._polozaj[1] += self._hitrost_y tocke = [ (self._polozaj[0], self._polozaj[1]), (self._polozaj[0]+self._d, self._polozaj[1]), (self._polozaj[0]+self._d, self._polozaj[1]+self._d), (self._polozaj[0], self._polozaj[1]+self._d) ] platno.draw_polygon(tocke, 1, "black", self._barva) if (self._polozaj[1] >= VISINA-self._d or self._polozaj[1] <= 0): self._hitrost_y = -self._hitrost_y if (self._polozaj[0] >= SIRINA-self._d or self._polozaj[0] <= 0): self._hitrost_x = -self._hitrost_x barve = ["red", "green", "blue", "yellow", \ "orange", "magenta", "cyan"] # Določi rokovalnik animacije def draw(platno): global kvadrati for kvadrat in kvadrati: kvadrat.premakni(platno) # Določi rokovalnik vnosa def vnos(vrednost="100"): global kvadrati, stevilo kvadrati = [] # Dodaj kvadrate naključnih velikosti in barv if vrednost.isdigit(): stevilo = int(vrednost) for i in range(stevilo): kvadrati.append(Kvadrat(random.choice(barve), \ random.randrange(20, 80))) # Ustvari okvir in ga poveži s rokovalnikom animacije okvir = simplegui.create_frame("Kvadrati", SIRINA, VISINA) okvir.set_draw_handler(draw) # Ustvari vnosno polje in ga poveži s rokovalnikom okvir.add_input("Vnesi število kvadratov", vnos, 100) # Zaženi animacijo okvirja vnos() okvir.start()
# encoding: utf-8 import tkinter as tk import random # Definicija globalnih spremenljivk SIRINA = 400 VISINA = 300 # Ustvari okno in platno okno = tk.Tk() okno.title("Kvadrati") okno.geometry("660x350") okvir = tk.Frame(okno) okvir.grid(row=0, column=0, pady=20) platno = tk.Canvas(okno, width=SIRINA, height=VISINA) platno.configure(bg="black") platno.grid(row=0, column=1, pady=20) # Poveži funkcije z dogodkovnimi rokovalniki opis = tk.Label(okvir, text="Vnesi število kvadratov") opis.configure(width=20) opis.grid(row=0, column=0, padx=45) vnos = tk.Entry(okvir, width=10) vnos.grid(row=1, column=0, padx=45) vnos.bind('', (lambda _: rokovalnik(vnos))) # Definicija razreda 'Kvadrat' class Kvadrat: # Ustvari objekt 'Kvadrat' s privzeto barvo in dolžino def __init__(self, barva="white", d=30): self._oblika = platno.create_rectangle(10, 10, d, d, \ fill=barva) self._hitrost_x = random.randrange(-10, 10) self._hitrost_y = random.randrange(-10, 10) # Metoda, ki med animacijo premakne objekt def premakni(self): platno.move(self._oblika, self._hitrost_x, self._hitrost_y) polozaj = platno.coords(self._oblika) if polozaj[3] >= VISINA or polozaj[1] <= 0: self._hitrost_y = -self._hitrost_y if polozaj[2] >= SIRINA or polozaj[0] <= 0: self._hitrost_x = -self._hitrost_x barve = ["red", "green", "blue", "yellow", \ "orange", "magenta", "cyan"] kvadrati = [] # Dodaj 100 kvadratov naključnih velikosti in barv for i in range(100): kvadrati.append(Kvadrat(random.choice(barve), \ random.randrange(20, 80))) # Določi rokovalnik vnosa def rokovalnik(vnos): global kvadrati # Izbriši vsebino platna platno.delete("all") kvadrati = [] # Dodaj kvadrate naključnih velikosti in stevilo = 100 vrednost = vnos.get() if vrednost.isdigit(): stevilo = int(vrednost) for i in range(stevilo): kvadrati.append(Kvadrat(random.choice(barve), \ random.randrange(20, 80))) # Določi animacijo def animacija(): for kvadrat in kvadrati: kvadrat.premakni() okno.update() okno.after(20, animacija) # Zaženi dogodkovno zanko animacija() okno.mainloop()
4
Program, ki animira 100 žogic spremeni tako, da bo namesto žogic animiral kvadrate. Izgled GUI vmesnika programa naj bo podoben modelu v naslednji nalogi, vendar brez vnosnega polja.
5
Program iz prejšnje naloge spremeni tako, da dodaš vnosno polje, v katerega lahko uporabnik vnese število kvadratov, ki jih bo program animiral.
Izgled GUI vmesnika programa naj bo podoben spodnjemu modelu.