Keyboard-Event

Fragen zu Tkinter.
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Ich habe ja auch nichts dagegen, das du Tkinter nutzt, aber du musst dennoch etwas weiter in OOP streben, ansonsten fällt dir dein schon guter Ansatz auf die Füße. :wink:
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
Benutzeravatar
kaytec
User
Beiträge: 608
Registriert: Dienstag 13. Februar 2007, 21:57

Ihr habt ja schon mehr geschrieben - ich war noch am Code von yipyip. Eigentlich wollte ich wirklich nur das Dauerfeuer abstellen, doch ich habe jetzt mal Space-Invaders gespielt und muss, dass Xynon1 recht hat. Man kann nur einen Schuß abgeben, wenn der eine getroffen hat oder aus dem Spielfeld ist. Muss ich noch ändern und dadurch ensteht das Problem mit dem Dauerferuer nicht.

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

kaytec hat geschrieben:Ihr habt ja schon mehr geschrieben - ich war noch am Code von yipyip. Eigentlich wollte ich wirklich nur das Dauerfeuer abstellen, doch ich habe jetzt mal Space-Invaders gespielt und musste feststellen, dass Xynon1 recht hat. Man kann nur einen Schuß abgeben, wenn der eine getroffen hat oder aus dem Spielfeld ist. Muss ich noch ändern und dadurch ensteht das Problem mit dem Dauerferuer nicht.

Gruß und Dank Frank
Wollte eigentlich mich nicht zitieren, sondern den Text verbessern.

Gruß Frank
yipyip
User
Beiträge: 418
Registriert: Samstag 12. Juli 2008, 01:18

@Xinon1:
Daß jeweils nur ein Schuss aktiv sein darf, war aus der ursprünglichen Frage aber auch nicht so ersichtlich. ;-)
Sollte programmiertechnisch aber auch nicht so ein großes Problem sein.
Kann mich nicht mehr erinnern, wann ich das letzte mal Space Invaders gespielt habe...

@kaytec
Auch wenn wir hier alle Tkinter Liebhaber sind, in diesem Fall hätte ich es doch mit Pygame gemacht.
Willst Du nicht auch noch Sound dazu haben?

:wink:
yipyip
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Sound kann man doch einbauen zB mit tkSnack.
Wenn man allerdings pygame sound haben willst dann importier doch das einzelne Modul von pygame, das ändert doch nichts daran das die GUI mit Tkinter gebaut ist.
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
Benutzeravatar
kaytec
User
Beiträge: 608
Registriert: Dienstag 13. Februar 2007, 21:57

TkSnack werde ich nehmen und ich glaube man soll pygame und Tk nicht mischen.

Gruß Frank
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Naja, prinzipiell hat Sound eigentlich nichts mit der Grafik zu tun, von daher imho egal.

Aber Paket/Modul Qualität und deren Abhängigkeiten wären Punkte für mich, an den ich mich orientieren würde. Und wenn man keine Abhängigkeiten an pygame haben will ist das tkSnack natürlich "besser".

Edit: Und für Space Inviders ist das natürlich mehr als ausreichend :D
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
yipyip
User
Beiträge: 418
Registriert: Samstag 12. Juli 2008, 01:18

Also allein schon weil die Tatsturabfrage etwas mehr low-level ist würde ich für Spiele lieber Pygame nehmen. Habe gerade Pygame-Sound in mein Beispielprogramm eingebaut.
Scheint ohne Probleme zu laufen...

:wink:
yipyip
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Was verstehst du unter low-level ?
Der einzige Unterschied ist doch nur das die Tk-KeyEvents nicht als Enum existieren sondern halt als String.

Kannst dir ja ein kleines Modul wie Tkconstants schreiben und einfach die Strings Variablen zuordnen (wem es Spaß macht)
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
yipyip
User
Beiträge: 418
Registriert: Samstag 12. Juli 2008, 01:18

Mit 'low-level' meinte ich eigentlich nur solche Methoden wie in pygame.keys. Status aller Tasten auf einmal mit pygame.key.get_pressed(), pygame.key.set_repeat(), Scancode, etc. ...

:wink:
yipyip
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Ok, Repeat geht nicht und du hast ja recht pygame ist schon ausgefeilter das Streite ich doch auch gar nicht ab, aber unter "low-level" bei KeyEvent verstehe ich was anderes :D
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
Benutzeravatar
kaytec
User
Beiträge: 608
Registriert: Dienstag 13. Februar 2007, 21:57

Hallo !

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

Habe mal weiter gebastelt.

Gruß Frank
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Würde eventuell noch 2 oder 3 alternativ hits einbauen, damit etwas abwechslung rein kommt, aber ansonst (wo ist hier der Daumen-hoch Smile)
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
Benutzeravatar
kaytec
User
Beiträge: 608
Registriert: Dienstag 13. Februar 2007, 21:57

Hallo !

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

nächste Version

Gruß Frank
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Funktioniert einwandfrei, schon fast wie das orginale Space Invaders :D
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
yipyip
User
Beiträge: 418
Registriert: Samstag 12. Juli 2008, 01:18

Arrgh... jetzt spiele ich doch die ganze Zeit Space Invaders...
;-)
Ein kleiner Bug:
Nachdem ich den letzten Gegner abgeschossen habe, friert das Spiel ein und nachdem ich das Fenster schliesse erscheint die Fehlermeldung
Exception in Tkinter callback
Traceback (most recent call last):
File "/usr/lib/python2.6/lib-tk/Tkinter.py", line 1413, in __call__
return self.func(*args)
File "/usr/lib/python2.6/lib-tk/Tkinter.py", line 498, in callit
func(*args)
File "<stdin>", line 107, in run
File "<stdin>", line 218, in set_new_positions
IndexError: list index out of range
Da fehlt wohl der Fall, das die Liste der Gegner auch leer sein kann. (nehme ich mal prinzipiell so an, habe mir den Code jetzt nicht so detalliert angeschaut)

:wink:
yipyip
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Naja, ist logisch, da er immer noch die Invaders bewegt, obwohl es keine in der Liste mehr gibt.
Sollte man am besten immer wenn ein Invader stirbt, abfragen ob noch welche da sind - aber es gibt ja noch kein GAME OVER in dem Spiel, von daher wird er das sicher noch einbauen.

@kaytec
Wenn ich mir einige Stellen ansehe im Quellcode, solltest du mittlerweil mitbekommen, das es langsam kompliziert wird dort etwas zu editieren.
Du solltest wirklich dringend nochmal genau überlegen was du dort an Quellcode gezielt trennen kannst.

Edit: Achja, das orginal Invaders hatte 224×240 Auflösung, die ist zwar für heutige verhältnisse zu klein, aber es wäre schön das der Maßstab gleich bleibt, also zB. 672x720, weil das ja das Raster, wie die Aliens sich bewegen definiert.
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
Benutzeravatar
kaytec
User
Beiträge: 608
Registriert: Dienstag 13. Februar 2007, 21:57

Hallo yipyip !
Der Fehler ist mir bekannt - ist ja noch nicht fertig !

Hallo Xyon1!
Na ja, es wird schon komplizierter, doch glaubst du wirklich, dass ich noch irgendwas von dem "Spaghetticode" verstehe ? :shock:

Eine gute Doku würde da helfen.

EIne Auflösung von 600 auf 480 ist für Leute mit kleinem Monitor immer noch wichtig - sagt unser Guru BJ.

Gruß Frank
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Es geht mir ja nicht direkt um die Auflösung, da hat BlackJack schon recht, sondern es geht mir um das Verhältnis deiner InvaderGUI, denn das ist dann eine andere Fläche in dem sich die Invaders bewegen können.
Du kannst ja die Application auf 600x480 lassen, aber der Raum in dem sich die Aliens bewegen sollte dem orginal entsprechen.
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
Benutzeravatar
kaytec
User
Beiträge: 608
Registriert: Dienstag 13. Februar 2007, 21:57

Antworten