G'n'G4Py - Graphics and Games for Python  1.0.0
Zeichenfenster.py
gehe zur Dokumentation dieser Datei
1 from __future__ import annotations
2 from threading import Lock, Thread
3 from typing import Optional
4 import pygame, math
5 
6 
7 WEISS = (255, 255, 255)
8 ROT = (255, 0, 0)
9 GRUEN = (0, 255, 0)
10 BLAU = (0, 0, 255)
11 GELB = (255,255,0)
12 MAGENTA = (255,0, 255)
13 CYAN = (0, 255, 255)
14 HELLGELB = (255, 255, 128)
15 HELLGRUEN = (128, 255, 128)
16 ORANGE = (255, 128,0)
17 BRAUN = (96, 64, 0)
18 GRAU = (128, 128, 128)
19 SCHWARZ = (0, 0, 0)
20 TRANS = (1, 1, 1)
21 
22 
23 class SingletonMeta(type):
24  _instanz: Optional[Singleton] = None
25  _lock: Lock = Lock()
26 
27 
28  def __call__(cls, *args, **kwargs):
29  with cls._lock:
30  if not cls._instanz:
31  cls._instanz = super().__call__(*args, **kwargs)
32  return cls._instanz
33 
34 
35 
36 class Zeichenfenster(Thread, metaclass=SingletonMeta):
37 
38 
39  def __init__(self):
40  #Aufruf des Oberklassenkonstruktors: Thread erzeugen
41  super().__init__()
42  #Fenstergroesse
43  self.FENSTERBREITE = 800
44  self.FENSTERHOEHE = 600
45  #Liste aller Figuren und Liste der beobachter
46  self.figurenliste = pygame.sprite.RenderUpdates()
47  self.beobachter = []
48  #Attribut zum Pausieren der Animation mittels Start/Stopp-Button
49  self.nichtGestoppt = False
50  #Starten des Threads
51  self.start()
52 
53 
55  def ObjektEinfuegen(self, figur):
56  self.figurenliste.add(figur)
57 
58 
60  def BeobachterRegistrieren(self, beobachter):
61  self.beobachter.append(beobachter)
62 
63 
65  def BeobachterEntfernen(self, beobachter):
66  self.beobachter.remove(beobachter)
67 
68 
69  def AktionAusfuehren(self):
70  kopie_von_beobachterliste = self.beobachter.copy()
71  for beobachter in kopie_von_beobachterliste:
72  beobachter.AktionAusfuehren()
73 
74 
77  def MausGeklickt(self, button, pos):
78  x, y = pos
79  if x < self.FENSTERBREITE-100 or y < self.FENSTERHOEHE-90:
80  kopie_von_beobachterliste = self.beobachter.copy()
81  for beobachter in kopie_von_beobachterliste:
82  beobachter.MausGeklickt(button, pos)
83 
84 
86  def TasteGedrueckt(self, taste):
87  kopie_von_beobachterliste = self.beobachter.copy()
88  for beobachter in kopie_von_beobachterliste:
89  beobachter.TasteGedrueckt(taste)
90 
91 
92  def Pausieren(self):
93  self.nichtGestoppt = False
94 
95 
96  def Starten(self):
97  self.nichtGestoppt = True
98 
99 
101  def GeschwindigkeitSetzen(self, fps):
102  self.FPS = fps
103 
104 
105  def run(self):
106 
107  #Pygame und Fenster initialisieren
108  pygame.init()
109  groesse = (self.FENSTERBREITE,self.FENSTERHOEHE)
110  self.fenster = pygame.display.set_mode(groesse)
111  pygame.display.set_caption("Zeichenfenster")
112 
113  #Entfernung unnoetiger Ereignisse, so dass sie nicht in die Ereignisliste kommen
114  pygame.event.set_blocked(pygame.ACTIVEEVENT)
115  pygame.event.set_blocked(pygame.MOUSEMOTION)
116  pygame.event.set_blocked(pygame.JOYAXISMOTION)
117  pygame.event.set_blocked(pygame.JOYBALLMOTION)
118  pygame.event.set_blocked(pygame.JOYHATMOTION)
119  pygame.event.set_blocked(pygame.JOYBUTTONUP)
120  pygame.event.set_blocked(pygame.JOYBUTTONDOWN)
121  pygame.event.set_blocked(pygame.VIDEORESIZE)
122  pygame.event.set_blocked(pygame.VIDEOEXPOSE)
123  pygame.event.set_blocked(pygame.USEREVENT)
124 
125  #Taktsteuerung
126  clock=pygame.time.Clock()
127  self.FPS = 200
128 
129  #Button und Schieberegler initalisieren
130  self.schaltfläche = self.Button((self.FENSTERBREITE-50,self.FENSTERHOEHE-70), self.fenster, self)
131  self.schieberegler = self.Schieberegler( "Tempo", 50, 5, self.FPS, self.FENSTERBREITE-100,self.FENSTERHOEHE-50, self.fenster, self)
132 
133  #lokales Attribut zum Beenden des Spiels
134  nichtBeendet = True
135 
136 
137 
138  #Hauptroutine des Pygames
139  while nichtBeendet:
140 
141  # Ereignisbehandlung: Durchlaufe alle aktuellen Ereignisse
142  for event in pygame.event.get():
143 
144  #Schliessen-Button
145  if event.type==pygame.QUIT:
146  nichtBeendet=False
147 
148  #Maus losgelassen
149  elif event.type == pygame.MOUSEBUTTONUP:
150  self.schaltfläche.mousebuttonup()
151  self.schieberegler.hit = False
152  self.MausGeklickt(event.button, event.pos)
153 
154  #Maus gedrueckt
155  elif event.type == pygame.MOUSEBUTTONDOWN:
156  pos = pygame.mouse.get_pos()
157  if self.schieberegler.button_rect.collidepoint(pos):
158  self.schieberegler.hit = True
159 
160  #Taste gedrueckt
161  elif event.type == pygame.KEYUP:
162  self.TasteGedrueckt(pygame.key.name(event.key))
163 
164  #Steuerung des Sliders im Menue rechts unten
165  if self.schieberegler.hit:
166  self.schieberegler.move()
167 
168  #Information der Beobachter ueber den Taktschlag
169  if self.nichtGestoppt:
170  self.AktionAusfuehren()
171 
172  #Darstellung des Hintergrunds und der Objekte
173  self.fenster.fill((230,230,230))
174  for figur in self.figurenliste:
175  figur.Darstellen(self.fenster)
176 
177  #Darstellung des Menues
178  pygame.draw.rect(self.fenster, GRAU, [self.FENSTERBREITE-100,self.FENSTERHOEHE-90, 100,90])
179  self.schaltfläche.draw()
180  self.schieberegler.draw()
181 
182  #Aktualisierung des gesamten Fensters
183  pygame.display.flip()
184 
185  #Wartezeit bis zum nächsten Durchlauf (FPS -> Frames per second)
186  clock.tick(self.FPS)
187 
188  #Schliessen des Fensters nach Abbruch der Hauptroutine
189  pygame.quit()
190  self._delete()
191  del(self)
192 
193 
195  def GanzNachVornBringen(self,figur):
196  if(self.figurenliste.has(figur)):
197  self.figurenliste.remove(figur)
198  self.figurenliste.add(figur)
199 
200 
202  def GanzNachHintenBringen(self,figur):
203  if(self.figurenliste.has(figur)):
204  self.figurenliste.remove(figur)
205  kopie=self.figurenliste.copy()
206  self.figurenliste.empty()
207  self.figurenliste.add(figur)
208  self.figurenliste.add(kopie)
209 
210 
212  def NachHintenBringen(self,figur):
213  if(self.figurenliste.has(figur)):
214  liste=self.figurenliste.sprites()
215  index_figur = liste.index(figur)
216  if index_figur > 0:
217  self.figurenliste.empty()
218  if index_figur >= 2:
219  for i in range(index_figur-1):
220  figur = liste.pop(0)
221  self.figurenliste.add(figur)
222  self.figurenliste.add(liste.pop(1))
223  self.figurenliste.add(liste)
224 
225 
227  def NachVorneBringen(self,figur):
228  if(self.figurenliste.has(figur)):
229  liste=self.figurenliste.sprites()
230  index_figur = liste.index(figur)
231  if index_figur < len(liste)-1:
232  self.figurenliste.empty()
233  if index_figur >= 1:
234  for i in range(index_figur):
235  figur=liste.pop(0)
236  self.figurenliste.add(figur)
237  self.figurenliste.add(liste.pop(1))
238  self.figurenliste.add(liste)
239 
240 
242  def Entfernen(self, figur):
243  if(self.figurenliste.has(figur)):
244  self.figurenliste.remove(figur)
245 
246 
247  class Button():
248 
252  def __init__(self, location, fenster, zeichenfenster):
253  self.color = (255,255,255) # the static (normal) color
254  self.bg = (255,255,255) # actual background color, can change on mouseover
255  self.fg = (0,0,0) # text color
256  self.groesse = (90,30)
257  self.fenster=fenster
258  self.zeichenfenster=zeichenfenster
259 
260  self.font = pygame.font.SysFont("Arial", 16)
261  self.txt = "Start"
262  self.txt_surf = self.font.render(self.txt, 1, self.fg)
263  self.txt_rect = self.txt_surf.get_rect(center=[s//2 for s in self.groesse])
264 
265  self.surface = pygame.surface.Surface(self.groesse)
266  self.rect = self.surface.get_rect(center=location)
267 
268 
269  def draw(self):
270  self.mouseover()
271  self.surface.fill(self.bg)
272  self.surface.blit(self.txt_surf, self.txt_rect)
273  self.fenster.blit(self.surface, self.rect)
274 
275 
276  def mouseover(self):
277  self.bg = self.color
278  pos = pygame.mouse.get_pos()
279  if self.rect.collidepoint(pos):
280  self.bg = (200,200,200) # mouseover color
281 
282 
283  def wechseln(self):
284  if self.txt=="Start":
285  self.txt = "Stop"
286  self.zeichenfenster.nichtGestoppt = True
287  else:
288  self.txt = "Start"
289  self.zeichenfenster.nichtGestoppt = False
290  self.txt_surf = self.font.render(self.txt, 1, self.fg)
291 
292 
293  def mousebuttonup(self):
294  pos = pygame.mouse.get_pos()
295  if self.rect.collidepoint(pos):
296  self.wechseln()
297  #button.wechseln()
298 
299 
300  class Schieberegler():
301  def __init__(self, name, val, mini, maxi, xpos, ypos, fenster, zeichenfenster):
302  self.val = val # start value
303  self.maxi = maxi # maximum at slider position right
304  self.mini = mini # minimum at slider position left
305  self.xpos = xpos
306  self.ypos = ypos
307  self.surf = pygame.surface.Surface((100, 50))
308  self.fenster = fenster
309  self.hit = False # the hit attribute indicates slider movement due to mouse interaction
310  self.font = pygame.font.SysFont("Arial", 12)
311  self.txt_surf = self.font.render(name, 1, (0,0,0))
312  self.txt_rect = self.txt_surf.get_rect(center=(50, 15))
313  self.zeichenfenster = zeichenfenster
314 
315  # Static graphics - slider background #
316  self.surf.fill((100, 100, 100))
317  pygame.draw.rect(self.surf, GRAU, [0, 0, 100, 50], 3)
318  pygame.draw.rect(self.surf, ORANGE, [10, 10, 80, 10], 0)
319  pygame.draw.rect(self.surf, WEISS, [10, 30, 80, 5], 0)
320 
321  self.surf.blit(self.txt_surf, self.txt_rect) # this surface never changes
322 
323  # dynamic graphics - button surface #
324  self.button_surf = pygame.surface.Surface((20, 20))
325  self.button_surf.fill(TRANS)
326  self.button_surf.set_colorkey(TRANS)
327  pygame.draw.circle(self.button_surf, SCHWARZ, (10, 10), 6, 0)
328  pygame.draw.circle(self.button_surf, ORANGE, (10, 10), 4, 0)
329 
330 
331  def draw(self):
332  # static
333  surf = self.surf.copy()
334  # dynamic
335  pos = (10+int((self.val-self.mini)/(self.maxi-self.mini)*80), 33)
336  self.button_rect = self.button_surf.get_rect(center=pos)
337  surf.blit(self.button_surf, self.button_rect)
338  self.button_rect.move_ip((self.xpos, self.ypos)) # move of button box to correct fenster position
339  # fenster
340  self.fenster.blit(surf, (self.xpos, self.ypos))
341 
342 
343  def move(self):
344 
345  self.val = (pygame.mouse.get_pos()[0] - self.xpos - 10) / 80 * (self.maxi - self.mini) + self.mini
346  if self.val < self.mini:
347  self.val = self.mini
348  if self.val > self.maxi:
349  self.val = self.maxi
350  self.zeichenfenster.FPS = self.val
351 
352 
353 
354 
355 
356 
357 
358 class Intern(pygame.sprite.Sprite):
359 
360 
368  def __init__(self, farbe, x, y, breite, hoehe, winkel, sichtbar):
369  # Aufruf des Oberklassenkonstruktors
370  super().__init__()
372 
373  #Initialisierung der Attribute.
374  self.x = x
375  self.y = y
376  self.breite = breite
377  self.hoehe = hoehe
378  self.farbe = self.FarbeGeben(farbe)
379  self.winkel = winkel
380  self.sichtbar = True
381 
382 
383  self.image = pygame.Surface([self.breite, self.hoehe])
384  self.NeuZeichnen()
385  self.NeuPositionieren()
386  self.geändert = False
387  self.positionGeändert = False
388  self.winkelGeändert = False
389 
390  Zeichenfenster().ObjektEinfuegen(self)
391 
392 
393  def NeuZeichnen(self):
394  #self.image = pygame.Surface([self.breite, self.hoehe])
395  self.image.fill((255,255,255))#???
396  self.image.set_colorkey((255,255,255))#???
397  self.geändert = False
398 
399  def NeuPositionieren(self):
400  self.rect = self.image.get_rect()
401  self.rect.topleft = (self.x,self.y)
402  self.positionGeändert = False
403 
404 
406  old_center = self.rect.center
407  self.image_gedreht = pygame.transform.rotate(self.image , self.winkel)
408  self.rect_gedreht = self.image_gedreht.get_rect()
409  self.rect_gedreht.center = old_center
410 
411 
413  def Darstellen(self, fenster):
414  if self.sichtbar:
415  if self.geändert:
416  self.NeuZeichnen()
417  if self.positionGeändert:
418  self.NeuPositionieren()
419  if self.winkelGeändert:
420  self.NeuGedrehtZeichnen()
421 
422  if self.winkel == 0:
423  fenster.blit(self.image,self.rect)
424  else:
425  fenster.blit(self.image_gedreht,self.rect_gedreht)
426 
427 
430  def PositionSetzen(self, x, y):
431  self.x = x
432  self.y = y
433  self.positionGeändert = True
434 
435 
438  def GroesseSetzen (self, breite, hoehe):
439  self.breite = breite
440  self.hoehe = hoehe
441  self.image = pygame.Surface([self.breite, self.hoehe])
442  self.geändert = True
443  self.positionGeändert = True
444  if self.winkel > 0:
445  self.winkelGeändert = True
446 
447 
449  def FarbeSetzen(self, farbe):
450  self.farbe = self.FarbeGeben(farbe)
451  self.geändert = True
452 
453 
455  def WinkelSetzen(self, winkel):
456  self.winkel = winkel % 360
457  self.winkelGeändert = True
458 
459 
460 
462  def SichtbarkeitSetzen(self, sichtbar):
463  self.sichtbar = sichtbar
464 
465 
466  def Entfernen(self):
467  Zeichenfenster().Entfernen(self)
468  del self
469 
470 
472  def FarbeGeben(self, wert):
473  if wert in ("weiss", "weiss", "white"):
474  return WEISS
475  elif wert in ("red", "rot"):
476  return ROT
477  elif wert in ("gruen", "grün", "green"):
478  return GRUEN
479  elif wert in ("blue", "blau"):
480  return BLAU
481  elif wert in ("yellow", "gelb"):
482  return GELB
483  elif wert in ("magenta", "pink"):
484  return MAGENTA
485  elif wert == "cyan":
486  return CYAN
487  elif wert == "hellgelb":
488  return HELLGELB
489  elif wert in ("hellgruen", "hellgrün"):
490  return HELLGRUEN
491  elif wert == "orange":
492  return ORANGE
493  elif wert in ("braun", "brown"):
494  return BRAUN
495  elif wert in ("grau", "grey"):
496  return GRAU
497  elif wert in ("black", "schwarz"):
498  return SCHWARZ
499  elif type(wert) is tuple:
500  if (0,0,0) <= wert <= (255,255,255):
501  return wert
502  else:
503  return SCHWARZ
504 
505 
508 
509 
510  def NachVorneBringen(self):
512 
513 
514  def NachHintenBringen(self):
516 
517 
520 
521 
524  def EnthältFarbe(self, farbe):
525  return self.farbe == farbe
526 
527 
528 
529 
530 
531 
533 
534 
542  def __init__(self, farbe, x, y, breite, hoehe, winkel, sichtbar):
543  super().__init__(farbe, x, y, breite, hoehe, winkel,sichtbar)
544 
545 
546  def NeuZeichnen(self):
547  super().NeuZeichnen()
548  pygame.draw.rect(self.image, self.farbe, (0,0,self.breite, self.hoehe))
549  if self.winkel != 0:
550  super().NeuGedrehtZeichnen()
551 
552 
553 
554 
555 
557 
558 
565  def __init__(self, farbe, x, y, radius, winkel, sichtbar):
566  super().__init__(farbe, x, y, radius* 2, radius * 2, winkel, sichtbar)
567 
568 
569  def NeuZeichnen(self):
570  super().NeuZeichnen()
571  pygame.draw.ellipse(self.image, self.farbe, (0,0,self.breite, self.hoehe))
572  if self.winkel != 0:
573  super().NeuGedrehtZeichnen()
574 
575 
576 
577 
578 
580 
581 
589  def __init__(self, farbe, x, y, breite, hoehe, winkel, sichtbar):
590  super().__init__(farbe, x, y, breite, hoehe, winkel, sichtbar)
591 
592 
593  def NeuZeichnen(self):
594  super().NeuZeichnen()
595  pygame.draw.polygon(self.image, self.farbe, [(self.breite/2,0),(self.breite, self.hoehe),(0, self.hoehe)])
596  if self.winkel != 0:
597  super().NeuGedrehtZeichnen()
598 
599 
600 
601 
602 
604 
605 
612  def __init__(self, farbe, x, y, textgroesse, winkel, sichtbar):
613  self.groesse = textgroesse
614  self.textinhalt = "Text"
615  self.geändert = True
616  super().__init__(farbe, x, y, 0, 0, winkel,sichtbar)
617 
618 
620  def TextSetzen(self, text):
621  self.textinhalt = text
622  self.geändert = True
623 
624 
626  def TextGroesseSetzen(self, groesse):
627  self.groesse = groesse
628  self.geändert = True
629 
630 
631  def TextVergroessern(self):
632  if self.groesse <= 10:
633  self.groesse += 1
634  elif self.groesse <= 40:
635  self.groesse += 2
636  else:
637  self.groesse += 4
638  self.geändert = True
639 
640 
641  def TextVerkleinern(self):
642  if self.groesse <= 10:
643  self.groesse -= 1
644  elif self.groesse <= 40:
645  self.groesse -= 2
646  else:
647  self.groesse -= 4
648  if self.groesse < 1:
649  self.groesse = 1
650  self.geändert = True
651 
652 
653  def NeuZeichnen(self):
654  font = pygame.font.SysFont("Arial", self.groesse)
655  self.text = font.render(self.textinhalt, True, self.farbe)
656  self.textRect = self.text.get_rect()
657  self.textRect.topleft = (self.x,self.y)
658  if self.winkel != 0:
659  self.NeuGedrehtZeichnen()
660 
661 
663  old_center = self.textRect.center
664  self.textGedreht = pygame.transform.rotate(self.text, self.winkel)
665  self.textRectGedreht=self.textGedreht.get_rect()
666  self.textRectGedreht.center = old_center
667 
668 
670  def Darstellen(self, fenster):
671  if self.geändert:
672  self.geändert = False
673  self.NeuZeichnen()
674 
675  if self.winkel == 0:
676  fenster.blit(self.text,self.textRect)
677  else:
678  fenster.blit(self.textGedreht,self.textRectGedreht)
679 
680 
681 
682 
684 
685 
691  def __init__(self, x, y, groesse, winkel, sichtbar):
692  self.xD = x
693  self.yD = y
694  self.homeX = x
695  self.homeY = y
696  self.homeWinkel = 0
697  self.figurenliste = []
698  self.IstStandardfigur = True
699  super().__init__((255,255,255), x, y, groesse, groesse, winkel, sichtbar)
700  self.farbliste = []
701  self.StandardfigurErzeugen()
702 
703 
706  def PositionSetzen(self, x, y):
707  super().PositionSetzen(x, y)
708  self.xD = x
709  self.yD = y
710  self.positionGeändert = True
711 
712 
714  def Gehen(self,länge):
715  neuX = self.xD + math.cos(self.winkel*math.pi/180)*länge
716  neuY = self.yD - math.sin(self.winkel*math.pi/180)*länge
717  self.xD = neuX
718  self.yD = neuY
719  self.x = round(neuX)
720  self.y = round(neuY)
721  self.positionGeändert = True
722 
723 
725  def GroesseSetzen (self, groesse):
726  super().GroesseSetzen(groesse, groesse)
727 
728 
730  self.x = self.homeX
731  self.y = self.homeY
732  self.xD = self.x
733  self.yD = self.y
734  self.winkel = self.homeWinkel
735  self.positionGeändert = True
736 
737 
738  def NeuZeichnen(self):
739  super().NeuZeichnen()
740  for codezeile in self.figurenliste:
741  exec(codezeile)
742  if self.winkel != 0:
743  super().NeuGedrehtZeichnen()
744 
745 
746 
747  def NeuPositionieren(self):
748  self.rect = self.image.get_rect()
749  self.rect.center = (self.x,self.y)
750  self.positionGeändert = False
751 
752 
753 
755  def Beruehrt(self):
756  sprites_list = Zeichenfenster().figurenliste.copy()
757  sprites_list.remove(self)
758  for figur in sprites_list:
759  if not (isinstance(figur, TextIntern)):
760  if not(pygame.sprite.collide_mask(self, figur) is None):
761  return True
762  return False
763 
764 
768  def BeruehrtFarbe(self, farbe):
769  sprites_list = Zeichenfenster().figurenliste.copy()
770  sprites_list.remove(self)
771  for figur in sprites_list:
772  if not (isinstance(figur, TextIntern)):
773  if not(pygame.sprite.collide_mask(self, figur) is None):
774  if figur.EnthältFarbe(self.FarbeGeben(farbe)):
775  return True
776  return False
777 
778 
781  def BeruehrtObjekt(self, objekt):
782  if (isinstance(objekt, TextIntern)):
783  return False
784  return not (pygame.sprite.collide_mask(self, objekt.symbol) is None)
785 
786 
788  if(not self.IstStandardfigur):
789  self.figurenliste.clear()
790  self.image.fill(GELB)
791  self.IstStandardfigur = True
792  self.figurenliste.append("pygame.draw.polygon(self.image, GELB, [(0, 0),(self.breite, self.hoehe/2),(0, self.hoehe)])")
793  self.figurenliste.append("pygame.draw.ellipse(self.image, BLAU, (20, self.hoehe/2 -4,8,8))")
794  self.farbliste = []
795  self.farbliste.append(GELB)
796  self.farbliste.append(BLAU)
797  self.geändert = True
798 
799 
806  def FigurteilFestlegenRechteck(self,x, y, breite, hoehe, farbe):
807  if(self.IstStandardfigur):
808  self.figurenliste.clear()
809  self.image.fill(WEISS)
810  self.IstStandardfigur = False
811  self.farbliste = []
812 
813  farbeCodiert = self.FarbeGeben(farbe)
814  string = "pygame.draw.rect(self.image,"+ str(farbeCodiert)+", ("+str(x)+","+str(y)+","+str(breite)+", "+str(hoehe)+"))"
815  self.figurenliste.append(string)
816  if not farbeCodiert in self.farbliste:
817  self.farbliste.append(farbeCodiert)
818  self.geändert = True
819 
820 
827  def FigurteilFestlegenEllipse(self, x, y, breite, hoehe, farbe):
828  if(self.IstStandardfigur):
829  self.figurenliste.clear()
830  self.fenster.fill(WEISS)
831  self.IstStandardfigur = False
832  self.farbliste = []
833  farbeCodiert = self.FarbeGeben(farbe)
834  string = "pygame.draw.ellipse(self.image,"+ str(farbeCodiert)+", ("+str(x)+","+str(y)+","+str(breite)+", "+str(hoehe)+"))"
835  self.figurenliste.append(string)
836  if not farbeCodiert in self.farbliste:
837  self.farbliste.append(farbeCodiert)
838  self.geändert = True
839 
840 
849  def FigurteilFestlegenDreieck(self, x1, y1 ,x2, y2, x3, y3, farbe):
850  if(self.IstStandardfigur):
851  self.figurenliste.clear()
852  self.fenster.fill(WEISS)
853  self.IstStandardfigur = False
854  self.farbliste = []
855  farbeCodiert = self.FarbeGeben(farbe)
856  string = "pygame.draw.polygon(self.image,"+ str(farbeCodiert)+", [("+str(x1)+","+str(y1)+"),("+str(x2)+", "+str(y2)+"),("+str(x3)+","+str(y3)+")])"
857  self.figurenliste.append(string)
858 
859  if not farbeCodiert in self.farbliste:
860  self.farbliste.append(farbeCodiert)
861  self.geändert = True
862 
863 
866  def EnthältFarbe(self, farbe):
867  return self.FarbeGeben(farbe) in self.Farbliste
868 
869 
870 
871 
872 
874 
875 
876  def __init__(self, farbe, x, y, groesse, winkel, sichtbar):
877  self.xD = x
878  self.yD = y
879  self.homeX = x
880  self.homeY = y
881  self.homeWinkel = 0
882  self.stiftUnten = True
883  self.farbliste = []
884  self.zeichenfläche = pygame.Surface([Zeichenfenster().FENSTERBREITE, Zeichenfenster().FENSTERHOEHE])
885  self.zeichenfläche.fill((255,255,255))#???
886  self.zeichenfläche.set_colorkey((255,255,255))#???
889  self.schwanzspitze.PositionSetzen(x, y)
890  super().__init__(farbe, x, y, 60, 25, winkel, sichtbar)
891 
892 
895  def PositionSetzen(self, x, y):
896  super().PositionSetzen(x, y)
897  self.xD = x
898  self.yD = y
899  self.schwanzspitze.rect.topleft = (self.x, self.y)
900  self.positionGeändert = True
901 
902 
904  def Gehen(self,länge):
905  neuX = self.xD + math.cos(self.winkel*math.pi/180)*länge
906  neuY = self.yD - math.sin(self.winkel*math.pi/180)*länge
907  if self.stiftUnten:
908  pygame.draw.line(self.zeichenfläche, self.farbe, (self.x, self.y), (round(neuX), round(neuY)))
909  self.xD = neuX
910  self.yD = neuY
911  self.x = round(neuX)
912  self.y = round(neuY)
913  self.schwanzspitze.PositionSetzen(self.x, self.y)
914  self.positionGeändert = True
915 
916 
917 
918  def StiftHeben(self):
919  self.stiftUnten = False
920 
921 
922  def StiftSenken(self):
923  self.stiftUnten = True
924 
925 
927  self.x = self.homeX
928  self.y = self.homeY
929  self.xD = self.x
930  self.yD = self.y
931  self.winkel = self.homeWinkel
932  self.schwanzspitze.rect.topleft = (self.x, self.y)
933  self.positionGeändert = True
934 
935 
939  self.sichtbarkeitZeichenflaeche = wert
940 
941 
943  def Beruehrt(self):
944  sprites_list = Zeichenfenster().figurenliste.copy()
945  sprites_list.remove(self)
946  for figur in sprites_list:
947  if not (isinstance(figur, TextIntern)):
948  if not(pygame.sprite.collide_mask(self.schwanzspitze, figur) is None):
949  return True
950  return False
951 
952 
955  def BeruehrtFarbe(self, farbe):
956  if 22.5 <= self.winkel < 67.5:
957  x = self.x - 2
958  y = self.y + 2
959  elif 67.5 <= self.winkel < 112.5:
960  x = self.x
961  y = self.y + 2
962  elif 112.5 <= self.winkel < 157.5:
963  x = self.x + 2
964  y = self.y + 2
965  elif 157.5 <= self.winkel < 202.5:
966  x = self.x + 2
967  y = self.y
968  elif 202.5 <= self.winkel < 247.5:
969  x = self.x + 2
970  y = self.y - 2
971  elif 247.5 <= self.winkel < 292.5:
972  x = self.x
973  y = self.y - 2
974  elif 292.5 <= self.winkel < 337.5:
975  x = self.x - 2
976  y = self.y - 2
977  else:
978  x = self.x - 2
979  y = self.y
980  if not (x < 0 or y < 0 or x > Zeichenfenster().FENSTERBREITE or y > Zeichenfenster().FENSTERHOEHE):
981  wert1 = Zeichenfenster().fenster.get_at((x,y))
982  else:
983  return False
984  wert2 = self.FarbeGeben(farbe)
985  for i in range(3):
986  if(wert1[i]!=wert2[i]):
987  return False
988  return True
989 
990 
993  def BeruehrtObjekt(self, objekt):
994  if (isinstance(objekt, TextIntern)):
995  return True
996  return not (pygame.sprite.collide_mask(self.schwanzspitze, objekt.symbol) is None)
997 
998 
1001  def EnthältFarbe(self, farbe):
1002  enthältFarbe = False
1003  if self.FarbeGeben(farbe) in self.Farbliste:
1004  enthältFarbe = True
1005  if self.FarbeGeben(farbe) == self.Farbe:
1006  enthältFarbe = True
1007  return enthältFarbe
1008 
1009 
1010  def NeuZeichnen(self):
1011  super().NeuZeichnen()
1012  #Kopf
1013  pygame.draw.ellipse(self.image, GRUEN, (50,7,10, 12))
1014  #Beine
1015  pygame.draw.ellipse(self.image, GRUEN, (36,0,8, 25))
1016  pygame.draw.ellipse(self.image, GRUEN, (44,0,8, 25))
1017  #Augen
1018  pygame.draw.ellipse(self.image, self.farbe, (55,9,3, 2))
1019  pygame.draw.ellipse(self.image, self.farbe, (55,14,3, 2))
1020  #Schwanz
1021  pygame.draw.ellipse(self.image, self.farbe, (30,10,10, 5))
1022  #Rumpf
1023  pygame.draw.ellipse(self.image, BRAUN, (32,2,24, 21))
1024  self.schwanzspitze.NeuZeichnen(self.x, self.y, self.farbe)
1025  self.farbliste.append(GRUEN)
1026  self.farbliste.append(BRAUN)
1027 
1028  if self.winkel != 0:
1029  super().NeuGedrehtZeichnen()
1030 
1031 
1032  def NeuPositionieren(self):
1033  self.rect = self.image.get_rect()
1034  self.rect.center = (self.x,self.y)
1035  self.positionGeändert = False
1036 
1037 
1038 
1039 
1041  def Darstellen(self, fenster):
1043  fenster.blit(self.zeichenfläche,self.zeichenfläche.get_rect())
1044  #self.schwanzspitze.Darstellen(fenster)
1045  fenster.blit(self.schwanzspitze.image,self.schwanzspitze.image.get_rect())
1046  super().Darstellen(fenster)
1047 
1048 
1049  def Loeschen(self):
1050  self.zeichenfläche.fill((255,255,255))
1051 
1052 
1053 class Schwanzspitze(pygame.sprite.Sprite):
1054 
1055 
1056  def __init__(self):
1057  pygame.sprite.Sprite.__init__(self)
1058  self.image = pygame.Surface([5, 5])
1059  self.image.fill(ROT)
1060  self.rect = self.image.get_rect()
1061 
1062 
1065  def PositionSetzen(self, x, y):
1066  self.rect.topleft = (x,y)
1067 
1068 
1069  def NeuZeichnen(self,x,y, farbe):
1070  self.image.fill((255,255,255))#???
1071  self.image.set_colorkey((255,255,255))#???
1072  self.rect = self.image.get_rect()
1073  self.rect.center = (x,y)
1074  pygame.draw.rect(self.image, farbe, (0,0,1, 1))
1075 
1076 
1077 
1078 
1079 
1080 
GraficsAndGamesPython.intern.Zeichenfenster.RechteckIntern
Klasse zur Beschreibung des Rechtecks (intern)
Definition: Zeichenfenster.py:532
GraficsAndGamesPython.intern.Zeichenfenster.Zeichenfenster.Entfernen
def Entfernen(self, figur)
Entfernt eine Figur.
Definition: Zeichenfenster.py:242
GraficsAndGamesPython.intern.Zeichenfenster.Zeichenfenster.Button.zeichenfenster
zeichenfenster
Definition: Zeichenfenster.py:258
GraficsAndGamesPython.intern.Zeichenfenster.KreisIntern.NeuZeichnen
def NeuZeichnen(self)
Methode zum Zeichnen des internen Kreises
Definition: Zeichenfenster.py:569
GraficsAndGamesPython.intern.Zeichenfenster.FigurIntern.FigurteilFestlegenDreieck
def FigurteilFestlegenDreieck(self, x1, y1, x2, y2, x3, y3, farbe)
Erzeugt ein neues, dreieckiges Element.
Definition: Zeichenfenster.py:849
GraficsAndGamesPython.intern.Zeichenfenster.FigurIntern.FigurteilFestlegenRechteck
def FigurteilFestlegenRechteck(self, x, y, breite, hoehe, farbe)
Erzeugt ein neues, rechteckiges Element.
Definition: Zeichenfenster.py:806
GraficsAndGamesPython.intern.Zeichenfenster.Intern.GanzNachHintenBringen
def GanzNachHintenBringen(self)
Objekt in den Hintergrund bringen
Definition: Zeichenfenster.py:518
GraficsAndGamesPython.intern.Zeichenfenster.Intern.rect_gedreht
rect_gedreht
Definition: Zeichenfenster.py:408
GraficsAndGamesPython.intern.Zeichenfenster.Zeichenfenster.Schieberegler.xpos
xpos
Definition: Zeichenfenster.py:305
GraficsAndGamesPython.intern.Zeichenfenster.KreisIntern.__init__
def __init__(self, farbe, x, y, radius, winkel, sichtbar)
Konstruktor der internen Kreisklasse.
Definition: Zeichenfenster.py:565
GraficsAndGamesPython.intern.Zeichenfenster.Zeichenfenster.FENSTERBREITE
FENSTERBREITE
Definition: Zeichenfenster.py:43
GraficsAndGamesPython.intern.Zeichenfenster.Intern.FarbeGeben
def FarbeGeben(self, wert)
Ermittlung des RGB-Farbwertes.
Definition: Zeichenfenster.py:472
GraficsAndGamesPython.intern.Zeichenfenster.Zeichenfenster.Button.groesse
groesse
Definition: Zeichenfenster.py:256
GraficsAndGamesPython.intern.Zeichenfenster.Intern.winkel
winkel
Definition: Zeichenfenster.py:379
GraficsAndGamesPython.intern.Zeichenfenster.Zeichenfenster.Schieberegler.mini
mini
Definition: Zeichenfenster.py:304
GraficsAndGamesPython.intern.Zeichenfenster.RechteckIntern.NeuZeichnen
def NeuZeichnen(self)
Methode zum Zeichnen des internen Rechtecks
Definition: Zeichenfenster.py:546
GraficsAndGamesPython.intern.Zeichenfenster.Intern.breite
breite
Definition: Zeichenfenster.py:376
GraficsAndGamesPython.intern.Zeichenfenster.TurtleIntern.zeichenfläche
zeichenfläche
Definition: Zeichenfenster.py:884
GraficsAndGamesPython.intern.Zeichenfenster.Zeichenfenster.Schieberegler.txt_rect
txt_rect
Definition: Zeichenfenster.py:312
GraficsAndGamesPython.intern.Zeichenfenster.Zeichenfenster.Schieberegler
Klasse zur Beschreibung eines Schiebereglers (für Tempo)
Definition: Zeichenfenster.py:300
GraficsAndGamesPython.intern.Zeichenfenster.Intern.NeuZeichnen
def NeuZeichnen(self)
Neuzeichnen des Objekts
Definition: Zeichenfenster.py:393
GraficsAndGamesPython.intern.Zeichenfenster.FigurIntern.BeruehrtObjekt
def BeruehrtObjekt(self, objekt)
Testet, ob die Figur eine Objekt berührt.
Definition: Zeichenfenster.py:781
GraficsAndGamesPython.intern.Zeichenfenster.Intern.Darstellen
def Darstellen(self, fenster)
Darstellen.
Definition: Zeichenfenster.py:413
GraficsAndGamesPython.intern.Zeichenfenster.Zeichenfenster.ObjektEinfuegen
def ObjektEinfuegen(self, figur)
Fügt eine Figur in die Liste der zu verwaltenden Objekte ein.
Definition: Zeichenfenster.py:55
GraficsAndGamesPython.intern.Zeichenfenster.TurtleIntern.yD
yD
Definition: Zeichenfenster.py:878
GraficsAndGamesPython.intern.Zeichenfenster.Intern.hoehe
hoehe
Definition: Zeichenfenster.py:377
GraficsAndGamesPython.intern.Zeichenfenster.TurtleIntern.Beruehrt
def Beruehrt(self)
Testet, ob die Turtle ein Grafikelement berührt.
Definition: Zeichenfenster.py:943
GraficsAndGamesPython.intern.Zeichenfenster.SingletonMeta._instanz
_instanz
Definition: Zeichenfenster.py:31
GraficsAndGamesPython.intern.Zeichenfenster.Intern.FarbeSetzen
def FarbeSetzen(self, farbe)
Festlegen der Farbe des Objekts.
Definition: Zeichenfenster.py:449
GraficsAndGamesPython.intern.Zeichenfenster.Zeichenfenster.Button.mouseover
def mouseover(self)
Reaktion auf Mausberührung
Definition: Zeichenfenster.py:276
GraficsAndGamesPython.intern.Zeichenfenster.Intern.winkelGeändert
winkelGeändert
Definition: Zeichenfenster.py:388
GraficsAndGamesPython.intern.Zeichenfenster.Zeichenfenster.Schieberegler.button_rect
button_rect
Definition: Zeichenfenster.py:336
GraficsAndGamesPython.intern.Zeichenfenster.Zeichenfenster.MausGeklickt
def MausGeklickt(self, button, pos)
Informiert die Beobachter (Turtles, Figuren und Ereignisbehandlungs-Objekte) über einen Mausklick.
Definition: Zeichenfenster.py:77
GraficsAndGamesPython.intern.Zeichenfenster.TextIntern.TextVergroessern
def TextVergroessern(self)
Vergrößerung der Schrift
Definition: Zeichenfenster.py:631
GraficsAndGamesPython.intern.Zeichenfenster.Intern.NachHintenBringen
def NachHintenBringen(self)
Objekt eine Ebene nach hinten bringen
Definition: Zeichenfenster.py:514
GraficsAndGamesPython.intern.Zeichenfenster.Zeichenfenster.Button.fenster
fenster
Definition: Zeichenfenster.py:257
GraficsAndGamesPython.intern.Zeichenfenster.Zeichenfenster.Button
Klasse zur Beschreibung eines Buttons (für Start/Stop)
Definition: Zeichenfenster.py:247
GraficsAndGamesPython.intern.Zeichenfenster.FigurIntern.BeruehrtFarbe
def BeruehrtFarbe(self, farbe)
Testet, ob die Figur eine Objekt berührt, das die gegebene Farbe enthält.
Definition: Zeichenfenster.py:768
GraficsAndGamesPython.intern.Zeichenfenster.Zeichenfenster.AktionAusfuehren
def AktionAusfuehren(self)
Informiert die Beobachter (Turtles, Figuren und Ereignisbehandlungs-Objekte) über einem Taktschlag.
Definition: Zeichenfenster.py:69
GraficsAndGamesPython.intern.Zeichenfenster.FigurIntern.homeX
homeX
Definition: Zeichenfenster.py:694
GraficsAndGamesPython.intern.Zeichenfenster.DreieckIntern.NeuZeichnen
def NeuZeichnen(self)
Methode zum Zeichnen des internen Dreiecks
Definition: Zeichenfenster.py:593
GraficsAndGamesPython.intern.Zeichenfenster.Zeichenfenster.BeobachterEntfernen
def BeobachterEntfernen(self, beobachter)
Entfernt ein Objekt (Turtle, Figur oder Ereignisbehandlung) als Beobachter.
Definition: Zeichenfenster.py:65
GraficsAndGamesPython.intern.Zeichenfenster.Intern.PositionSetzen
def PositionSetzen(self, x, y)
Festlegen der Position des Objekts.
Definition: Zeichenfenster.py:430
GraficsAndGamesPython.intern.Zeichenfenster.TextIntern.textRectGedreht
textRectGedreht
Definition: Zeichenfenster.py:665
GraficsAndGamesPython.intern.Zeichenfenster.TextIntern.textRect
textRect
Definition: Zeichenfenster.py:656
GraficsAndGamesPython.intern.Zeichenfenster.Zeichenfenster.FENSTERHOEHE
FENSTERHOEHE
Definition: Zeichenfenster.py:44
GraficsAndGamesPython.intern.Zeichenfenster.Zeichenfenster.Schieberegler.button_surf
button_surf
Definition: Zeichenfenster.py:324
GraficsAndGamesPython.intern.Zeichenfenster.TurtleIntern.homeWinkel
homeWinkel
Definition: Zeichenfenster.py:881
GraficsAndGamesPython.intern.Zeichenfenster.FigurIntern.figurenliste
figurenliste
Definition: Zeichenfenster.py:697
GraficsAndGamesPython.intern.Zeichenfenster.Zeichenfenster.FPS
FPS
Definition: Zeichenfenster.py:102
GraficsAndGamesPython.intern.Zeichenfenster.Zeichenfenster.Schieberegler.__init__
def __init__(self, name, val, mini, maxi, xpos, ypos, fenster, zeichenfenster)
Definition: Zeichenfenster.py:301
GraficsAndGamesPython.intern.Zeichenfenster.Intern.GroesseSetzen
def GroesseSetzen(self, breite, hoehe)
Festlegen der Größe des Objekts.
Definition: Zeichenfenster.py:438
GraficsAndGamesPython.intern.Zeichenfenster.Schwanzspitze.NeuZeichnen
def NeuZeichnen(self, x, y, farbe)
Zeichnet die Turtle neu.
Definition: Zeichenfenster.py:1069
GraficsAndGamesPython.intern.Zeichenfenster.TurtleIntern.__init__
def __init__(self, farbe, x, y, groesse, winkel, sichtbar)
Der Konstruktor erzeugt das Objekt und verwaltet die Attribute für Position und Aussehen.
Definition: Zeichenfenster.py:876
GraficsAndGamesPython.intern.Zeichenfenster.FigurIntern.ZumStartpunktGehen
def ZumStartpunktGehen(self)
Bringt die Figur zu ihrem Startpunkt.
Definition: Zeichenfenster.py:729
GraficsAndGamesPython.intern.Zeichenfenster.Schwanzspitze.image
image
Definition: Zeichenfenster.py:1058
GraficsAndGamesPython.intern.Zeichenfenster.Zeichenfenster.GanzNachHintenBringen
def GanzNachHintenBringen(self, figur)
Bringt eine Figur ganz nach hinten.
Definition: Zeichenfenster.py:202
GraficsAndGamesPython.intern.Zeichenfenster.Zeichenfenster.Button.color
color
Definition: Zeichenfenster.py:253
GraficsAndGamesPython.intern.Zeichenfenster.Intern.farbe
farbe
Definition: Zeichenfenster.py:378
GraficsAndGamesPython.intern.Zeichenfenster.Zeichenfenster.TasteGedrueckt
def TasteGedrueckt(self, taste)
Informiert die Beobachter (Turtles, Figuren und Ereignisbehandlungs-Objekte) über einen Tastendruck.
Definition: Zeichenfenster.py:86
GraficsAndGamesPython.intern.Zeichenfenster.TurtleIntern.EnthältFarbe
def EnthältFarbe(self, farbe)
Testet, ob die Turtle eine Farbe enthält.
Definition: Zeichenfenster.py:1001
GraficsAndGamesPython.intern.Zeichenfenster.Intern.x
x
Definition: Zeichenfenster.py:374
GraficsAndGamesPython.intern.Zeichenfenster.Zeichenfenster.Button.fg
fg
Definition: Zeichenfenster.py:255
GraficsAndGamesPython.intern.Zeichenfenster.Zeichenfenster.Button.rect
rect
Definition: Zeichenfenster.py:266
GraficsAndGamesPython.intern.Zeichenfenster.Zeichenfenster.Button.surface
surface
Definition: Zeichenfenster.py:265
GraficsAndGamesPython.intern.Zeichenfenster.Zeichenfenster.Schieberegler.hit
hit
Definition: Zeichenfenster.py:309
GraficsAndGamesPython.intern.Zeichenfenster.Zeichenfenster.Button.txt_surf
txt_surf
Definition: Zeichenfenster.py:262
GraficsAndGamesPython.intern.Zeichenfenster.SingletonMeta.__call__
def __call__(cls, *args, **kwargs)
Methode sorgt dafür, dass nur ein Objekt der Klasse ausgegeben wird.
Definition: Zeichenfenster.py:28
GraficsAndGamesPython.intern.Zeichenfenster.Zeichenfenster.Schieberegler.draw
def draw(self)
Zeichnen des Schiebereglers
Definition: Zeichenfenster.py:331
GraficsAndGamesPython.intern.Zeichenfenster.TurtleIntern.homeY
homeY
Definition: Zeichenfenster.py:880
GraficsAndGamesPython.intern.Zeichenfenster.TurtleIntern.ZumStartpunktGehen
def ZumStartpunktGehen(self)
Turtle geht zum Startpunkt
Definition: Zeichenfenster.py:926
GraficsAndGamesPython.intern.Zeichenfenster.Intern.positionGeändert
positionGeändert
Definition: Zeichenfenster.py:387
GraficsAndGamesPython.intern.Zeichenfenster.TurtleIntern.StiftHeben
def StiftHeben(self)
Turtle bewegt sich danach, ohne zu zeichnen.
Definition: Zeichenfenster.py:918
GraficsAndGamesPython.intern.Zeichenfenster.Zeichenfenster.fenster
fenster
Definition: Zeichenfenster.py:110
GraficsAndGamesPython.intern.Zeichenfenster.TurtleIntern.Darstellen
def Darstellen(self, fenster)
Stellt die Turtle dar.
Definition: Zeichenfenster.py:1041
GraficsAndGamesPython.intern.Zeichenfenster.Zeichenfenster
Klasse zur Steuerung des Zeichenfensters.
Definition: Zeichenfenster.py:36
GraficsAndGamesPython.intern.Zeichenfenster.Intern.__init__
def __init__(self, farbe, x, y, breite, hoehe, winkel, sichtbar)
Konstruktor der internen Oberklasse.
Definition: Zeichenfenster.py:368
GraficsAndGamesPython.intern.Zeichenfenster.Intern.image_gedreht
image_gedreht
Definition: Zeichenfenster.py:407
GraficsAndGamesPython.intern.Zeichenfenster.TurtleIntern.BeruehrtFarbe
def BeruehrtFarbe(self, farbe)
Testet, ob die Turtle mit der Schwanzspitze eine gegebene Farbe berührt.
Definition: Zeichenfenster.py:955
GraficsAndGamesPython.intern.Zeichenfenster.Zeichenfenster.Schieberegler.txt_surf
txt_surf
Definition: Zeichenfenster.py:311
GraficsAndGamesPython.intern.Zeichenfenster.Zeichenfenster.Button.txt
txt
Definition: Zeichenfenster.py:261
GraficsAndGamesPython.intern.Zeichenfenster.Zeichenfenster.beobachter
beobachter
Definition: Zeichenfenster.py:47
GraficsAndGamesPython.intern.Zeichenfenster.Zeichenfenster.Button.font
font
Definition: Zeichenfenster.py:260
GraficsAndGamesPython.intern.Zeichenfenster.SingletonMeta
Hilfsklasse zur Realisierung des Singleton-Musters, damit zu jeder Zeit nur ein einziges Objekt der K...
Definition: Zeichenfenster.py:23
GraficsAndGamesPython.intern.Zeichenfenster.Schwanzspitze.PositionSetzen
def PositionSetzen(self, x, y)
Setzt die Position der Schwanzspitze)
Definition: Zeichenfenster.py:1065
GraficsAndGamesPython.intern.Zeichenfenster.Intern.GanzNachVornBringen
def GanzNachVornBringen(self)
Objekt in den Vordergrund bringen
Definition: Zeichenfenster.py:506
GraficsAndGamesPython.intern.Zeichenfenster.TurtleIntern.PositionSetzen
def PositionSetzen(self, x, y)
Setzt die Position der Turtle (Position der Schwanzspitze).
Definition: Zeichenfenster.py:895
GraficsAndGamesPython.intern.Zeichenfenster.TurtleIntern.BeruehrtObjekt
def BeruehrtObjekt(self, objekt)
Testet, ob die Turtle eine Objekt berührt.
Definition: Zeichenfenster.py:993
GraficsAndGamesPython.intern.Zeichenfenster.Intern.SichtbarkeitSetzen
def SichtbarkeitSetzen(self, sichtbar)
Festlegen der Sichtbarkeit des Objekts.
Definition: Zeichenfenster.py:462
GraficsAndGamesPython.intern.Zeichenfenster.DreieckIntern
Klasse zur Beschreibung des Dreiecks (intern)
Definition: Zeichenfenster.py:579
GraficsAndGamesPython.intern.Zeichenfenster.Intern.image
image
Definition: Zeichenfenster.py:383
GraficsAndGamesPython.intern.Zeichenfenster.Zeichenfenster.Button.txt_rect
txt_rect
Definition: Zeichenfenster.py:263
GraficsAndGamesPython.intern.Zeichenfenster.FigurIntern.StandardfigurErzeugen
def StandardfigurErzeugen(self)
Erzeugt eine Standardfigur.
Definition: Zeichenfenster.py:787
GraficsAndGamesPython.intern.Zeichenfenster.FigurIntern.FigurteilFestlegenEllipse
def FigurteilFestlegenEllipse(self, x, y, breite, hoehe, farbe)
Erzeugt ein neues, elliptisches Element.
Definition: Zeichenfenster.py:827
GraficsAndGamesPython.intern.Zeichenfenster.Schwanzspitze
Klasse zur Beschreibung der Schwanzspitze der Turtle (intern)
Definition: Zeichenfenster.py:1053
GraficsAndGamesPython.intern.Zeichenfenster.FigurIntern.yD
yD
Definition: Zeichenfenster.py:693
GraficsAndGamesPython.intern.Zeichenfenster.TextIntern.Darstellen
def Darstellen(self, fenster)
Darstellen des Textes im Fenster.
Definition: Zeichenfenster.py:670
GraficsAndGamesPython.intern.Zeichenfenster.TurtleIntern.xD
xD
Definition: Zeichenfenster.py:877
GraficsAndGamesPython.intern.Zeichenfenster.Zeichenfenster.Schieberegler.fenster
fenster
Definition: Zeichenfenster.py:308
GraficsAndGamesPython.intern.Zeichenfenster.FigurIntern.__init__
def __init__(self, x, y, groesse, winkel, sichtbar)
Konstruktor der internen Figurklasse.
Definition: Zeichenfenster.py:691
GraficsAndGamesPython.intern.Zeichenfenster.TurtleIntern.farbliste
farbliste
Definition: Zeichenfenster.py:883
GraficsAndGamesPython.intern.Zeichenfenster.FigurIntern.Gehen
def Gehen(self, länge)
Verschiebt die Figur in die Richtung ihres Winkels.
Definition: Zeichenfenster.py:714
GraficsAndGamesPython.intern.Zeichenfenster.TextIntern.NeuZeichnen
def NeuZeichnen(self)
Methode zum Zeichnen des internen Textes
Definition: Zeichenfenster.py:653
GraficsAndGamesPython.intern.Zeichenfenster.Zeichenfenster.Button.__init__
def __init__(self, location, fenster, zeichenfenster)
Konstruktor des Buttons.
Definition: Zeichenfenster.py:252
GraficsAndGamesPython.intern.Zeichenfenster.Schwanzspitze.__init__
def __init__(self)
Der Konstruktor erzeugt das Objekt und verwaltet die Attribute für Position und Aussehen.
Definition: Zeichenfenster.py:1056
GraficsAndGamesPython.intern.Zeichenfenster.Zeichenfenster.Pausieren
def Pausieren(self)
Taktgeber unterbricht Benachrichtigungen der Beobachter.
Definition: Zeichenfenster.py:92
GraficsAndGamesPython.intern.Zeichenfenster.FigurIntern.PositionSetzen
def PositionSetzen(self, x, y)
Setzt die Position der Figur.
Definition: Zeichenfenster.py:706
GraficsAndGamesPython.intern.Zeichenfenster.TextIntern.text
text
Definition: Zeichenfenster.py:655
GraficsAndGamesPython.intern.Zeichenfenster.TextIntern.NeuGedrehtZeichnen
def NeuGedrehtZeichnen(self)
Methode zum Zeichnen des internen Textes bei Winkel != 0
Definition: Zeichenfenster.py:662
GraficsAndGamesPython.intern.Zeichenfenster.TextIntern.TextSetzen
def TextSetzen(self, text)
Methode zum Festlegen des Textes.
Definition: Zeichenfenster.py:620
GraficsAndGamesPython.intern.Zeichenfenster.Intern.Entfernen
def Entfernen(self)
Entfernen des Objekts
Definition: Zeichenfenster.py:466
GraficsAndGamesPython.intern.Zeichenfenster.TurtleIntern.sichtbarkeitZeichenflaeche
sichtbarkeitZeichenflaeche
Definition: Zeichenfenster.py:887
GraficsAndGamesPython.intern.Zeichenfenster.FigurIntern.NeuZeichnen
def NeuZeichnen(self)
Zeichnet die Figur neu im Fenster.
Definition: Zeichenfenster.py:738
GraficsAndGamesPython.intern.Zeichenfenster.Intern.geändert
geändert
Definition: Zeichenfenster.py:386
GraficsAndGamesPython.intern.Zeichenfenster.FigurIntern.NeuPositionieren
def NeuPositionieren(self)
Positioniert die Turtle neu.
Definition: Zeichenfenster.py:747
GraficsAndGamesPython.intern.Zeichenfenster.Zeichenfenster.GeschwindigkeitSetzen
def GeschwindigkeitSetzen(self, fps)
Methode zum Setzen der Geschwindigkeit.
Definition: Zeichenfenster.py:101
GraficsAndGamesPython.intern.Zeichenfenster.DreieckIntern.__init__
def __init__(self, farbe, x, y, breite, hoehe, winkel, sichtbar)
Konstruktor der internen Dreiecksklasse.
Definition: Zeichenfenster.py:589
GraficsAndGamesPython.intern.Zeichenfenster.TurtleIntern.SichtbarkeitZeichenflaecheSetzen
def SichtbarkeitZeichenflaecheSetzen(self, wert)
Schaltet die Sichtbarkeit der Zeichnung ein oder aus.
Definition: Zeichenfenster.py:938
GraficsAndGamesPython.intern.Zeichenfenster.FigurIntern.Beruehrt
def Beruehrt(self)
Testet, ob die Figur eine andere Figur (Turtle, Rechteck,...) berührt.
Definition: Zeichenfenster.py:755
GraficsAndGamesPython.intern.Zeichenfenster.RechteckIntern.__init__
def __init__(self, farbe, x, y, breite, hoehe, winkel, sichtbar)
Konstruktor der internen Rechtecksklasse.
Definition: Zeichenfenster.py:542
GraficsAndGamesPython.intern.Zeichenfenster.TextIntern.textinhalt
textinhalt
Definition: Zeichenfenster.py:614
GraficsAndGamesPython.intern.Zeichenfenster.Zeichenfenster.Schieberegler.surf
surf
Definition: Zeichenfenster.py:307
GraficsAndGamesPython.intern.Zeichenfenster.Intern.EnthältFarbe
def EnthältFarbe(self, farbe)
Überprüft, ob die gegebene Farbe die Farbe des Objekts ist.
Definition: Zeichenfenster.py:524
GraficsAndGamesPython.intern.Zeichenfenster.Intern.NeuGedrehtZeichnen
def NeuGedrehtZeichnen(self)
Neuzeichnen für Winkel != 0
Definition: Zeichenfenster.py:405
GraficsAndGamesPython.intern.Zeichenfenster.FigurIntern.xD
xD
Definition: Zeichenfenster.py:692
GraficsAndGamesPython.intern.Zeichenfenster.Intern.sichtbar
sichtbar
Definition: Zeichenfenster.py:380
GraficsAndGamesPython.intern.Zeichenfenster.Zeichenfenster.Button.draw
def draw(self)
Zeichnen des Buttons
Definition: Zeichenfenster.py:269
GraficsAndGamesPython.intern.Zeichenfenster.TextIntern
Klasse zur Beschreibung des Textes (intern)
Definition: Zeichenfenster.py:603
GraficsAndGamesPython.intern.Zeichenfenster.Schwanzspitze.rect
rect
Definition: Zeichenfenster.py:1060
GraficsAndGamesPython.intern.Zeichenfenster.Zeichenfenster.schaltfläche
schaltfläche
Definition: Zeichenfenster.py:130
GraficsAndGamesPython.intern.Zeichenfenster.FigurIntern.homeWinkel
homeWinkel
Definition: Zeichenfenster.py:696
GraficsAndGamesPython.intern.Zeichenfenster.TurtleIntern.Loeschen
def Loeschen(self)
Löscht die Zeichenfläche dar.
Definition: Zeichenfenster.py:1049
GraficsAndGamesPython.intern.Zeichenfenster.Intern.NachVorneBringen
def NachVorneBringen(self)
Objekt eine Ebene nach vorne bringen
Definition: Zeichenfenster.py:510
GraficsAndGamesPython.intern.Zeichenfenster.Zeichenfenster.NachVorneBringen
def NachVorneBringen(self, figur)
Bringt eine Figur eine Ebene nach vorne.
Definition: Zeichenfenster.py:227
GraficsAndGamesPython.intern.Zeichenfenster.Zeichenfenster.Button.wechseln
def wechseln(self)
Welchsel zwischen Start und Stopp
Definition: Zeichenfenster.py:283
GraficsAndGamesPython.intern.Zeichenfenster.Zeichenfenster.run
def run(self)
run-Methode des Threads - enthält die Hauptroutine des Programms
Definition: Zeichenfenster.py:105
GraficsAndGamesPython.intern.Zeichenfenster.Zeichenfenster.Schieberegler.font
font
Definition: Zeichenfenster.py:310
GraficsAndGamesPython.intern.Zeichenfenster.Zeichenfenster.Starten
def Starten(self)
Taktgeber nimmt Benachrichtigungen der Beobachter wieder auf.
Definition: Zeichenfenster.py:96
GraficsAndGamesPython.intern.Zeichenfenster.TurtleIntern.Gehen
def Gehen(self, länge)
Verschiebt die Turtle in die Richtung ihres Winkels.
Definition: Zeichenfenster.py:904
GraficsAndGamesPython.intern.Zeichenfenster.SingletonMeta.Lock
Lock
Definition: Zeichenfenster.py:25
GraficsAndGamesPython.intern.Zeichenfenster.Zeichenfenster.Button.mousebuttonup
def mousebuttonup(self)
Reaktion auf Drücken des Buttons
Definition: Zeichenfenster.py:293
GraficsAndGamesPython.intern.Zeichenfenster.Zeichenfenster.__init__
def __init__(self)
Der Konstruktor legt das Fenster an und die notwendigen Strukturen zur Verwaltung der Objekte.
Definition: Zeichenfenster.py:39
GraficsAndGamesPython.intern.Zeichenfenster.FigurIntern.IstStandardfigur
IstStandardfigur
Definition: Zeichenfenster.py:698
GraficsAndGamesPython.intern.Zeichenfenster.TurtleIntern.homeX
homeX
Definition: Zeichenfenster.py:879
GraficsAndGamesPython.intern.Zeichenfenster.FigurIntern.farbliste
farbliste
Definition: Zeichenfenster.py:700
GraficsAndGamesPython.intern.Zeichenfenster.TurtleIntern.NeuZeichnen
def NeuZeichnen(self)
Zeichnet die Turtle neu.
Definition: Zeichenfenster.py:1010
GraficsAndGamesPython.intern.Zeichenfenster.Zeichenfenster.nichtGestoppt
nichtGestoppt
Definition: Zeichenfenster.py:49
GraficsAndGamesPython.intern.Zeichenfenster.Intern
Interne Oberklasse, erbt von pygame.sprite.Sprite.
Definition: Zeichenfenster.py:358
GraficsAndGamesPython.intern.Zeichenfenster.Zeichenfenster.Button.bg
bg
Definition: Zeichenfenster.py:254
GraficsAndGamesPython.intern.Zeichenfenster.TextIntern.TextVerkleinern
def TextVerkleinern(self)
Verkleinerung der Schrift
Definition: Zeichenfenster.py:641
GraficsAndGamesPython.intern.Zeichenfenster.TurtleIntern
Klasse zur Beschreibung der Turtle (intern)
Definition: Zeichenfenster.py:873
GraficsAndGamesPython.intern.Zeichenfenster.TextIntern.textGedreht
textGedreht
Definition: Zeichenfenster.py:664
GraficsAndGamesPython.intern.Zeichenfenster.TextIntern.groesse
groesse
Definition: Zeichenfenster.py:613
GraficsAndGamesPython.intern.Zeichenfenster.Zeichenfenster.Schieberegler.val
val
Definition: Zeichenfenster.py:302
GraficsAndGamesPython.intern.Zeichenfenster.FigurIntern.GroesseSetzen
def GroesseSetzen(self, groesse)
Setzt die Größe der Figur.
Definition: Zeichenfenster.py:725
GraficsAndGamesPython.intern.Zeichenfenster.FigurIntern.homeY
homeY
Definition: Zeichenfenster.py:695
GraficsAndGamesPython.intern.Zeichenfenster.Intern.rect
rect
Definition: Zeichenfenster.py:400
GraficsAndGamesPython.intern.Zeichenfenster.FigurIntern
Klasse zur Beschreibung der Figur (intern)
Definition: Zeichenfenster.py:683
GraficsAndGamesPython.intern.Zeichenfenster.Zeichenfenster.figurenliste
figurenliste
Definition: Zeichenfenster.py:46
GraficsAndGamesPython.intern.Zeichenfenster.Intern.NeuPositionieren
def NeuPositionieren(self)
Definition: Zeichenfenster.py:399
GraficsAndGamesPython.intern.Zeichenfenster.TurtleIntern.StiftSenken
def StiftSenken(self)
Turtle wechselt in den Zeichenmodus.
Definition: Zeichenfenster.py:922
GraficsAndGamesPython.intern.Zeichenfenster.TurtleIntern.schwanzspitze
schwanzspitze
Definition: Zeichenfenster.py:888
GraficsAndGamesPython.intern.Zeichenfenster.Zeichenfenster.GanzNachVornBringen
def GanzNachVornBringen(self, figur)
Bringt eine Figur ganz nach vorne.
Definition: Zeichenfenster.py:195
GraficsAndGamesPython.intern.Zeichenfenster.Intern.WinkelSetzen
def WinkelSetzen(self, winkel)
Festlegen des Winkels des Objekts.
Definition: Zeichenfenster.py:455
GraficsAndGamesPython.intern.Zeichenfenster.Zeichenfenster.schieberegler
schieberegler
Definition: Zeichenfenster.py:131
GraficsAndGamesPython.intern.Zeichenfenster.TurtleIntern.stiftUnten
stiftUnten
Definition: Zeichenfenster.py:882
GraficsAndGamesPython.intern.Zeichenfenster.KreisIntern
Klasse zur Beschreibung des Kreises (intern)
Definition: Zeichenfenster.py:556
GraficsAndGamesPython.intern.Zeichenfenster.Intern.y
y
Definition: Zeichenfenster.py:375
GraficsAndGamesPython.intern.Zeichenfenster.Zeichenfenster.Schieberegler.ypos
ypos
Definition: Zeichenfenster.py:306
GraficsAndGamesPython.intern.Zeichenfenster.TurtleIntern.NeuPositionieren
def NeuPositionieren(self)
Positioniert die Turtle neu.
Definition: Zeichenfenster.py:1032
GraficsAndGamesPython.intern.Zeichenfenster.Zeichenfenster.NachHintenBringen
def NachHintenBringen(self, figur)
Bringt eine Figur eine Ebene nach hinten.
Definition: Zeichenfenster.py:212
GraficsAndGamesPython.intern.Zeichenfenster.TextIntern.__init__
def __init__(self, farbe, x, y, textgroesse, winkel, sichtbar)
Konstruktor der internen Textklasse.
Definition: Zeichenfenster.py:612
GraficsAndGamesPython.intern.Zeichenfenster.Zeichenfenster.Schieberegler.maxi
maxi
Definition: Zeichenfenster.py:303
GraficsAndGamesPython.intern.Zeichenfenster.Zeichenfenster.Schieberegler.move
def move(self)
Bewegung des Knopfes.
Definition: Zeichenfenster.py:343
GraficsAndGamesPython.intern.Zeichenfenster.TextIntern.TextGroesseSetzen
def TextGroesseSetzen(self, groesse)
Festlegung der Textgröße.
Definition: Zeichenfenster.py:626
GraficsAndGamesPython.intern.Zeichenfenster.FigurIntern.EnthältFarbe
def EnthältFarbe(self, farbe)
Testet, ob die Figur die Farbe enthält.
Definition: Zeichenfenster.py:866
GraficsAndGamesPython.intern.Zeichenfenster.Zeichenfenster.BeobachterRegistrieren
def BeobachterRegistrieren(self, beobachter)
Registriert ein Objekt (Turtle, Figur oder Ereignisbehandlung) als Beobachter ein.
Definition: Zeichenfenster.py:60
GraficsAndGamesPython.intern.Zeichenfenster.Zeichenfenster.Schieberegler.zeichenfenster
zeichenfenster
Definition: Zeichenfenster.py:313