Tjoar, ich habe ein kleines Konsolen-4Gewinnt-Spiel programmiert. Das Besondere: Ich habe versucht, mich dabei an das ModelViewController-Muster zu halten, gefühlt überhaupt das erste Mal, dass ich sowas mache^^. Das Programm läuft vollständig in der Konsole; ich habe es erfolgreich in Python 2.7 und 3.3 unter Windows und Linux ohne Fehler getestet.
Da ich mit MVC allgemein noch garnichts am Hut hatte, wollte ich das Progrämmchen einfach mal vorstellen und eure Meinung bzgl. des Quellcodes hören

Für alle, die nicht wissen, was das MVC-Muster ist: Grob gesagt beschreibt es, dass die einzelnen Programmteile (Steuerung, Programmlogik, Ausgabe) unabhängig voneinander existieren. Zwischen diesen Schichten wird über "Events" kommuniziert. Ein Programmteil sollte auf einen anderen nur maximal lesend zugreifen dürfen (z.B. der Ausgabe-Programmteil, damit er ggf. ergänzende Angaben von den Modellen erhält). Nunja, so hab ich das Spiel auch aufgebaut...
Tjoar... Hier das Programm

Direktdownload als ZIP, ca. 6 KB
Link bei gist.github.com mit allen Quellcodes
Das Programm läuft, grob beschrieben, so ab: Ein EventManager sorgt dafür, dass jederzeit eine "notify"-Methode samt Parameter (Events, die sich ebenfalls in derselben Quellcode-Datei befinden wie der Event-Manager) an jene Objekte losgeschickt werden können, die sich bei ihm registrieren. Und das tun alle auch: controller, viewer usw... In jeder Klasse wird in der "notify"-Methode dann die entsprechenden Events ausgewertet und entsprechend reagiert. Das ist eigentlich auch schon alles^^.
Ich vermute, dass man da noch einiges besser machen kann (u.a. gibt es wahrscheinlich elegantere Lösungen, als immer wieder "isinstance" zu verwenden^^)
Würde mich über Kritik und Verbesserungsvorschläge freuen

Kurzer Hintergrund meinerseits (ich hab grade das Bedürfnis, als immer-noch-OOP-Anfänger darüber zu reden. Vorsicht, enthält Geschwafel, muss nicht unbedingt gelesen werden


Und dann traf ich zufällig auf dieses Projekt: Ein einfaches Pong-Spiel, aber mit einem Quellcode, der mich wach werden lies. Die Programmteile (Viewer, Controller etc.) sind völlig unabhängig voneinander und können problemlos entfernt, ersetzt oder erweitert werden, ohne dass die anderen Quelltexte auch groß bearbeitet werden müssten - zwei Zeilen (import, Registrierung) reichen völlig! Kurz: Ich war beeindruckt vom Quellcode, v.a. von dessen Verständlichkeit und Modularität. Und da hab ich mir in einem Anflug von Motivation gedacht: Machste mal ein kleines Projekt genauso wie der Macher des Pong-Spiels... Ich denke, ich hab nun einen Teil vom "Killer-Feature" für OOP endlich gefunden
