Seite 1 von 1

Tetrinoxid - Tetris mit Pygame

Verfasst: Freitag 18. Mai 2007, 21:38
von veers
Ich hab mich mal wieder hingesetzt und etwas mit pygame gespielt (nachdem ich SSL+Python nun echt nicht mehr sehen kann :twisted: ). Herausgekommen ist diesmal ein Tetris-Klon.
Freue mich wie immer auf euer Feedback, insbesondere zum Source.
Für Windows Benutzter gibt es eine setup.exe, für alle anderen ein Tarball welches ihr einfach nach $PREFIX entpacken könnt. Unter nicht Windows Systemen wird Python 2.4 sowie pygame Benötigt. Getestet habe ich das ganze auf Arch Linux, Ubuntu Feisty, sowie Windows XP Prof mit SP2.

Download/Source:
http://29a.ch/tetrinoxid/

Screenshot:
Bild

Verfasst: Freitag 25. Mai 2007, 21:32
von abgdf
Ja, das ist Tetris. Sehr hübsch !

Verfasst: Samstag 26. Mai 2007, 00:34
von thelittlebug
Schön das du es fertig gemacht hast. Auch gefällt mir deine Mühe daraus ein richtiges Paket zu machen. Sogar ein Introvideo ist dabei. Insgesamt kann ich behaupten das du dir viel Mühe gegeben hast und sauber gearbeitet hast.

Das es jetzt nicht das revolutionär neue Spielprinzip ist kann zwar als Kritik gewertet werden, sehe ich aber nicht so eng.

Zum Source hab ich natürlich ein paar Fragen und natürlich Anregungen. Ich bin (noch) nicht der Python Freak also sollten meine Vorschläge nicht so "abgehoben" wirken :)

1. Highscoreliste, könnte man Ideal mit Pickle lösen, spart geschätzte 10 Zeilen und wäre einfacher zu lesen (der Code).
2. setgrid in Blocks zeichnet bei jeder Änderung neu, kann man das eventuell verhindern?
3. Du erstellst die Blöcke bei jedem Zeichenvorgang neu? Notwendig?
4. Mir würde es gut gefallen wenn einige Einstellungen in "Datafiles" wandern würden. Z.b. die Blockformen und Farben.
5. Mehrere Geschwindigkeiten wären sehr gut.
6. Zeichenausgaberoutinen einführen -> Bastel dir etwas das die leidige Aufgabe des Fontsrenderings vereinfacht. Hier könnte auch das Rendern wegfallen wenn sich der Inhalt nicht geändert hat.
7. time.sleep(x) ist mir nicht ganz klar da sich ja pygame soweit ich weiß auch darum kümmern kann das ein Framelimiter läuft.
8. Schön wäre es noch wenn ein "halten" einer Taste einen Block weiterbewegen würde als nur 1 Feld.
9. ist "del intro" wirklich notwendig? Kümmert sich Python nicht sowieso selbst um sowas?
10. Sanftes bewegen der Blöcke, nicht "hüpfen
11. Kontrollierter Zufall -> Warscheinlichkeiten der Blöcke abhängig des Levels
12. Puzzle Modus :D
13. Shader Unterstützung und hohe Auflösungen :D

Aber wie gesagt, gut das es fertig ist ;)

lgherby

Verfasst: Sonntag 27. Mai 2007, 00:57
von veers
Schön das du es fertig gemacht hast. Auch gefällt mir deine Mühe daraus ein richtiges Paket zu machen. Sogar ein Introvideo ist dabei. Insgesamt kann ich behaupten das du dir viel Mühe gegeben hast und sauber gearbeitet hast.

Das es jetzt nicht das revolutionär neue Spielprinzip ist kann zwar als Kritik gewertet werden, sehe ich aber nicht so eng.

