Maehroboter.py 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. #Maehroboter
  2. #-> Aufgabenstellung
  3. # -beliebige Startposition auf einer leeren, rechteckigen Rasenflaeche
  4. # -vorgegebene Fahrgeschwindigkeit
  5. # -zufaellige Richtungsaenderung nach Zusammenstoss mit einem Hindernis
  6. # -Rasenteile werden als gemaeht gekennzeichnet, wenn sie befahren wurden
  7. # -Maehprozess mit Tkinter visualisieren
  8. # -Ende des Maehrvorgangs: 95% Maehrerfolg
  9. #Fach:Programmieren2
  10. #Dozent: Prof. Chmielewski
  11. #Studiengang: BMT'17
  12. #Teilnehmer: Linda Napieralski (4066139)
  13. # Andre Giesbrecht (4066107)
  14. # Alexa Tschernitschek (4066220)
  15. #Modul importieren
  16. import Tkinter as tk
  17. import turtle
  18. import time
  19. import sys
  20. import tkMessageBox
  21. #Groesse des Fensters
  22. BREITE= 600 #Hauptfensterbreite
  23. HOEHE = 400 #Hauptfensterhoehe
  24. class Roboter(object):
  25. def __init__(self, Hauptfenster, canvas, BREITE, HOEHE, Roboter_width, Farbe, Geschwindigkeit, start_x, start_y, tag):
  26. self.width = BREITE #Einfuegen Hauptfensterbreite in Klasse
  27. self.height = HOEHE #Einfuegen Hauptfensterhoehe in Klasse
  28. self.canvas = canvas
  29. self.Geschwindigkeit = Geschwindigkeit
  30. self.Richtung_x = 0.5 #Geschwindigkeit in x_Richtung
  31. self.Richtung_y = 0.5 #Geschwindigkeit in y_Richtung
  32. self.tag = tag #Roboter als Namensschild
  33. #Roboter allgemein erstellen
  34. self.canvas.create_oval(start_x, start_y, start_x + Roboter_width, start_y + Roboter_width, fill=Farbe, tag=tag)
  35. #Funktion "Fahren" des Roboters
  36. def maehen(self):
  37. #while True:
  38. #Startposition Roboter
  39. start_x = 30
  40. start_y = 10
  41. self.canvas.move(self.tag, self.Richtung_x, self.Richtung_y)
  42. position = self.canvas.coords(self.tag) #Koordinaten der Roboterpositionen
  43. if position[0] == 0:
  44. self.Richtung_x = 0.5 #fahre weiter Richtung x_Achse, (=Ausgangskoord.+0.5)
  45. if position[1] == 0:
  46. self.Richtung_y = 0.5 #fahr weiter Richtung y_Achse, (=Ausgangskoord.+0.5)
  47. if position[2] == self.width:
  48. self.Richtung_x = -0.5 #bei Kollision (seitliche Wand) drehe um (90 Grad)
  49. if position[3] == self.height:
  50. self.Richtung_y = -0.5 #bei Kollision (obere/untere Wand) drehe um (90 Grad)
  51. self.canvas.after(self.Geschwindigkeit, self.maehen)
  52. x0= position[0] #Laufkoordinaten, Speicherung fuer Darst. Maehweg und Abbruch
  53. y0= position[1]
  54. x1= position[2]
  55. y1= position[3]
  56. self.canvas.create_oval(x0, y0,x1, y1, fill="#FF0000") #Markierung des Maehweges mit Neuzeichnung des Roboters, Farbe rot
  57. #Ende des Maehvorgangs bei Erreichen der Startpositionen
  58. if (start_x==x0) and (start_y==y0):
  59. self.Geschwindigkeit = 9999999 #Wartezeit an Endposition bis Maeh-Vorgang erneut startet, entspricht Pause des Maehvorgangs
  60. tkMessageBox.showinfo(title="Hinweis", message="Der Rasen wurde gemaeht!") #bei Ende: Oeffnung eines Hinweisfensters fuer Benutzer
  61. sys.exit() #gleichzeitiges Schliessen bei Anklicken der Messagebox
  62. #class Hauptmenue(object):
  63. #def __init__(self, ):
  64. #self.Start_Button = tk.Button(Garten,bg ="green", text= "Willkommen zum Rasenmaehen", width=50, height=10, command=self.Start)
  65. def Start ():
  66. Hauptfenster=tk.Tk()
  67. Hauptfenster.title("Maehroboter") #Hauptfenster erstellen mit Titel
  68. Garten = tk.Canvas(Hauptfenster, bg='green', width=BREITE, height=HOEHE) #Erstellung gruene Rasenflaeche, vollstaendig ausgefuelltes Hauptfenster
  69. Garten.pack()
  70. 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
  71. Start_Button = tk.Button(Garten,bg ="green", text= "Willkommen zum Rasenmaehen", width=50, height=10, command=Roboter.maehen())
  72. Hauptfenster.mainloop()
  73. def Hauptfunktion():
  74. global Start_Button
  75. global Roboter
  76. Start_Button.destroy()
  77. Roboter.maehen()
  78. #Messung Dauer des Maehvorgangs
  79. start_zeit = time.time()
  80. #Aufrufen der Hauptfunktionen
  81. Hauptfenster=tk.Tk()
  82. Hauptfenster.title("Maehroboter") #Hauptfenster erstellen mit Titel
  83. Garten = tk.Canvas(Hauptfenster, bg='green', width=BREITE, height=HOEHE) #Erstellung gruene Rasenflaeche, vollstaendig ausgefuelltes Hauptfenster
  84. Garten.pack()
  85. 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
  86. Start_Button = tk.Button(Hauptfenster,bg ="white", text= "Willkommen zum Rasenmaehen", width=50, height=10,command = Hauptfunktion)
  87. Start_Button.pack()
  88. #Roboter.maehen() #Aufrufen Maehfunktion
  89. Hauptfenster.mainloop() #Aufrufen Fenster
  90. #Endzeit
  91. end_zeit=time.time() #Messung Endzeit mit Ausgabe, am Ende des Programms, in Sekunden
  92. print "Die Maehdauer betraegt:"
  93. print ("%.1f seconds" %(end_zeit - start_zeit))