2008-09-20 9 views
6

Ich versuche, eine Konsole (wie im Terminal, nicht Spielkonsole) Pong-Spiel in Python zu schreiben und ich habe Probleme herauszufinden, wie man das Spiel am besten (wieder) zeichnen.Wie zeichne ich am besten in der Konsole?

Ich dachte daran, ein 2D-Array als eine Art Bitmap zu haben, das Array so zu bearbeiten, dass es die neuen Positionen von Ball/Paddeln widerspiegelt und dann jede Reihe zu einer Zeichenkette ausgibt und sie druckt. Das bedeutet jedoch, dass die alten "Frames" erhalten bleiben und wenn die Dimensionen des Spiels kleiner als das Konsolenfenster sind, sind alte Frames immer noch sichtbar.

Gibt es eine Möglichkeit, Zeichen von der Konsole zu löschen? 'Ich habe gehört, ist unzuverlässig.

Oder gibt es eine einfachere alternative Route zur Ausgabe an die Konsole für diese Art von App?

+0

Dies gilt nicht Ihre Frage beantworten, aber warum nicht nur mit [PyGame] (http: // www.pygame.org/news.html)? PyGame macht es sehr zum Erstellen von 2D-Sprite-basierten Spielen. – Corey

Antwort

6

Es sieht aus wie eine curses Port/Bibliothek für Python ist:

https://docs.python.org/library/curses.html

+2

Vergessen Sie nicht anzugeben, dass dies unter Windows nicht funktioniert. – sorin

+0

Was sagst du dazu?Die Python-Modul-Seite sagt "Während Flüche in der Unix-Umgebung am weitesten verbreitet sind, sind Versionen für DOS, OS/2 und möglicherweise auch andere Systeme verfügbar". –

0

ich untersuchen würde das curses Modul. Es wird sich um viele Details kümmern und Sie können sich auf die höheren Ebenen konzentrieren.

3

Es gibt tatsächlich zwei Bibliotheken, die dieses Problem lösen, die älteren curses und die neueren S-Lang. Curses neigt dazu, Buggy-Line-Art zu machen, besonders unter Windows und auf Unicode-Konsolen (es ist Unicode-Unterstützung ist Scheiße). S-Langs screen management functions sind besser.

Während ich nicht beide in Python verwendet habe, und es scheint, dass Flüche besser unterstützt werden, in C zumindest wechsele ich meinen Code zu S-Lang wegen dieser Probleme, und weil tief unten ich nie wirklich mochte die Curses API.

2

Versuchen Sie urwid. Eines der Beispiele, das mit urwid gebündelt ist, ist a simulator for animated bar graphs. Die Balkendiagramme löschen den Bildschirm gut, ohne Artefakte des alten "Rahmens" zu hinterlassen.

0

Ich habe vor kurzem ein ASCII-Animationspaket (https://github.com/peterbrittain/asciimatics) entwickelt, das ähnliche Probleme konfrontiert. Während es nicht alles hat, um ein Spiel zu schreiben, sollte es Ihnen das meiste geben, was Sie wollen.

Insbesondere die Sprite-Klasse hilft Ihnen, Probleme beim erneuten Zeichnen zu beheben. Es gibt viele Beispiele, die Ihnen helfen, sich mit den verschiedenen Verwendungsmöglichkeiten und anderen Effekten im Paket vertraut zu machen. Hier ist eine kleine Demo ich als Tribut zusammen zu einem meiner Lieblingsspiele von früher ...

Pac man