Zum Source hab ich natürlich ein paar Fragen und natürlich Anregungen. Ich bin (noch) nicht der Python Freak also sollten meine Vorschläge nicht so "abgehoben" wirken :)
thelittlebug hat geschrieben: 1. Highscoreliste, könnte man Ideal mit Pickle lösen, spart geschätzte 10
Zeilen und wäre einfacher zu lesen (der Code).
Hatte ich Anfangs auch so gelöst, hab dann aber einiges bezüglich sicherheits Bedenken und Pickle gelesen, unds dann umgeschrieben. Die sicherheits Probleme sollen zwar schon (wie ich später herrausgefunden habe ) seit Version 2.2? gelöst sein aber ich habs dann bei dem Textfile belassen. Ist transparent und benötigt keine weitere library.
thelittlebug hat geschrieben: 2. setgrid in Blocks zeichnet bei jeder Änderung neu, kann man das eventuell verhindern?
Könnte man ja. Aber ich glaube nicht dass es den Aufwand Wert ist.
thelittlebug hat geschrieben: 3. Du erstellst die Blöcke bei jedem Zeichenvorgang neu? Notwendig?
Nein, aber auch hier denke ich wieder das es denn Aufwand nicht Wert ist. Wäre aber Sinnvoll wenn ich etwas komplexere Blöcke hätte.
4. Mir würde es gut gefallen wenn einige Einstellungen in "Datafiles" wandern würden. Z.b. die Blockformen und Farben.
thelittlebug hat geschrieben: 5. Mehrere Geschwindigkeiten wären sehr gut.
Sprich Level wahl? ;)
thelittlebug hat geschrieben: 6. Zeichenausgaberoutinen einführen -> Bastel dir etwas das die leidige Aufgabe des Fontsrenderings vereinfacht. Hier könnte auch das Rendern wegfallen wenn sich der Inhalt nicht geändert hat.
Da hast du absolut Recht, mit einer eigenen Text Klasse hätte ich das viel hübscher lösen können

thelittlebug hat geschrieben: 7. time.sleep(x) ist mir nicht ganz klar da sich ja pygame soweit ich weiß
auch darum kümmern kann das ein Framelimiter läuft.
Ja, aber pygame scheint busy waiting zu betreiben, und ich mags nicht wenn ein Tetris vollkommen sinnlos eine CPU voll auslastet.
thelittlebug hat geschrieben: 8. Schön wäre es noch wenn ein "halten" einer Taste einen Block weiterbewegen würde als nur 1 Feld.
Habe ews so gemacht um mehr Kontrolle zu haben. Nach dem Testen haben mir aber des öftern die Arme geschmerzt. War vielleicht doch keine so gute Entscheidung.
thelittlebug hat geschrieben: 9. ist "del intro" wirklich notwendig? Kümmert sich Python nicht sowieso selbst um sowas?
Gute Frage, hab mich mit der Garbage Collection von Python noch nicht beschäftigt. Habe es explizit gemacht aus Gewohntheit. Grosses Object welches ich sicher nicht mehr brauche - gleich explizit löschen.
thelittlebug hat geschrieben: 10. Sanftes bewegen der Blöcke, nicht "hüpfen"
Wär möglich, würde jedoch so seine Probleme bringen mit dem verschieben in Lücken.
thelittlebug hat geschrieben: 11. Kontrollierter Zufall -> Warscheinlichkeiten der Blöcke abhängig des Levels
Hm da verstehe ich denn Sinn nicht so ganz.
thelittlebug hat geschrieben: 12. Puzzle Modus :D
So in From eine Halbnackten Frau die dann als Hintergrund für die Blöcke verwendet wird, so das Mann versucht das Feld möglichst voll zu bekommen.
thelittlebug hat geschrieben: 13. Shader Unterstützung und hohe Auflösungen :D
Tetris HD, wahaha ;) Shader sind mit pygame wohl leider nicht möglich ;)

Auf jeden Fall vielen dank für dein Feedback! Werde es vielleicht noch hier, sicher aber im nächsten Projekt berücksichtigen.

Verfasst: Sonntag 27. Mai 2007, 08:37
von BlackJack
Zum ``del intro``: Du löscht nicht das Objekt, sondern erst einmal nur den Namen. Das kann dann zur Folge haben, dass das Objekt gelöscht wird.

Verfasst: Sonntag 27. Mai 2007, 11:30
von thelittlebug
Ja, mehrere Levels wären warscheinlich nicht so schlecht.

