123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- #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 turtle
- import time
- import sys
- import tkMessageBox
- #Groesse des Hauptfensters
- BREITE= 600 #Hauptfensterbreite
- HOEHE = 400 #Hauptfensterhoehe
- class Roboter(object): # allg. Festlegung Klassenvariablen innerhalb Programm, self--> einfacher Zugriff auf Variablen
- 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
- def Hauptfunktion(): #Ausfuehrung
- global Start_Button
- global Roboter
- Start_Button.destroy()
- Roboter.maehen()
- #Messung Dauer des Maehvorgangs
- start_zeit = time.time()
- #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", width=50, 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))
|