Advertisement
Guest User

edit4

a guest
May 3rd, 2016
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.59 KB | None | 0 0
  1. from turtle import *
  2. from random import randrange
  3.  
  4. 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']
  5.  
  6. def losowyKolor(lista_kolorow):
  7.     kolor = lista_kolorow[randrange(0, len(lista_kolorow))]
  8.     return kolor
  9.  
  10. def tło(d, k, kolor_tła):       #Rysowanie tła o zadanych wymiarach i kolorze
  11.     up()
  12.     color(kolor_tła)
  13.     begin_fill()
  14.     down()
  15.     fd(d/2)
  16.     lt(90)
  17.     fd(k)
  18.     lt(90)
  19.     fd(d)
  20.     lt(90)
  21.     fd(k)
  22.     lt(90)
  23.     fd(d/2)
  24.     end_fill()
  25.  
  26. def kolidowanie(x, y, lista_krotek):            #Sprawdzanie, czy współrzędne nowego kwadratu znajdują się wewnątrz kwadratów wykonanych wcześniej
  27.     ok = True
  28.     if lista_krotek != []:
  29.         i = 0
  30.         while ok and i < len(lista_krotek):
  31.             drugiKwadrat = lista_krotek[i]
  32.             if (drugiKwadrat[0] <= x) and (x <= drugiKwadrat[0] + drugiKwadrat[2]) and (drugiKwadrat[1] <= y) and (y <= drugiKwadrat[1] + drugiKwadrat[2]):
  33.                 ok = False #ignorowanie współrzędnych
  34.             else:
  35.                 i = i + 1
  36.     return (ok)
  37.  
  38. 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.
  39.     ok = False                                  #Na ich podstawie uruchamiana jest funkcja wyznacz_bok, która zwraca max możliwą długość boku
  40.     while not ok:
  41.         x = randrange(d)
  42.         y = randrange(k)
  43.         ok = kolidowanie(x, y, lista_krotek)
  44.         bok = wyznacz_bok(d, k, x, y, lista_krotek, limit)
  45.         krotka = (x, y, bok)                        #Funkcja losowyKwadrat zwraca krotkę (współrzędne, długość boku)
  46.     return krotka
  47.  
  48. 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
  49.     i = 0
  50.     lista_krotek = []
  51.     ileKwadratow = liczba_kwadratow
  52.     while len(lista_krotek) < ileKwadratow:
  53.         nowe = losowyKwadrat(d, k, lista_krotek, limit)
  54.         lista_krotek.append(nowe)
  55.     return lista_krotek
  56.  
  57. 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
  58.     a = min(limit, d-x, k-y)
  59.     for i in lista_krotek:
  60.         x1 = i[0]
  61.         y1 = i[1]
  62.         b = i[2]
  63.         if (x1>x) and (y1>y):
  64.             a = min(a, max(x1-x, y1-y))
  65.         elif (x1>x) and (y1+b>y):
  66.             a = min(a, x1-x)
  67.         elif (x1+b>x) and (y1>y):
  68.             a = min(a, y1-y)
  69.     return(a)
  70.  
  71. def rysujKwadrat(nowe):                      #Funkcja rysująca pojedynczy kwadrat o zadanych współrzędnych
  72.     krotka = losowyKwadrat(d, k, lista_krotek, limit)
  73.     up()
  74.     setx(krotka[0])
  75.     sety(krotka[1])
  76.     color(losowyKolor(lista_kolorow))
  77.     down()
  78.     begin_fill()
  79.     for i in range(4):
  80.         fd(krotka[2])
  81.         lt(90)
  82.     end_fill()
  83.  
  84. def rysujKwadraty(wymiary_tła, kolor_tła, liczba_kwadratow, limit):
  85.     d = wymiary_tła[0]
  86.     k = wymiary_tła[1]
  87.     tło(d, k, kolor_tła)
  88.     lista_krotek = generujKwadraty(d, k, liczba_kwadratow, limit)
  89.     for nowe in lista_krotek:
  90.         rysujKwadrat(nowe)
  91.        
  92. rysujKwadraty((600, 300), "pink", 15, 30)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement