Pacman mit Tkinter

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 !

Ein Pacman Clone - noch nicht fertig, doch wollte ich erst Prügel bekommen, bevor ich ihn fertig mache.
http://paste.pocoo.org/show/213495/

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

Sieht doch gar nicht so schlecht aus :-)

Was mich stört:
  • Die Bewegungen der Bots sind wohl rein zufällig. Beim klassischen Pacman gehen die iirc immer weiter geradeaus, bis sie auf ein Hindernis stoßen. Dann biegen sie entsprechend des Winkels ab. http://paste.pocoo.org/show/213555/
  • Ich würde ggf. verschiedene Bots einbauen, also mit unterschiedlichen Bewegungs-Engines. Sollte über Vererbung gut gehen oder man schreibt eine allgemeine Bot-Klasse, der man eine Bewegungsfunktion übergibt.
  • Keine Kommentare - unschön für Außenstehende ;-)
  • Level Daten gehören imho raus aus der Pac_Man-Klasse (Der Name Pac_Man wäre laut PEP8 auch eher PacMan). Ich würde auch die Magic-Numbers ggf. ins Level reinbauen. Also Foot-Points usw. Damit wären Levels variabler. Mauern usw. sind ja idR statisch, das kann da drin bleiben
  • Super wäre es, Levels aus Textdateien zu laden. Ich würde mal gucken, ob man dazu nicht JSON nehmen könnte :-)
Das mal auf die Schnelle :-)
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

Dank Hyperion !

Der Bot läuft nach dem Zufallsprinzip. Würde ich ihn am Ende einer Laufrichtung entscheiden lassen, dann läuft er nur im äußeren Bereich des Feldes. Werde bei jeder möglichen Kreuzung den Bot entscheiden lassen.

Kommentare --> ??? :-)

Für die Levels eine eigene Klasse ?

Gruß Frank
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Ich finds lustig habe schon ne runde gespielt, nur eben das was Hypervision schon bemängelt hat.

PS: Das Spiel erkennt nicht wann man gewonnen hat?
Jack Daniels
User
Beiträge: 30
Registriert: Freitag 1. Januar 2010, 11:38

Das Spiel erkennt auch nicht, wenn man gegen nen Feind rennt. Ich kann zumindest durch die durchrennen wie ich grade will...

Ansonsten ist's echt lustig.
Benutzeravatar
kaytec
User
Beiträge: 608
Registriert: Dienstag 13. Februar 2007, 21:57

Hallo an Alle !

Ist ja noch nicht fertig -habe ich oben auch geschrieben ! Wird schon noch ein richtiges Spiel.

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

Hallo !

Habe noch weiter gebastelt --> http://paste.pocoo.org/show/214789/

Ja, es gibt noch einiges zu bemängeln !

Gruß Frank
Benutzeravatar
HerrHagen
User
Beiträge: 430
Registriert: Freitag 6. Juni 2008, 19:07

Cool.

Aber irgendwie hängt die Steuerung in dieser Version. Bei Tastendruck bewegt Pacman sich manchmal nicht, manchmal auch 2mal.
Warum schreibst du eigentlich immer dict() oder list(). {} oder [] find ich irgendwie übersichtlicher...
Statt

Code: Alles auswählen

if type(bg) == type(())
kannst du auch

Code: Alles auswählen

if type(bg) == tuple
oder besser noch

Code: Alles auswählen

if isinstance(bg, tuple)
schreiben.
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

HerrHagen hat geschrieben:Warum schreibst du eigentlich immer dict() oder list(). {} oder [] find ich irgendwie übersichtlicher...
Mach ich auch so, kann man besser auseinander halten ;-)
„Lieber von den Richtigen kritisiert als von den Falschen gelobt werden.“
Gerhard Kocher

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

Hallo !

An der Spiellogik gebastelt --> http://paste.pocoo.org/show/215632/

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

Hallo !

Danke für das Feedback und es gibt noch einiges zu tun.
--> http://paste.pocoo.org/show/216178/

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

Hallo !

Noch einiges geändert --> http://paste.pocoo.org/show/216600/

Gruß Frank
Benutzeravatar
HerrHagen
User
Beiträge: 430
Registriert: Freitag 6. Juni 2008, 19:07

Weils so gut passt - man schaue sich das mal an (21.05.2010):
http://www.google.de/
Sogar mit Ton.
Benutzeravatar
kaytec
User
Beiträge: 608
Registriert: Dienstag 13. Februar 2007, 21:57

