Example #1
0
    def perform_move(self):

        # ruch owiec
        self.sheep_list_object.sheep_move()

        # obliczenie indeksu najblizszej owcy i wartosci tej odleglosci
        index_of_sheep_with_nearest_distance, nearest_distance \
            = self.sheep_list_object.find_nearest_distance(self.wolf)

        # ruch wilkiem (zmiana wspolrzednych na liscie)
        self.wolf.wolf_move(index_of_sheep_with_nearest_distance,
                            nearest_distance, self.sheep_list_gui,
                            self.points_list_gui, self.wolf, self.meadow)
        # ruch wilkiem na lace (narysowanie kropki w innym miejscu)
        self.meadow.delete(self.drawn_wolf)

        # rysowanie owiec po ruchu
        self.sheep_list_object.sheep_draw_all(self.meadow, self.scale_variable)

        # rysowanie wilka po ruchu owiec
        self.drawn_wolf = draw_wolf(self.meadow, self.wolf.x, self.wolf.y,
                                    self.wolf.wolf_color, self.scale_variable)

        # aktualizacja do etykiety wyswietlajacej zywe owce
        self.variable_sheep_number.set(
            str(self.sheep_list_object.count_alive_sheeps()))
Example #2
0
    def zooming(self, event):
        # metoda do zoomowania (wzgledem srodka)
        # przyblizanie
        if float(event) > float(self.default_value):
            print(self.meadow.winfo_id())
            while float(event) > float(self.default_value):
                # self.meadow.scale("all", self.meadow.winfo_width() / 2, self.meadow.winfo_height() / 2,
                #                   1.25, 1.25)
                for point in self.points_list_gui:
                    self.meadow.delete(point)

                # pętla, w której ponownie rysujemy owce
                for sheep in self.sheep_list_gui:
                    if sheep.status == 'alive':
                        point = draw_sheep(self.meadow, sheep.x, sheep.y,
                                           sheep.sheep_color,
                                           self.scale_variable)
                        self.sheep_list_object.point_add(point)

                self.meadow.delete(self.drawn_wolf)
                self.drawn_wolf = draw_wolf(self.meadow, self.wolf.x,
                                            self.wolf.y, self.wolf.wolf_color,
                                            self.scale_variable)
                self.default_value = self.default_value + 1.0
        # oddalanie
        elif float(event) < float(self.default_value):
            while float(event) < float(self.default_value):
                # self.meadow.scale("all", self.meadow.winfo_width() / 2, self.meadow.winfo_height() / 2,
                #                   0.8, 0.8)
                for point in self.points_list_gui:
                    self.meadow.delete(point)

                    # pętla, w której ponownie rysujemy owce
                for sheep in self.sheep_list_gui:
                    if sheep.status == 'alive':
                        point = draw_sheep(self.meadow, sheep.x, sheep.y,
                                           sheep.sheep_color,
                                           self.scale_variable)
                        self.sheep_list_object.point_add(point)

                self.meadow.delete(self.drawn_wolf)
                self.drawn_wolf = draw_wolf(self.meadow, self.wolf.x,
                                            self.wolf.y, self.wolf.wolf_color,
                                            self.scale_variable)
                self.default_value = self.default_value - 1.0

        self.default_value = float(event)
Example #3
0
 def move_wolf(self, event):
     x1, y1 = event.x, event.y
     # usuwany jest istniejacy wilk
     self.meadow.delete(self.drawn_wolf)
     # i rysowany nowy na podstawie wspolrzednych pobranych z klikniecia uzytkownika
     self.drawn_wolf = draw_wolf(self.meadow, x1, y1, self.wolf.wolf_color,
                                 self.scale_variable)
     # zmiana wartosci wspolrzednych wilka w logice aplikacji
     self.wolf.x = x1
     self.wolf.y = y1