Busy waiting wär mir noch nie aufgefallen. Ich habe mal sowas ähnliches wie SuperCollapse3 programmiert und das hatte eine Auslastung von ~15% auf meinem betagten AMD Athlon XP 1900. Allerdings wurden da die Blöcke nicht jedes mal neu in die Buffer geladen ;)

Also soweit ich Blackjack verstanden habe kann man das "del intro" weglassen.

Kontrollierter Zufall bringt nur in Verbindung mit Levels etwas. Z.b. könnte man in einem lvl die Zahl dieser Blöcke

Code: Alles auswählen

**
 **
erhöhen.

Für Shader könntest du auf OpenGL umsteigen :D

lgherby

Verfasst: Sonntag 27. Mai 2007, 12:29
von Y0Gi
"Choose zero polys and shaders" *sing*


Edit: Gnaa, [url] heult rum, daher hier der URL: http://www.kewlers.scene.org/bitchard/t ... rsion).mp3

Verfasst: Sonntag 27. Mai 2007, 18:12
von Leonidas
veers hat geschrieben:
thelittlebug hat geschrieben: 1. Highscoreliste, könnte man Ideal mit Pickle lösen, spart geschätzte 10
Zeilen und wäre einfacher zu lesen (der Code).
Hatte ich Anfangs auch so gelöst, hab dann aber einiges bezüglich sicherheits Bedenken und Pickle gelesen, unds dann umgeschrieben. Die sicherheits Probleme sollen zwar schon (wie ich später herrausgefunden habe ) seit Version 2.2? gelöst sein aber ich habs dann bei dem Textfile belassen. Ist transparent und benötigt keine weitere library.
Nein, ``pickles`` sind eben unsicher, da sie eben Beliebige objekte serialisieren können. Deswegen setzt man sie nicht für RPC ein und schickt sie nicht durchs Netz. Für den lokalen Gebrauch sind sie in der Regel sicher genug.

Verfasst: Montag 28. Mai 2007, 15:06
von veers
Leonidas hat geschrieben:
veers hat geschrieben:
thelittlebug hat geschrieben: 1. Highscoreliste, könnte man Ideal mit Pickle lösen, spart geschätzte 10
Zeilen und wäre einfacher zu lesen (der Code).
Hatte ich Anfangs auch so gelöst, hab dann aber einiges bezüglich sicherheits Bedenken und Pickle gelesen, unds dann umgeschrieben. Die sicherheits Probleme sollen zwar schon (wie ich später herrausgefunden habe ) seit Version 2.2? gelöst sein aber ich habs dann bei dem Textfile belassen. Ist transparent und benötigt keine weitere library.
Nein, ``pickles`` sind eben unsicher, da sie eben Beliebige objekte serialisieren können. Deswegen setzt man sie nicht für RPC ein und schickt sie nicht durchs Netz. Für den lokalen Gebrauch sind sie in der Regel sicher genug.
Naja das ganze ist ja nicht wirklich lokal sondern Systemweit. Und es ist ja nicht wirklich toll wenn dannach jeder Benutzer auf dem System Code mit den Rechten eines anderen ausführen kann.

Verfasst: Sonntag 17. Juni 2007, 13:23
von thelittlebug
So hab ich mir das noch gar nicht überlegt. Auch wenn es sich "nur" um ein Spiel handelt, das sicherlich "selten bis gar nicht" auf einem Server oder einer Maschine läuft die mehreren Leuten, die sich nicht gegenseitig trauen, das tägliche Brötchengeld einspielt, ist es wahrscheinlich besser gleich auf pickle zu verzichten. Gibt es eine sichere Alternative zu Pickle die vielleicht nur Daten speichern kann und Code weglässt?

lgherby

Verfasst: Sonntag 17. Juni 2007, 14:02
von BlackJack
Für eine Highscoreliste sollte eigentlich eine einfache Textdatei reichen. Entweder selbstgestrickt, oder mit `csv` oder `ConfigParser`.

Für verschachtelte Daten bietet sich JSON an. Leider ohne passendes Modul in der Standardbibliothek.