|
@@ -1,23 +1,32 @@
|
|
|
-
|
|
|
-#Linda Napieralski
|
|
|
-#Andre Giesbrecht
|
|
|
-#Alexa Tschernitschek
|
|
|
+#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% Maehrerfolg
|
|
|
+
|
|
|
+#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 turtle
|
|
|
import time
|
|
|
import sys
|
|
|
import tkMessageBox
|
|
|
|
|
|
+
|
|
|
#Groesse des Fensters
|
|
|
|
|
|
BREITE= 600 #Hauptfensterbreite
|
|
|
|
|
|
HOEHE = 400 #Hauptfensterhoehe
|
|
|
- #Gartenflaeche=240.000Pixel
|
|
|
-#global
|
|
|
-#global
|
|
|
|
|
|
class Roboter(object):
|
|
|
def __init__(self, Hauptfenster, canvas, BREITE, HOEHE, Roboter_width, Farbe, Geschwindigkeit, start_x, start_y, tag):
|
|
@@ -27,81 +36,84 @@ class Roboter(object):
|
|
|
self.Geschwindigkeit = Geschwindigkeit
|
|
|
self.Richtung_x = 0.5 #Geschwindigkeit in x_Richtung
|
|
|
self.Richtung_y = 0.5 #Geschwindigkeit in y_Richtung
|
|
|
- self.tag = tag #Neuzeichnen
|
|
|
- #Roboter erstellen
|
|
|
+ self.tag = tag #Roboter als Namensschild
|
|
|
+ #Roboter 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):
|
|
|
+ #while True:
|
|
|
+ #Startposition Roboter
|
|
|
+ start_x = 30
|
|
|
+ start_y = 10
|
|
|
|
|
|
- self.canvas.move(self.tag, self.Richtung_x, self.Richtung_y)
|
|
|
+ self.canvas.move(self.tag, self.Richtung_x, self.Richtung_y)
|
|
|
|
|
|
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)
|
|
|
+ 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[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]
|
|
|
+ x0= position[0] #Laufkoordinaten, Speicherung 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
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-#Idee: Abbruch der Fahr-Schleife, wenn Rob an Endkoordinaten ist--> break
|
|
|
-
|
|
|
+ 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
|
|
|
|
|
|
-#Koordinaten-Datei erzeugen
|
|
|
+ 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 bei Anklicken der Messagebox
|
|
|
|
|
|
-# input=open("Koordinaten.py").readlines()
|
|
|
- start_x=30
|
|
|
- start_y=10
|
|
|
- Liste=[] #Hauptliste
|
|
|
|
|
|
- Liste.append(x0) #Daten in entsprechende Unterlisten hinzufuegen
|
|
|
- Liste.append(y0)
|
|
|
- Liste.append(x1)
|
|
|
- Liste.append(y1)
|
|
|
- input=open("Koordinaten.txt") #Hauptliste und Unterlisten in Koordinaten-Programm hinzufuegen
|
|
|
- linenr=0
|
|
|
- while True:
|
|
|
- line=input.readline()
|
|
|
- if not line: break
|
|
|
- Liste.append(line) #zeilenweises Hinzufuege
|
|
|
+#class Hauptmenue(object):
|
|
|
+ #def __init__(self, ):
|
|
|
+ #self.Start_Button = tk.Button(Garten,bg ="green", text= "Willkommen zum Rasenmaehen", width=50, height=10, command=self.Start)
|
|
|
|
|
|
- laenge= len(Liste) #Laenge der Liste
|
|
|
-# print laenge
|
|
|
+def Start ():
|
|
|
+ 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()
|
|
|
|
|
|
- input.close()
|
|
|
- output=open("Koordinaten.txt", "w")
|
|
|
+ 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
|
|
|
|
|
|
- #for i in range (0,)
|
|
|
+ Start_Button = tk.Button(Garten,bg ="green", text= "Willkommen zum Rasenmaehen", width=50, height=10, command=Roboter.maehen())
|
|
|
+ Hauptfenster.mainloop()
|
|
|
|
|
|
- # print Liste[0], Liste[1], Liste[2], Liste[3]
|
|
|
- if (start_x==x0) and (start_y==y0):
|
|
|
- tkMessageBox.showinfo(title="Hinweis", message="Der Rasen wurde gemaeht!")
|
|
|
- sys.exit()
|
|
|
+def Hauptfunktion():
|
|
|
+ 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")
|
|
|
-Garten = tk.Canvas(Hauptfenster, bg='green', width=BREITE, height=HOEHE)
|
|
|
+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", 2,30, 10,"Roboter")
|
|
|
|
|
|
-Roboter.maehen()
|
|
|
-Hauptfenster.mainloop()
|
|
|
+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()
|
|
|
+
|
|
|
+#Roboter.maehen() #Aufrufen Maehfunktion
|
|
|
+Hauptfenster.mainloop() #Aufrufen Fenster
|
|
|
+
|
|
|
+
|
|
|
|
|
|
#Endzeit
|
|
|
-end_zeit=time.time()
|
|
|
+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))
|
|
|
|