Eine Alternative (*) zu Pygame...

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
Üpsilon
User
Beiträge: 222
Registriert: Samstag 15. September 2012, 19:23

(*) Alternative ist relativ, aber ich muss das jetzt trotzdem der ganzen Welt mitteilen :D

Also.

Mein ehemaliger Informatik-Lehrer (wir haben jetzt einen Anderen) hat mal so eine Art mindestens Engine-ähnlichen Zustand programmiert:
Kurze Beschreibung und Downloadlink
Direkter Download

Dieser besteht aus zwei Modulen namens Spielobkekt und Spielfeld, welche einem jeweils eine gleichnamige Klasse zur Verfügung stellen.

Die Klasse Spielobjekt ermöglicht einem das Erstellen von 2D-Sprites, die dann (wer hätte es gedacht... ^^) Instanzen dieser Klasse sind.

Die Klasse Spielfeld ist, soweit ich es verstanden habe, eine Unterklasse/Tochterklasse/Subklasse/wasauchimmer von der Spielobjekt-Klasse. Diese erstellt ein Tkinter-Fenster, in dem man dann seine "Spielobjekte" anzeigen, bewegen und animieren kann.

In meiner Version (wie es in der zum Download gestellten ist, weiß ich nicht so genau) gibt es allerdings ein paar Probleme.
- Als Bilddateien für Spielobjekte funzen nur *.gif-s so richtig.
- Man kann den Fenster-Titel nicht ändern (es sei denn, man ändert den Quellcode der Engine...), ebenso ist es mit der Auflösung. Bei mir kommt jedenfalls IMMER ein 800*600 Fenster mit dem Titel "Gymgis Abenteuer - Version 1.0.0"
- Man kann den __init__()-Methoden der Klassen KEINE ARGUMENTE ÜBERGEBEN!!1!elf Das führt beim Erstellen eines Programms zu solchen Sachen:

Code: Alles auswählen

 # !UNGETESTET!
import Spielfeld, Spielobjekt
spielfeld = Spielfeld.Spielfeld()

ball = Spielobjekt.Spielobjekt()
ball. bildname = "ball.gif"
ball.positionX = 100
ball.positionY = 100
ball.breite = 50
ball.höhe = 50
spielfeld.hinzufügen(ball)
Die Möglichkeiten, die einem die EduGine (so heißt das Ding nämlich) eröffnet, sind nicht gerade sagenhaft. Aber es ist deutlich einfacher, den "Bouncing Ball" mit der EduGine zu programmieren als mit Pygame oder so.

Die einfachste Möglichkeit, zu lernen, wie man die EduGine benutzt, ist, die *kostenlos* mitgelieferten Beispielprogramme durchzugucken.

Ich finde es jedenfalls gut, weil es so einfach anzuwenden ist. Probiert es auf jeden Fall mal aus und sagt mal, wie ihr es findet.

Lg,
Y
BlackJack

@Üpsilon: Der Quelltext ist absolut grausam. Lauter Sternchenimporte und die beiden Module importieren sich am Ende jeweils gegenseitig mit einem Sternchenimport. Wenn die sich *so* sehr gegenseitig brauchen, dann gehört schon mal alles in *ein* Modul. Des weiteren sind lauter Schleifen nach dem Muster ``for i in range(len(sequence)):`` enthalten. Was immer da programmiert wurde, es sieht nicht nach Python aus. Da es das auch in Java und C++ gibt, hat da höchstwahrscheinlich jemand den Quelltext 1:1 nach Python „übersetzt” und das nicht wirklich in Python geschrieben.

An der Stelle sollte man vielleicht auf das `turtle`-Modul in der Standardbibliothek von Python hinweisen, mit dem man auch so etwas in der Richtung machen kann. Nur dass das tatsächlich in Python geschrieben ist, und schon im Lieferumfang enthalten ist.
Üpsilon
User
Beiträge: 222
Registriert: Samstag 15. September 2012, 19:23

BlackJack hat geschrieben:@Üpsilon: Der Quelltext ist absolut grausam. Lauter Sternchenimporte!
Ist ja gut!! Ich hab den Mist ja nicht programmiert! :D Und was das mit dem from dingens import * betrifft: Da ist unser Informatik-Lehrer ein großer Fän von. Wieso, weiß ich auch nicht...

Meine Frage, wie ihr das findet, war eher so gemeint: Wie findet ihr die Möglichkeiten, die einem die beiden Module zur Verfügung stellen? Also wenn man nicht die "Innereien" der Module betrachtet, sondern eher, was man damit fabrizieren kann.

PS: Das mit dem turtle muss ich mir ma anschaun, dass klingt interessant.
Zuletzt geändert von Üpsilon am Montag 9. September 2013, 19:45, insgesamt 1-mal geändert.
PS: Die angebotene Summe ist beachtlich.
BlackJack

