1

だから私は基本的にここで最も簡単なアプローチを探しています。結果として私が欲しいのは、Linuxボックスをエミュレート/シミュレートするin-game-linux-shell(openglとsfmlを使用してレンダリングされます)です。それほど凝ったものである必要はありません。私が優先するのは、基本(ls、grep、cat、echo ..)、ある種のエディター(vim / nano-like)、そしてゲームロジックが/と相互作用できることです。 dev、/etcなど。

私は環境を破壊することを考えましたが、そうすることで解決策よりも多くの問題が見られます。また、ホストコードと緊密に統合できるC ++で記述された人気のあるLinuxエミュレーターがあるかどうかについても考えましたが、これはロングショットであり、まだ何も見つかりませんでした。

私を正しい道に導くための助けは大歓迎です!

PS。最終製品はクロスプラットフォームになります(少なくともwin / linuxの場合)

4

2 に答える 2

3

BusyBoxは、Linux コマンド ラインの多くの機能を自由に実装できる小規模な実装です。あまり問題なくゲームに埋め込むことができるはずです。もちろん、ファイルシステムと tty インターフェースを別々にモデル化する必要もあります。

于 2012-09-23T14:16:59.240 に答える
0

これが私がそれをする方法です。

ディレクトリ構造をノードのツリーとして実装します(リンクリストのようなものですが、各親は任意の数の子を持つことができます)。次に、次のコマンドを実行したい場合(Linuxのすべてのコマンドではありませんが、これで私が言っていることを理解できるはずです)、次のように動作するはずです。

  • ls-現在のノードを簡単に見て、すべての子を一覧表示します

  • ls -R-現在のノードを確認し、すべての子を再帰的に一覧表示します(ウィキペディアのツリートラバーサルページを参照) 。

  • cd /some/path/some/path-sに基づいて分割し/、現在の作業ディレクトリ(おそらくノードへのポインタとして実装する必要があります)をユーザーが指定したパスに変更してみます。パスが絶対パスである場合(つまり、ディレクトリ構造のメンバーシップで始まる場合は/、ルートノードからパスを見つけようとするだけで簡単に検証できるはずです。

これは私を別のポイントに導きます。構造はノードのツリーであるため、ファイルを表すノードとディレクトリを表すノードの2種類のノードが必要です。ディレクトリには子がある場合がありますが、ファイルにはない場合があります。また、ファイルノードには、ファイルの内容である可能性のあるデータのセット(おそらく文字列)が関連付けられている場合があります(ファイルを編集できるようにしたいため)。

  • rm somefile-子ノードが現在の作業ディレクトリに存在する場合は、単に無効にします。

  • mkdir somedirsomedir-まだ存在しない場合は、現在動作しているディレクトリノードに新しいディレクトリノードを接続します。

  • rmdir somedirsomedir-子がない場合、現在の作業ディレクトリから指定されたディレクトリノードを削除します。

さて、上記は実際にはディレクトリ構造についてのみ説明しており、コマンドとその実装方法をリストし続けることができますが、これまでのところ要点はわかっていると思います。それで、あなたがリストした他のコマンド(、、、、)についてgrepcatechoますvim/nano

  • grepの実装に関しては、上記の構造を使用すると、非常に基本的な実装を作成するのはかなり簡単です。ファイルの各行(この場合、これはファイルノードに関連付けられたデータ)をループし、各行で文字列比較を実行して、一致を出力するだけです。正規表現を許可している場合、私はあなたを助けることができません。c++正規表現ライブラリを調べることをお勧めします。ただし、別の方法があります。 grepはオープンソースであるため、そのソースを使用するか、単にそれを読んで、それがどのように実装されているかを理解することができます。Grepのソースコード

  • 上記のツリー構造を使用すると、ファイルまたは多くのファイルを「キャッティング」するのは簡単です。coutファイルのノードに関連付けられているすべてのデータを順番に作成します。しかしまた、grep猫のようにOSS(オープンソースソフトウェア)です。

  • echo実装するのは非常に簡単なはずです。単にその引数を印刷して戻します。少なくとも修復形式のエコー(エコーがこれよりも複雑になるかどうかはわかりませんが)。

  • vim/nanoなどの実装について。私は本当にあなたを助けることはできません。繰り返しになりますが、私はあなたを彼らのソースコード( vimnano )に向ける傾向があります。ただし、どちらも大規模なプロジェクトであるため、これはあまり役に立たない可能性があることを認識しています。

于 2012-09-23T14:33:08.470 に答える