Example #4
0
def import_from_json(f, meadow, scale, sheep_list_sheeps, points_list):
    meadow.delete("all")
    sheep_list_sheeps.clear()
    points_list.clear()
    scale.set(0)

    # zapis danych z pliku do zmiennej
    with open(f) as json_file:
        data = json.load(json_file)

        # zapis poszczegolnych fragmentow do zmiennych
        bg_color = data['bg_color']
        wolf_color = data['wolf_color']
        wolf_pos = data['wolf_pos']
        sheep_color = data['sheep_color']
        sheep_pos = data['sheep_pos']

        # podzial zmiennej wolf_pos na liste z wspolrzednymi wilka
        wolf_after = wolf_pos.split(',')
        wolf_x = wolf_after[0]
        wolf_y = wolf_after[1]

        # przypisanie wszystkich atrybutow do wilka
        wolf = Wolf()
        wolf.x = float(wolf_x)
        wolf.y = float(wolf_y)
        wolf.wolf_color = wolf_color
        drawn_wolf = draw_wolf(meadow, wolf.x, wolf.y, wolf.wolf_color, scale)

        # ilosc owiec zapisanych w pliku
        length = len(sheep_pos)

        # stworzenie listy owiec, do ktorej zapisze sie dane z pliku
        sheep_list_sheeps = SheepList()

        for i in range(0, length):
            # dzielimy kazdy element listy na mniejsza tablice, ktorej pierwszy element to x, a drugi to y
            pom = sheep_pos[i].split(',')
            # konwertujemy elementy tablicy na float
            x = float(pom[0])
            y = float(pom[1])
            # dodajemy owce o wspolrzednych z pliku do stworzonej listy
            sheep_list_sheeps.sheep_add(Sheep(i, x, y))
            # rysujemy te owce na lace
            point = draw_sheep(meadow, x, y, sheep_color, scale)
            # dodajemy narysowane punkty do listy
            sheep_list_sheeps.point_add(point)

        # każdej owcy z listy ustawiamy kolor wczytany z pliku
        for sheep in sheep_list_sheeps.sheep_list:
            sheep.sheep_color = sheep_color

        # zwracamy te elementy, ktore sa istotne przy kolejnych krokach symulacji
        return sheep_color, wolf, drawn_wolf, bg_color
Example #5
0
 def reset(self):
     # usuniecie wszytskich owiec z listy
     self.sheep_list_gui.clear()
     # usuniecie wszytkich punktow z listy
     self.points_list_gui.clear()
     # czyszczenie laki ze wszystkich elementow
     self.meadow.delete("all")
     # ustawienie wilka na srodku
     self.drawn_wolf = draw_wolf(self.meadow, 145, 145,
                                 self.wolf.wolf_color, self.scale_variable)
     # ustawienie ponownie wspolrzednych wilka na srodek laki
     self.wolf.x = 145
     self.wolf.y = 145
     # ustawienie liczby zywych owiec na zero
     self.variable_sheep_number.set("0")
Example #6
0
    def __init__(self):
        # tworzenie okna:
        self.window = Tk()
        self.window.title("Python 3 Simulation")
        self.window.geometry('500x420')
        self.window.resizable(False, False)
        self.window.configure(background="grey")

        # atrybuty instancyjne:

        # zmienna z kolorem tła:
        self.bg_color = "chartreuse2"

        self.init_pos_limit = 200.0

        # tworzymy obszar, ktory bedzie łaką (meadow)
        self.meadow = Canvas(self.window,
                             bg=self.bg_color,
                             height=1.5 * self.init_pos_limit,
                             width=1.5 * self.init_pos_limit)

        # suwak do przyblizania / oddalania
        self.scale_variable = DoubleVar()
        self.scale = Scale(self.window,
                           variable=self.scale_variable,
                           command=self.zooming,
                           activebackground="green",
                           bg="white",
                           from_=0,
                           to=5,
                           label="ZOOM")

        # wartosc domyslna dla suwaka
        self.default_value = 0
        # ustawiamy na początku na 0
        self.scale.set(self.default_value)

        # tworzymy wilka na start na srodku laki
        self.wolf = Wolf()
        self.drawn_wolf = draw_wolf(self.meadow, 145, 145,
                                    self.wolf.wolf_color, self.scale_variable)

        # owca, ktora nie jest pokazywana na lace
        self.sheep = Sheep(0, 100, 100)
        self.sheep_color = "light blue"

        # utworzenie obiektu lista owiec
        self.sheep_list_object = sheepsList.SheepList()
        self.sheep_list_gui = self.sheep_list_object.sheep_list
        self.points_list_gui = self.sheep_list_object.points_list

        # etykieta z liczba zywych owiec i zmienna do zmiany wartosci
        self.variable_sheep_number = StringVar()
        self.variable_sheep_number.set("0")
        self.label_how_many_sheep = Label(
            self.window,
            textvariable=self.variable_sheep_number,
            bg="grey",
            font="calibri 20 bold")

        # menu
        self.menu_bar = Menu(self.window)

        # przycisk step
        self.step = Button(self.window,
                           text="STEP",
                           height=2,
                           width=15,
                           justify=CENTER,
                           bg="white",
                           font="calibri 10 bold",
                           command=self.step)

        # przycisk Reset
        self.reset = Button(self.window,
                            text="RESET",
                            height=2,
                            width=15,
                            justify=CENTER,
                            bg="white",
                            font="calibri 10 bold",
                            command=self.reset)

        # przycisk start/stop
        self.var = StringVar()
        self.var.set("START")
        self.start_stop = Button(self.window,
                                 textvariable=self.var,
                                 height=2,
                                 width=15,
                                 justify=CENTER,
                                 bg="white",
                                 font="calibri 10 bold",
                                 command=self.start_stop_click)

        # zmienna dla czasu pojedynczego ruchu
        self.interval = 1.0

        # flaga do tego czy ruch ma trwać
        self.perform_flag = False