@Üpsilon: Das ist kein Python, sondern eine andere Programmiersprache in Python-Syntax. Und es wird das `Tk`-Objekt im Hauptthread erzeugt und die `mainloop()` läuft in einem neu erzeugten Thread. Damit hat sich eine weitere Betrachtung im Grunde schon erledigt. Schaut man doch mal genauer hin, dann findet Quelltext wie diesen hier:

Code: Alles auswählen

    def entfernen( self, spielobjekt ):
        """Entfernt ein Spielobjekt vom Spielfeld."""

        # Synchronisieren
        self.lock.acquire()
        
        # Bild entfernen
        self.bilder.remove( self.bilder[ self.spielobjekte.index( spielobjekt ) ] )
        self.skalierteBilder.remove( self.skalierteBilder[ self.spielobjekte.index( spielobjekt ) ] )

        # Spielobjekt entfernen
        self.spielobjekte.remove( spielobjekt )

        # Rekursiv alle untergeordneten Spielobjekte löschen
        for field in spielobjekt.__dict__:
            if isinstance( spielobjekt.__dict__[ field ], Spielobjekt ):
                self.entfernen( spielobjekt.__dict__[ field ] )
                
        # Freigeben
        self.lock.release()
        

    def alleEntfernen( self ):
        """Entfernt alle Spielobjekte vom Spielfeld."""

        # Synchronisieren
        self.lock.acquire()
        
        # Alle Spielobjekte entfernen
        while len( self.spielobjekte ) > 0:
            self.entfernen( self.spielobjekte[ 0 ] )
            
        # Freigeben
        self.lock.release()
Das ist dermassen pervers von der Laufzeit, vom herumwühlen in „Innereien” und der Gefahr das ein `lock` nicht mehr freigegeben wird, dass man das echt nicht empfehlen kann. Es geht eben nicht nur um die Funktionalität, sondern auch wie die zustande kommt, und wie sicher es ist das einem das nicht um die Ohren fliegt. Und vielleich auch darum das einem beim betrachten von so etwas wie der ``# Alle Spielobjekte entfernen``-Schleife nicht die Tränen kommen. Zusammen mit den Sternchenimporten würde ich mal sagen, dass der Autor keine Ahnung vom Programmieren hat. Oder es ihm scheissegal ist.
Üpsilon
User
Beiträge: 222
Registriert: Samstag 15. September 2012, 19:23

BlackJack hat geschrieben:@Üpsilon: Das ist kein Python, sondern eine andere Programmiersprache in Python-Syntax. (...) Schaut man doch mal genauer hin, findet man (jede Menge Mist).
Jaaaaa, ich hab's kapiert!!! Sag das mal dem Herrn #NAMEZENSIERT#. Ich hab das ja nicht programmiert. Ich wurde nur gezwungen, damit ein Level für ein schlechtes Jump&Run-Spiel zu proggen.
BlackJack hat geschrieben: Zusammen mit den Sternchenimporten würde ich mal sagen, dass der Autor keine Ahnung vom Programmieren hat. Oder es ihm scheissegal ist.
Da ich nicht glaube, dass der Herr #NAMEZENSIERT# keine Ahnung hat, glaube ich eher Letzteres...

Naja. Du findest diese Module also *nicht so doll*.
Zuletzt geändert von Üpsilon am Montag 9. September 2013, 19:46, insgesamt 1-mal geändert.
PS: Die angebotene Summe ist beachtlich.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Üpsilon hat geschrieben:Naja. Du findest diese Module also *nicht so doll*.
Es gibt Dinge, die tut man einfach nicht und davon gibt es im Code zu viele.

Edit: Um aus den Programming Recommendations im Style Guide for Python Code zu zitieren: "Comparisons to singletons like None should always be done with is or is not, never the equality operators.". Alleine das wird im Code permanent ignoriert. Man kann solchen Code für den Hausgebrauch schreiben wenn man es nicht besser weiß. Solcher Code kann sogar lauffähig sein. Solchen Code sollte man aber niemals lehren.
Zuletzt geändert von /me am Montag 9. September 2013, 19:11, insgesamt 1-mal geändert.
BlackJack

@Üpsilon: Apropos Sachen die man nicht tut: Zitate inhaltlich dermassen verändern. Wenn Du Text von mir mit „blablabla” abkürzt, mag das ja noch gehen, ist ja keine wissenschaftliche Arbeit, aber mir komplette Sätze in den Mund zu legen finde ich nicht in Ordnung.

Wenn Herr #NAMEZENSIERT# kein Programmierer ist sondern Lehrer oder Dozent würde ich als erstes auf keine Ahnung aufgrund mangelnder Erfahrung tippen. Das ist nämlich durchaus üblich. Selbst bei Informatik-Professoren kann man nicht voraussetzen, dass sie praktisch vernünftig programmieren können. Das ist im Grunde auch die nettere Variante, denn wenn er Ahnung hätte und es Schülern absichtlich so zeigt, wäre das IMHO deutlich schlimmer.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Üpsilon hat geschrieben: Naja. Du findest diese Module also *nicht so doll*.
Oh Gott... da ist er nicht der einzige... auch die Java-Version ist ziemlicher Schrott! :shock:

