4

まず、いくつかの裏話:

「ローグライク」ゲームになりそうなものを作っているので、頭の中に浮かんだ興味深いアイデアを実行することができます。ゲームプレイはダンジョンクロールにはなりませんが、いずれにせよ、表示は同様の形式で、単純な ASCII 文字で行われる予定です。

これは自己演習であるため、ほとんどのコードを自分でコーディングするように努めています

最終的には、任意の大きなゲーム ワールドでゲームを実行できるようにしたいと考えています。(ゲームをネットワーク化し、コンピューターラボの多くのモニターにまたがることを想像するところまで)。

現在、テキスト コンソールの任意のセクションに読み書きできるコードと、効率的にパスを検索できるようにセットアップされた単純なパーティショニング システムがあります。


そして今、質問:

いくつかのベンチマークを実行しましたが、最大のボトルネックはテキスト コンソールの再描画です。

ゲームの世界がこれほど大きくなると、ディスプレイのインテリジェントな更新が必要になります。フレームごとにゲーム バッファ全体を再プッシュする必要はありません...ゲームのセクションのみが更新されるように設定する方法について、いくつかの指針が必要です。(そして、私が今持っているような個々のキャラクターだけではありません)

私はwindows.hを介してWindowsコンソールを操作してきましたが、サーバーに接続されたpuTTYクライアントを介してLinuxマシンで実行することにも興味があります。

ピクセルと文字の比率はほぼ 1:1 であるため、いくつかのビデオ処理ルーチンを適応させようとしましたが、うまくいきませんでした。

本当に、その背後にあるいくつかの原則について簡単に説明したいと思います. しかし、いくつかのサンプル (疑似) コードもいいでしょう。

4

3 に答える 3

6

Cursesを使用するか、自分で行う必要がある場合は、VTnnn制御コードについて読んでください。これらは両方とも、Windowsおよび* nix用語とコンソール(およびWindows)で機能するはずです。ヒントについては、nethackのソースコードを参照することもできます。これにより、変更が発生した場所で画面上の文字を変更できます。

于 2009-05-31T17:30:05.840 に答える
4

私はこれを理解していると主張するつもりはありませんが、これはJamesGoslingの伝説的なGoslingEmacsの再描画コードの背後にある問題に近いと思います。適切なタイトルの「再表示アルゴリズム」という彼の論文と、一般的な文字列間の修正の問題を参照してください。

于 2009-05-31T17:01:02.630 に答える
1

ゲームの世界がこれほど大きくなると、ディスプレイのインテリジェントな更新が必要になります。フレームごとにゲーム バッファ全体を再プッシュする必要はありません... ゲームのセクションのみが更新されるように設定する方法について、いくつかの指針が必要です。(そして、私が今持っているような個々のキャラクターだけではありません)

ゲーム ワールドのサイズは実際には関係ありません。各クライアントの可視領域を計算し、そのデータを送信するだけでよいからです。典型的な 80x25 コンソール ディスプレイを使用している場合、カラー コードなどを追加しても、毎回 2 ~ 3 キロバイトのデータしか送信できません。これは、この種のほとんどのオンライン ゲームの典型です: 世界のすべてではなく、人が見ることができるものを更新します。

送信するものを減らす方法を見つけようとして実験したい場合は、学習目的で自由に行ってください。リアルタイムであり、修正の必要のない問題を修正するために時間を無駄にするのはもったいないことです。上にリンクされた PDF は O(ND) ソリューションを提供しますが、単にコンソール全体を送信するのは O(N) の半分であることに注意してください。ここで、N は A と B と D の長さの合計として定義されます。

于 2009-06-01T09:33:23.390 に答える