Space Invader

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
Benutzeravatar
kaytec
User
Beiträge: 608
Registriert: Dienstag 13. Februar 2007, 21:57

Hallo !

Hatte mal wieder Zeit und habe eine Beispiel zur Kollisionsabfrage gebastelt.

http://www.python-forum.de/pastebin.php?mode=view&s=137

Mit "space" start und mit <- & -> lenken.

Gruß Frank
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Niemals __magische_methoden__ manuell aufrufen. (``self.test.__init__``)
Benutzeravatar
kaytec
User
Beiträge: 608
Registriert: Dienstag 13. Februar 2007, 21:57

Hallo Dauerbaustelle !

Was sind __magische_methoden__ ?

Gruß Frank
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

kaytec hat geschrieben:Was sind __magische_methoden__ ?k
Alles mit zwei Unterstrichen vor und nach dem eigentlichen Namen, also z.B. ``__init__``, ``__len__`` usw. http://docs.python.org/reference/datamo ... thod-names

Die werden von Python selbst (also dem Interpreter) benutzt und sind nicht dazu gedacht, in Python-Code aufgerufen zu werden.
Benutzeravatar
kaytec
User
Beiträge: 608
Registriert: Dienstag 13. Februar 2007, 21:57

@ Dauerbaustelle danke - also besser ist in diesem Fall self.test = Test() oder öfters aufrufen ist auch nicht gut ?

Gruß Frank
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Kann ich so nicht beantworten, "Test" ist ja jetzt auch kein besonders ausssagekräftiger Name, von daher weiß ich gar nicht, was das überhaupt macht. Da der einzige Zweck der Klasse so weit ich das sehe jedoch nur ist, zwei anderen Daten zu speichern, könnte man vielleicht einfach ganz drauf verzichten...
Benutzeravatar
kaytec
User
Beiträge: 608
Registriert: Dienstag 13. Februar 2007, 21:57

Habe es halt so wie Space-Invaders augebaut, da ja nicht so ganz klar war wie die Kollisionsabfrage abläuft. Der Name ist nicht gut - sollte auch nur für das Beispiel verwendet werden. Ich wollte eigentlich nur wissen, ob ich eine Klasse, die in den Anfagszustand versetzt werden soll, immer wieder aufrufe oder dies auch nicht gemacht werden sollte ?

Gruß und Dank Frank
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Dauerbaustelle hat geschrieben:Niemals __magische_methoden__ manuell aufrufen. (``self.test.__init__``)
Stimmt so nicht! Manchmal muss man das sogar tun.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
BlackJack

@kaytec: Neue Objekte erstellen ist in Ordnung, nur "resetten" sollte man sie nicht mit der `__init__()`.
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Hyperion hat geschrieben:
Dauerbaustelle hat geschrieben:Niemals __magische_methoden__ manuell aufrufen. (``self.test.__init__``)
Stimmt so nicht! Manchmal muss man das sogar tun.
Muss ich dir natürlich Recht geben. Solange einem allerdings nicht klar ist, was diese Spezialfälle sind, macht es imo mehr Sinn, es als Komplettverbot hinzunehmen. Und wenn sie/er dann irgendwann mal rausfindet, dass man es ja doch in irgend welchen Fällen braucht, wird sofort kognitive Dissonanz mit der Verbotsregel erschaffen, was dazu führt, dass man solche Bösartigkeiten so weit irgend möglich vermeidet. :-)
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Dauerbaustelle hat geschrieben: Muss ich dir natürlich Recht geben. Solange einem allerdings nicht klar ist, was diese Spezialfälle sind, macht es imo mehr Sinn, es als Komplettverbot hinzunehmen. Und wenn sie/er dann irgendwann mal rausfindet, dass man es ja doch in irgend welchen Fällen braucht, wird sofort kognitive Dissonanz mit der Verbotsregel erschaffen, was dazu führt, dass man solche Bösartigkeiten so weit irgend möglich vermeidet. :-)
*g* so kann man es auch sehen ;-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
kaytec
User
Beiträge: 608
Registriert: Dienstag 13. Februar 2007, 21:57

