Space Invader

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
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
Benutzeravatar
kaytec
User
Beiträge: 608
Registriert: Dienstag 13. Februar 2007, 21:57

Hallo darktrym !

Ich erhoffe keine Performanzvorteile - bin froh das es läuft :-). Jeder Gegner, Bomben, Racketen sind "Invadersobjekte" und mit dem Punkt komme ich an die Werte.

Hälfte von konstanten Variablen ?

self.game_run --> musste mal sein - habe ich auch schon überlegt wieder rauszunehmen.

self.screen_text = list() --> hat mal Black Jack so gesagt, damit man den Typ erkennt.

Die Steuerung hängt bei mir nicht.

Was sind Präfixe ? Daten auslagern - Meinst Du die Bilder und Konstanten ? So bleibt beim Posten alles zusammen.

Die Feuertaste habe ich in der jetzigen Version eingefügt - ist mir bei dieser gar nicht aufgefallen.

ESC --> European Securities Committee

Gruß Frank und Dank für die Kritik
Antworten