Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from turtle import *
- from random import randrange
- lista_kolorow = ['DeepSkyBlue2', 'LavenderBlush2', 'NavajoWhite2', 'RosyBrown1', 'bisque', 'black', 'chocolate3', 'cyan', 'dark green', 'deep pink', 'forest green', 'gold', 'green', 'indian red', 'khaki2', 'light sea green', 'magenta3', 'maroon', 'orange', 'orchid', 'pale green', 'plum', 'powder blue', 'red2', 'salmon', 'sandy brown', 'sienna', 'sky blue', 'turquoise2', 'yellow']
- def losowyKolor(lista_kolorow):
- kolor = lista_kolorow[randrange(0, len(lista_kolorow))]
- return kolor
- def tło(d, k, kolor_tła): #Rysowanie tła o zadanych wymiarach i kolorze
- up()
- color(kolor_tła)
- begin_fill()
- down()
- fd(d/2)
- lt(90)
- fd(k)
- lt(90)
- fd(d)
- lt(90)
- fd(k)
- lt(90)
- fd(d/2)
- end_fill()
- def kolidowanie(x, y, lista_krotek): #Sprawdzanie, czy współrzędne nowego kwadratu znajdują się wewnątrz kwadratów wykonanych wcześniej
- ok = True
- if lista_krotek != []:
- i = 0
- while ok and i < len(lista_krotek):
- drugiKwadrat = lista_krotek[i]
- if (drugiKwadrat[0] <= x) and (x <= drugiKwadrat[0] + drugiKwadrat[2]) and (drugiKwadrat[1] <= y) and (y <= drugiKwadrat[1] + drugiKwadrat[2]):
- ok = False #ignorowanie współrzędnych
- else:
- i = i + 1
- return (ok)
- def losowyKwadrat(d, k, lista_krotek, limit): #Losowanie współrzędnych, następnie wrzucanie ich w funkcję czyKoliduje, żeby sprawdzić, czy współrzędne są ok.
- ok = False #Na ich podstawie uruchamiana jest funkcja wyznacz_bok, która zwraca max możliwą długość boku
- while not ok:
- x = randrange(d)
- y = randrange(k)
- ok = kolidowanie(x, y, lista_krotek)
- bok = wyznacz_bok(d, k, x, y, lista_krotek, limit)
- krotka = (x, y, bok) #Funkcja losowyKwadrat zwraca krotkę (współrzędne, długość boku)
- return krotka
- def generujKwadraty(d, k, liczba_kwadratow, limit): #Generowanie nowych kwadratów o wylosowanych współrzędnych, dodawanie krotki z współrzędnymi do listy krotek
- i = 0
- lista_krotek = []
- ileKwadratow = liczba_kwadratow
- while len(lista_krotek) < ileKwadratow:
- nowe = losowyKwadrat(d, k, lista_krotek, limit)
- lista_krotek.append(nowe)
- return lista_krotek
- def wyznacz_bok(d, k, x, y, lista_krotek, limit): #Wyznaczanie długości boku kwadratu, tak, by nie wykraczał poza tło, ani limit, ani nie nachodził na pozostałe kwadraty
- a = min(limit, d-x, k-y)
- for i in lista_krotek:
- x1 = i[0]
- y1 = i[1]
- b = i[2]
- if (x1>x) and (y1>y):
- a = min(a, max(x1-x, y1-y))
- elif (x1>x) and (y1+b>y):
- a = min(a, x1-x)
- elif (x1+b>x) and (y1>y):
- a = min(a, y1-y)
- return(a)
- def rysujKwadrat(nowe): #Funkcja rysująca pojedynczy kwadrat o zadanych współrzędnych
- krotka = losowyKwadrat(d, k, lista_krotek, limit)
- up()
- setx(krotka[0])
- sety(krotka[1])
- color(losowyKolor(lista_kolorow))
- down()
- begin_fill()
- for i in range(4):
- fd(krotka[2])
- lt(90)
- end_fill()
- def rysujKwadraty(wymiary_tła, kolor_tła, liczba_kwadratow, limit):
- d = wymiary_tła[0]
- k = wymiary_tła[1]
- tło(d, k, kolor_tła)
- lista_krotek = generujKwadraty(d, k, liczba_kwadratow, limit)
- for nowe in lista_krotek:
- rysujKwadrat(nowe)
- rysujKwadraty((600, 300), "pink", 15, 30)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement