9

OK、これはクレイジーなアイデアのように聞こえるかもしれませんが、1980 年代スタイルのローグライク ゲームテキスト インターフェイスを純粋な Java で、つまり Swing などを使用してエミュレートすることに興味があります。

必要なことはおおまかに次のとおりです。

  • 「画面」として固定サイズの文字の固定サイズのグリッドを提供します (例: 100*75)
  • 適切な等幅フォントを使用し、多くの興味深い記号を使用するのが理想的です
  • 各文字位置の前景と背景の文字色を個別に設定できるようにする
  • 画面の任意の場所で文字列または個々の文字を印刷できるようにします (これらの場所の画面バッファーに既にあるものはすべて上書きする必要があります)。

これを可能にする優れた既存のソリューションを知っている人はいますか? それとも、最初から一緒にハッキングすることにこだわっていますか?

ps純粋なJavaが必要な理由は、サンドボックス化されたアプレットで実行できるようにするためです。そのため、 jcursesのような JNI ソリューションは残念ながら除外されています.....

4

6 に答える 6

9

これは私が Legerdemain で実装したアプローチです: http://roguelikefiction.com

文字の 2 次元配列 (char[][]) と対応する java.awt.Color[][] オブジェクトの配列を使用して、色を追跡しました。これらの配列を JPanel (JFrame の一部) から継承するクラスに押し込み、パネルの paintComponent() コールバックですべての描画を行うことができます。

Curses/JNI アプローチにも問題はありませんが、Swing ルートに進むと、あらゆる種類の優れた Unicode グリフが得られます。Legerdemain は 500 から 600 のそれらを使用します。

于 2011-02-04T12:00:42.570 に答える
4

この種のプロジェクトでは、ゲーム モデルとビューを厳密に分離することが不可欠であることがわかりました。この単純なは全体的なアーキテクチャを示唆しており、このより複雑なゲームは概念を拡張しています。利点は、リスニング ビューがどのように見えるかを気にせずに、ビューがゲーム自体とは別に進化できることです。

シンボルについては、この例で提案されているように、Unicode グリフが魅力的なオプションになる場合があります。

于 2011-02-02T21:03:07.517 に答える
3

「画面」として固定サイズの文字の固定サイズのグリッドを提供します (例: 100*75)

string[] screen = new string[75] の場合、それぞれを 100 個のスペースで埋めるだけです :)。

適切な等幅フォントを使用し、多くの興味深い記号を使用するのが理想的です

いくつかの良いものについては、このリンクを参照してください: http://cg.scs.carleton.ca/~luc/mono.html

各文字位置の前景と背景の文字色を個別に設定できるようにする

JEdi​​torPane のような HTML のレンダリングを可能にするコントロールを使用すると、これらのテキスト効果を得ることができます。そうすれば、特別なキーワードを「特別なキーワード」として定義できます。(これは少し非推奨ですが、あなたのケースでは問題なく動作するはずです。「ゲームの状態」を通常の文字列 (配列) として保存し、出力する直前に html をレンダリングするのが最も簡単です。

画面の任意の場所で文字列または個々の文字を印刷できるようにします (これらの場所の画面バッファーに既にあるものはすべて上書きする必要があります)。

ゲームステートを通常の文字列配列として持っているよりも前の質問での私のアドバイスに従った場合は、行の文字列を見つけるだけです。 string.substring(length) + "A" + string.substring(startindex: length) + 2、string.length - (長さ + 2)); 新しいゲーム状態を構築します。

于 2011-02-02T21:02:32.197 に答える
2

私はかつて(何年も前に)このようなもの(Swingでの端末実装)をコーディングし始めました。カーソルの移動と色の ANSI エスケープ シーケンスを使用してテキストを表示できるようになりましたが、入力を実装していませんでした。気になるなら掘り出してみます。

于 2011-02-02T20:51:19.303 に答える
2

過去への旅を完全なものにするために不正な文字ベースのインターフェイスについて話しているので、Curses C 実装をグーグルで検索し、JNI で View を実行してみませんか。モデルとコントローラーは通常の Java です。ほとんどすべてのプラットフォームにCursesの実装があります。

于 2011-02-02T21:15:51.170 に答える
1

ここでの多くの回答に触発されて、単純なSwingコンソールを実装することになりました(みんなに感謝します!)

興味のある方はこちらから入手できます:

Swing ベースの Java テキスト コンソール

于 2011-02-10T23:11:29.347 に答える