@ BlackJack Danke !
Benutzeravatar
kaytec
User
Beiträge: 608
Registriert: Dienstag 13. Februar 2007, 21:57

Ohne __magische_methoden__ : http://www.python-forum.de/pastebin.php?mode=view&s=138

Gruß Frank
sisu
User
Beiträge: 28
Registriert: Sonntag 14. November 2010, 12:02

Hi!

Welche Funktion hat das rote Ding, das da am oberen Rand herumschwirrt (konnte es bislang nicht treffen)?
Ansonsten, finde das Spiel ziemlich cool, großes Lob! Wünschte, ich könnte auch sowas machen ^^
kaytec hat geschrieben: irgendwie bin ich ja Masochist - gebe es für die "Codefledder" frei und komme nicht mit den Antworten bzw. Lösungen nach :-)
Ich glaub, du meinst Sadist, oder? ^^
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Du solltest vielleicht noch einmal über "check_collision" nachdenken. Wie lange braucht der Test wohl bei sehr großen Hindernissen... Und warum steht da so viel doppelter Code? Und Warum ist das Ergebnis des if-Statements nicht das Ergebnis der Methode? Und, weshalb übergibst du die x/y-Werte der Positionen einzeln und nicht als Tupel? Fragen über Fragen ;-)
Das Leben ist wie ein Tennisball.
Benutzeravatar
kaytec
User
Beiträge: 608
Registriert: Dienstag 13. Februar 2007, 21:57

@ sisu: Danke

Hier eine Kollisionserkennung 2D mit Bounding Boxes (Rechteck um die Objekte) - ist nicht sehr genau, doch für ein einfaches 2D-Spiel ausreichend. --> http://www.python-forum.de/pastebin.php?mode=view&s=142

Hilfe hatte ich hier gefunden --> http://www.virtual-maxim.de/pixelgenaue ... erkennung/

Gruß Frank
Benutzeravatar
kaytec
User
Beiträge: 608
Registriert: Dienstag 13. Februar 2007, 21:57

Hallo,

hatte nicht bedacht, dass die x u. y Positionen in der Mitte des Bildes sind.

http://www.python-forum.de/pastebin.php?mode=view&s=143

Gruß Frank
Benutzeravatar
kaytec
User
Beiträge: 608
Registriert: Dienstag 13. Februar 2007, 21:57

Benutzeravatar
kaytec
User
Beiträge: 608
Registriert: Dienstag 13. Februar 2007, 21:57

Hallo !

Habe weiter gebastelt --> http://www.python-forum.de/pastebin.php?mode=view&s=292

Gruß Frank
Benutzeravatar
darktrym
User
Beiträge: 784
Registriert: Freitag 24. April 2009, 09:26

Was auffällt sind:

Gibst irgendwelche Performanzvorteile, wenn du in check_collision statt target.width lieber target_width nutzt? Wenn du Rechnungen einsparen willst, dann rechne nicht ständig die Hälfte von konstanten Variablen aus.

Code: Alles auswählen

self.game_run == False: 
Muss wirklich sein?

Code: Alles auswählen

self.screen_text = list()
Wieso keine eck. Klammern?

Lager mal die Daten aus und bei den vielen Präfixen könnten Objekte sicher den Lesefluss erhöhen.

Bei mir hängt er gerne mal beim Richtungswechsel.

Wenn du schon einen Start-Screen hast, hättest du wenigstens die Steuerung und Schusstaste erwähnen können. ESC ist sicher den Spieler bekannt, das engl. Wörterbuch kennt den Begriff nicht.
„gcc finds bugs in Linux, NetBSD finds bugs in gcc.“[Michael Dexter, Systems 2008]
Bitbucket, Github
Antworten