Ich hab mich mal wieder hingesetzt und etwas mit pygame gespielt (nachdem ich SSL+Python nun echt nicht mehr sehen kann ). 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:
Tetrinoxid - Tetris mit Pygame
-
- User
- Beiträge: 188
- Registriert: Donnerstag 20. Juli 2006, 20:46
- Wohnort: Wien
- Kontaktdaten:
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
13. Shader Unterstützung und hohe Auflösungen
Aber wie gesagt, gut das es fertig ist
lgherby
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
13. Shader Unterstützung und hohe Auflösungen
Aber wie gesagt, gut das es fertig ist
lgherby
- veers
- User
- Beiträge: 1219
- Registriert: Mittwoch 28. Februar 2007, 20:01
- Wohnort: Zürich (CH)
- Kontaktdaten:
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
4. Mir würde es gut gefallen wenn einige Einstellungen in "Datafiles" wandern würden. Z.b. die Blockformen und Farben.
Auf jeden Fall vielen dank für dein Feedback! Werde es vielleicht noch hier, sicher aber im nächsten Projekt berücksichtigen.
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
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: 1. Highscoreliste, könnte man Ideal mit Pickle lösen, spart geschätzte 10
Zeilen und wäre einfacher zu lesen (der Code).
Könnte man ja. Aber ich glaube nicht dass es den Aufwand Wert ist.thelittlebug hat geschrieben: 2. setgrid in Blocks zeichnet bei jeder Änderung neu, kann man das eventuell verhindern?
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.thelittlebug hat geschrieben: 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.
Sprich Level wahl?thelittlebug hat geschrieben: 5. Mehrere Geschwindigkeiten wären sehr gut.
Da hast du absolut Recht, mit einer eigenen Text Klasse hätte ich das viel hübscher lösen könnenthelittlebug 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.
Ja, aber pygame scheint busy waiting zu betreiben, und ich mags nicht wenn ein Tetris vollkommen sinnlos eine CPU voll auslastet.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.
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: 8. Schön wäre es noch wenn ein "halten" einer Taste einen Block weiterbewegen würde als nur 1 Feld.
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: 9. ist "del intro" wirklich notwendig? Kümmert sich Python nicht sowieso selbst um sowas?
Wär möglich, würde jedoch so seine Probleme bringen mit dem verschieben in Lücken.thelittlebug hat geschrieben: 10. Sanftes bewegen der Blöcke, nicht "hüpfen"
Hm da verstehe ich denn Sinn nicht so ganz.thelittlebug hat geschrieben: 11. Kontrollierter Zufall -> Warscheinlichkeiten der Blöcke abhängig des Levels
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: 12. Puzzle Modus
Tetris HD, wahaha Shader sind mit pygame wohl leider nicht möglichthelittlebug hat geschrieben: 13. Shader Unterstützung und hohe Auflösungen
Auf jeden Fall vielen dank für dein Feedback! Werde es vielleicht noch hier, sicher aber im nächsten Projekt berücksichtigen.
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.
-
- User
- Beiträge: 188
- Registriert: Donnerstag 20. Juli 2006, 20:46
- Wohnort: Wien
- Kontaktdaten:
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
erhöhen.
Für Shader könntest du auf OpenGL umsteigen
lgherby
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
**
**
Für Shader könntest du auf OpenGL umsteigen
lgherby
"Choose zero polys and shaders" *sing*
Edit: Gnaa, [url] heult rum, daher hier der URL: http://www.kewlers.scene.org/bitchard/t ... rsion).mp3
Edit: Gnaa, [url] heult rum, daher hier der URL: http://www.kewlers.scene.org/bitchard/t ... rsion).mp3
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
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.veers hat geschrieben: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: 1. Highscoreliste, könnte man Ideal mit Pickle lösen, spart geschätzte 10
Zeilen und wäre einfacher zu lesen (der Code).
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
- veers
- User
- Beiträge: 1219
- Registriert: Mittwoch 28. Februar 2007, 20:01
- Wohnort: Zürich (CH)
- Kontaktdaten:
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.Leonidas hat geschrieben: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.veers hat geschrieben: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: 1. Highscoreliste, könnte man Ideal mit Pickle lösen, spart geschätzte 10
Zeilen und wäre einfacher zu lesen (der Code).
-
- User
- Beiträge: 188
- Registriert: Donnerstag 20. Juli 2006, 20:46
- Wohnort: Wien
- Kontaktdaten:
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
lgherby
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.
Für verschachtelte Daten bietet sich JSON an. Leider ohne passendes Modul in der Standardbibliothek.