Hallo !

Kann ich auch --> http://paste.pocoo.org/show/216800/

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

Hallo !

So, eigentlich fertig --> http://paste.pocoo.org/show/217487/

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

kaytec hat geschrieben: So, eigentlich fertig --> http://paste.pocoo.org/show/217487/
Wirklich? Ich finde das ist noch jede Menge Potenzial zur Verbesserung drin ;-)
  • Wieso werden die Levels vor den imports definiert?
  • Wieso sind zwischen den imports Leerzeilen?
  • Sicher, dass die Einrückungen überall stimmen? (Zeile 159ff.)
  • Wieso wird da ein Attribut "event" bei set_player_position definiert - wo es dann ja nicht verwendet wird!
  • Wieso kann man die Levels noch nicht aus einer Datei laden?
  • Wieso werden so viele Magic Numbers in der PacMan Klasse definiert; anstatt sie im jeweiligen Level zu definieren?
  • Und fast am wichtigsten: Wieso gibt es keine Doku? So steigst Du da doch auch kaum mehr durch... Python hat ja ein Glück mit den Docstrings sogar Syntax und Semantik für Dokumentation direkt im Code.
Also imho noch viel zu tun :-)
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

Danke Hyperion !

1. Wusste nicht wo definieren.
2. Wusste nicht, dass da keine hingehören.
3. Manche waren auf 80 - ist geändert.
4. Meinst Du den event bei start_game ? Den event brauche ich nicht, doch übergebe ich ihn
nicht, dann meckert Python.
5. Ist das aus der Datei laden so wichtig ?
6. Ja - Magic Numbers kommen noch in die Levels.
7. Für mich ist die Dokumentation nicht so wichtig - für andere Leser schon. Ich mache die
ganze Sache nur so zum Spass und dokumentieren ist nicht so spaßig :-).

Gruß Frank
BlackJack

@kaytec: Dokumentation ist für andere Leser? Dann schau Dir das Programm nach 'nem halben Jahr noch einmal an, und Du wirst feststellen, dass *Du* ein anderer Leser bist. Also ist die Dokumentation auch für Dich. Nach einer gewissen Zeit ist man nämlich selbst ein Fremder bei Quelltext den man selber verfasst hat.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

kaytec hat geschrieben: 4. Meinst Du den event bei start_game ? Den event brauche ich nicht, doch übergebe ich ihn nicht, dann meckert Python.
Hm.... klingt für mich komisch! Was heißt denn "meckern"?
kaytec hat geschrieben: 5. Ist das aus der Datei laden so wichtig ?
Gegenfrage: Ist es denn so schwierig? ;-) Sieh es mal so: Deine Chance etwas über JSON und Kommandozeilen-Parsing (z.B. OptParse) zu lernen. Natürlich braucht es das nicht, um ein nettes Spiel implementiert zu haben - aber so wird das ganze ja erst interessant, weil man eigene Levels nicht im Quellcode unterbringen muss.

Zur DOku hatte BlackJack ja schon geantwortet :-)
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

Hallo Hyperion !

Das ist die Fehlermeldung:

Code: Alles auswählen

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)
TypeError: set_player_position() takes exactly 3 arguments (4 given)
Der event entsteht durch die Bindung der Tasten an Tk, um die Steuerung zu übergeben.

Spielfelder laden:
Ist natürlich für den Nutzer dieses Spieles eine schöne Sache, doch wer außer mir wird es nutzen ? Da ich jetzt aber Lust habe dies auch zu ermöglichen, werde ich es mal versuchen.

Doku:
Das mit der Dokumentation ist so eine Sache. Die Doku sollte auf Englisch sein .... :-) Ich würde mehr für die schlechte Dokumentation kritisiert werden, als für meine "Amateurprogrammierkenntnisse". Habe auch nicht den Anspruch ein Profi zu werden, sondern sehe es als anspruchsvolleres "Rätselraten", um den Kopf von meiner eigentlichen Tätigkeit frei zu bekommen. Für euch würde es die Arbeit natürlich sehr erleichtern,denn ihr gebt euch mit mir auch immer viel Mühe - Danke. Nein, ich will keine Diskussion über Englisch losbrechen. Werde ich auch mal angehen. Mir ist es ziemlich egal, ob ich nach einem Monat noch den Verlauf verstehe - verblüfft mich immer wieder was ich mal so zusammengebastelt habe.

Gruß Frank
Antworten