Und auch ich denke, dass das alles 1:1 Kopien sind; das schlimme daran ist, dass es schon im Original Schrott ist - denn wenn man schon Schrott in eine andere Sprache einfach so übernimmt (``berühre`` z.B. ... *schauder*), dann kommt sicherlich nichts besseres dabei heraus... eher im Gegenteil!

Man kann aus diesem Code aber viel lernen: Egal was Du dort siehst, ist einfach schlecht und sollte anders gelöst werden :twisted:
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Üpsilon
User
Beiträge: 222
Registriert: Samstag 15. September 2012, 19:23

BlackJack hat geschrieben:@Üpsilon: Apropos Sachen die man nicht tut: Zitate inhaltlich dermassen verändern. Wenn Du Text von mir mit „blablabla” abkürzt, mag das ja noch gehen, ist ja keine wissenschaftliche Arbeit, aber mir komplette Sätze in den Mund zu legen finde ich nicht in Ordnung.
@BlackJack: Sorry, ich werde es gleich in meinen Beiträgen gleich ändern.
BlackJack hat geschrieben:Wenn Herr #NAMEZENSIERT# kein Programmierer ist sondern Lehrer oder Dozent würde ich als erstes auf keine Ahnung aufgrund mangelnder Erfahrung tippen. Das ist nämlich durchaus üblich. Selbst bei Informatik-Professoren kann man nicht voraussetzen, dass sie praktisch vernünftig programmieren können. Das ist im Grunde auch die nettere Variante, denn wenn er Ahnung hätte und es Schülern absichtlich so zeigt, wäre das IMHO deutlich schlimmer.
So weit ich weiß, wurde auf unserer Schule erst vor wenigen Jahren die Programmiersprache, die die uns beibringen, zu Python geändert. Davor wurde Java benutzt. Deswegen hast du wahrscheinlich Recht. :D Und damit die Informatik-Lehrer noch mehr schlechten Code lehren können, lernen die neuen Achtklässler dieses Jahr kein Python mehr, dafür aber JavaScript...
/me hat geschrieben:
Üpsilon hat geschrieben:Naja. Du findest diese Module also *nicht so doll*.
Es gibt Dinge, die tut man einfach nicht und davon gibt es im Code zu viele .(...) Solchen Code sollte man aber niemals lehren.
@me: Okayyyy...
Hyperion hat geschrieben:
Üpsilon hat geschrieben: Naja. Du findest diese Module also *nicht so doll*.
Oh Gott... da ist er nicht der einzige... auch die Java-Version ist ziemlicher Schrott! (...)

Man kann aus diesem Code aber viel lernen: Egal was Du dort siehst, ist einfach schlecht und sollte anders gelöst werden :twisted:
Um das Ganze zusammenzufassen: Was der Herr #NAMEZENSIERT# da zusammengebraut hat, ist ziemlicher Mist.
Dann werde ich künftig wohl lieber auf *ernsthafte* und *vernünftige* Module wie Turtle und Pygame zurückgreifen.

In diesem Sinne,
Danke @ alle und gute Nacht.
Zuletzt geändert von Üpsilon am Montag 9. September 2013, 19:55, insgesamt 2-mal geändert.
PS: Die angebotene Summe ist beachtlich.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Üpsilon hat geschrieben: Dann werde ich künftig wohl lieber auf *ernsthafte* und *vernünftige* Module wie Turtle und Pygame zurückgreifen.
Wobei das weniger mit den Modulen zu tun hat, die er verwendet, sondern mit der *Art und Weise*, wie er sie nutzt und alles codiert hat ;-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Üpsilon hat geschrieben:Und damit die Informatik-Lehrer noch mehr schlechten Code lehren können, lernen die neuen Achtklässler dieses Jahr kein Python mehr, dafür aber JavaScript...
Ich glaube dass wenn man solchen Python-Code schreibt, der JavaScript-Code dann vermutlich toxisch ist. Ist ja schon für gute Programmierer nicht ganz einfach brauchbaren JavaScript-Code zu schreiben.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Erschreckend das sich seid meiner Schulzeit sich anscheinend nichts geändert hat :?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Sirius3
User
Beiträge: 17738
Registriert: Sonntag 21. Oktober 2012, 17:20

Als man noch "Turbo-Pascal" in der Schule gelernt hat, war die Welt doch noch in Ordnung 8)
BlackJack

Also mein erster Kontakt zu Rechnern in der Schule war ein Rechnerraum voll mit Commodore 64. *Da* war die Welt noch in Ordnung. Bei Turbo-Pascal ging es schon bergab. :-D
Antworten