#Maehroboter #-> Aufgabenstellung # -beliebige Startposition auf einer leeren, rechteckigen Rasenflaeche # -vorgegebene Fahrgeschwindigkeit # -zufaellige Richtungsaenderung nach Zusammenstoss mit einem Hindernis # -Rasenteile werden als gemaeht gekennzeichnet, wenn sie befahren wurden # -Maehprozess mit Tkinter visualisieren # -Ende des Maehrvorgangs: 95% Maeherfolg #Fach:Programmieren2 #Dozent: Prof. Chmielewski #Studiengang: BMT'17 #Teilnehmer: Linda Napieralski (4066139) # Andre Giesbrecht (4066107) # Alexa Tschernitschek (4066220) #Modul importieren import Tkinter as tk import time import sys import tkMessageBox #Allgemeine Klasse und Funktionen ohne genauen Variablen class Roboter(object): # allg. Festlegung Klassenvariablen innerhalb Programm, self--> einfacher Zugriff auf Variablen, individuelle Eigenschaften s.u. def __init__(self, Hauptfenster, canvas, BREITE, HOEHE, Roboter_width, Farbe, Geschwindigkeit, start_x, start_y, tag): self.width = BREITE # Einfuegen Hauptfensterbreite in Klasse self.height = HOEHE # Einfuegen Hauptfensterhoehe in Klasse self.canvas = canvas self.Geschwindigkeit = Geschwindigkeit self.Richtung_x = 0.5 # Laufweite in x_Richtung self.Richtung_y = 0.5 # Laufweite in y_Richtung self.tag = tag # Roboter als Namensschild, Erkennung fuer das Programm #Roboterbezeichnung allgemein erstellen self.canvas.create_oval(start_x, start_y, start_x + Roboter_width, start_y + Roboter_width, fill=Farbe, tag=tag) #Funktion "Fahren" des Roboters def maehen(self): #mit Zugriff auf die allg. Klassenvariablen, s.o. #Startposition Roboter start_x = 30 start_y = 10 self.canvas.move(self.tag, self.Richtung_x, self.Richtung_y) #Bewegung Roboter in x/y-Richtung position = self.canvas.coords(self.tag) #Koordinaten der Roboterpositionen if position[0] == 0: self.Richtung_x = 0.5 #fahre weiter Richtung x_Achse, (=Ausgangskoord.+0.5) if position[1] == 0: self.Richtung_y = 0.5 #fahr weiter Richtung y_Achse, (=Ausgangskoord.+0.5) if position[2] == self.width: self.Richtung_x = -0.5 #bei Kollision (seitliche Wand) drehe um (90 Grad) if position[3] == self.height: self.Richtung_y = -0.5 #bei Kollision (obere/untere Wand) drehe um (90 Grad) self.canvas.after(self.Geschwindigkeit, self.maehen) x0= position[0] #Roboterpositionen waehrend Bewegung, Zwischenspeicherung fuer Darst. Maehweg und Abbruch y0= position[1] x1= position[2] y1= position[3] self.canvas.create_oval(x0, y0,x1, y1, fill="#FF0000") #Markierung des Maehweges mit Neuzeichnung des Roboters, Farbe rot #Ende des Maehvorgangs bei Erreichen der Startpositionen if (start_x==x0) and (start_y==y0): self.Geschwindigkeit = 9999999 #Wartezeit an Endposition bis Maeh-Vorgang erneut startet, entspricht Pause des Maehvorgangs tkMessageBox.showinfo(title="Hinweis", message="Der Rasen wurde gemaeht!") #bei Ende: Oeffnung eines Hinweisfensters fuer Benutzer sys.exit() #gleichzeitiges Schliessen des Programms bei Anklicken der Messagebox #Ausfuehrungen der Teilfunktion def Hauptfunktion(): global Start_Button global Roboter Start_Button.destroy() #Startbutton verschwindet nach Klick Roboter.maehen() #Funktion "Maehen" aufrufen Hauptfenster.mainloop() #Haupfenster aufrufen #Messung Dauer des Maehvorgangs start_zeit = time.time() #Groesse des Hauptfensters BREITE= 600 #Hauptfensterbreite HOEHE = 400 #Hauptfensterhoehe #Aufrufen der Hauptfunktionen Hauptfenster=tk.Tk() Hauptfenster.title("Maehroboter") #Hauptfenster erstellen mit Titel Garten = tk.Canvas(Hauptfenster, bg='green', width=BREITE, height=HOEHE) #Erstellung gruene Rasenflaeche, vollstaendig ausgefuelltes Hauptfenster Garten.pack() Roboter = Roboter(Hauptfenster, Garten, BREITE, HOEHE,50 , "Red", 1,30, 10,"Roboter") #Erzeugung individueller Roboter: Durchmesser 50, Farbe rot, Geschwindigkeit 1, Startposition (30/10), Name:Roboter Start_Button = tk.Button(Hauptfenster,bg ="white", text= "Willkommen zum Rasenmaehen, unser roter 'Rob' maeht selbststaendig Ihren Garten ", width=100, height=10,command = Hauptfunktion) Start_Button.pack() Hauptfenster.mainloop() #Aufrufen Fenster #Endzeit end_zeit=time.time() #Messung Endzeit mit Ausgabe, am Ende des Programms, in Sekunden print "Die Maehdauer betraegt:" print ("%.1f seconds" %(end_zeit - start_zeit))