2010-12-29 6 views
1

私はあなたがtelnetで遊ぶことができるシンプルなゲームを持っていますが、いくつかの改行を印刷してから画面全体を再送信することによって画面をリフレッシュします。場合によってはこれがちらつきを引き起こすことがあり、ユーザーが端末をスクロールすると古いフレームがすべて表示されます。telnetでテキストグラフィックスを効率的に実行する

私はどのような改善を行うことができますか?

すべてを再送信するのではなく、特定の文字を変更する方法はありますか?これは恐らくちらつきを防ぎ、ユーザ端末が古いフレームの負荷でいっぱいにならないようにするでしょう。

私はバックスペース文字(8)を送信しようとしましたが、これは現在の行の先頭より進んでいません。他の行に行くこのような何かが完璧だろう!

また、telnet towel.blinkenlights.nlは私の恐ろしいフレーム送信方法を使用していないことに気付きました。もっと良い解決策があります。

+2

Java用のcursesライブラリが必要です。ここでチェックしてください:http://stackoverflow.com/questions/439799/whats-a-good-java-curses-like-library-for-terminal-applications –

+0

しかし、私はそれなしでこれまでに持っている! (私はまた、Eclipseに任意の種類のライブラリを正常にインストールするにはあまりにも愚かです)。確かにすべての図書館ができることは、画面を操作するために低レベルの文字のいくつかの組み合わせを送信することですか? OSの独立性はあまり必要ありません。なぜなら、私は自分のゲームをUnixシステムでしか見せないからです。 – Matt

+0

あなたがこの質問をしているのであれば、明らかにあなたは十分に遠くまで来なかったでしょうか? –

答えて

1

どうやら私はANSIのエスケープシーケンスを使用することができます..私の端末で大丈夫に動作するようです。

これは恐らくサポートされていない恐ろしいことですが、それはその質問に答えるので、今後必要になるかもしれない人にはリンクを残しておきます。

http://www.termsys.demon.co.uk/vtansi.htm

3

Cursesがそれを行います。あなた自身で書きたい場合、アルゴリズムはかなりシンプルです。 1つのバッファに画面の状態を記憶し、新しい画面を別のバッファに描画し、リフレッシュを呼び出し、ライブラリは2つのバッファを比較し、必要な変更のみを送信します。次に、新しいバッファを現在のバッファにコピーし、次のフレームに進みます。トリッキーな部分は、すべての異なる端末タイプとその制御シーケンスを扱い、カーソルを移動させます。 Cursesには端末ライブラリが含まれています。

+0

これはおそらくかなり良いでしょう。なぜなら、私はすでにバッファを実装していて、スクリーンは2D配列に格納されているからです。手動で行うには多すぎる端末タイプがありますか? – Matt

+0

このシステムのターミナルデータベースをチェックするだけで、1,675のターミナルタイプがあります。私は、最近何人が実際に使用されているのかよく分かりません。 – JOTN

関連する問題