問題タブ [mud]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ruby - (ほとんどの) テキストベースのゲーム サーバーをどのように設計すればよいですか?
MUD/MUCK と考えてください。ただし、アバターやロケールのイラストを使用することもできます。私が選んだ言語はruby です。
サーバーとそのさまざまなクライアントの間で非同期に転送されるデータを使用して、複数の永続的な接続を処理する必要があります。クライアント セッションで発生するアクティビティに基づいて、1 つのデータベースを最新の状態に保つ必要があります。各クライアント セッションのアクティビティでは、他の複数のクライアントをすぐに更新する必要がある場合があります (ユーザーがルームに入る、ユーザーが別のユーザーにプライベート メッセージを送信する)。
これは目標プロジェクト であり、学習プロジェクトでもあるため、並行ネットワーク プログラミングについてさらに学習するために、車輪を 1 つか 2 つ再発明するつもりです。ただし、私は並行プログラミングとネットワーク プログラミングの両方に不慣れです。以前は、Web アプリでの非永続的な同期 HTTP 要求の世界でほぼ独占的に働いていました。ですから、正しい車輪を再発明していることを確認したいと思います。
embossの優れた回答に従って、特定の HTTP サーバーの内部を調べ始めました。これは、Web アプリは通常、問題がサーバー自体によって完全に抽象化されているため、スレッドの問題を回避できるためです。
私は EventMachine や GServer の機能をまだ理解していないので、使いたくありません。それらがどのように機能するか、どのような問題を解決し、なぜそれらが役立つのかについての一般的な感覚をつかむと、私はそれを快適に感じることができます. ここでの私の目標は、「ゲームを書く」ことではなく、「ゲームを書き、低レベルのもののいくつかがどのように機能するかを学ぶ」ことです。また、特定の用語の境界についても不明です。たとえば、「I/O 非バインド アプリ」は「イベント駆動型アプリ」のスーパーセットですか? 逆に?
もちろん、目標を達成するための正しい方法が存在する場合は興味がありますが、全体として、それが正しい方法である理由と、他の方法があまり好ましくない理由を理解したいと考えています。
書籍、電子書籍、オンライン リソース、サンプル プロジェクト、またはその他のちょっとした情報を提案してください。
私が現在行っている方法はIO#select
、接続されたソケットのリストをブロックするために使用し、タイムアウトは0.1秒です。読み取った情報をスレッドセーフな読み取りキューにプッシュし、タイムアウトになるたびに、スレッドセーフな書き込みキューからデータをプルします。タイムアウトを短くする必要があるかどうかはわかりません。ソケット処理スレッドの読み取りキューをポーリングし、「要求」を処理する 2 番目のスレッドがあります。これは、最初に動作させた方法よりも優れていますが、それでも理想的ではない可能性があります.
この質問を Hacker News に投稿したところ、私が取り組んでいるいくつかのリソースにリンクされました。似たようなものは何でも素晴らしいでしょう:
c# - C# クロス プラットフォームの RichTextBox URL または代替ソリューション
MUD/MOO サーバーと通信する C# アプリケーションを開発しています。基本的に、テキストを取得して画面に表示します。現時点では、RichTextBox を使用してテキストを表示しており、色付きのテキストは正常に機能しており、URL を実装するだけで済みますが、これを行っているときに、URL にカスタム テキストを追加する必要があることを発見しました (例: http:// ではなく、 : ここをクリックしてください) Win32 API を使用する必要がありますが、これを行うことはできません... まったく。これは、Linux (およびおそらく mac) でモノラルで動作する必要があります。とにかくこれを機能させる方法はありますか?または、どのような代替手段を追求する必要がありますか? (HTML への切り替えを検討していましたが、クロスプラットフォームの適切な HTML コントロールはありますか?) (これらはすべて無料である必要があります)。
ありがとうございます。
私は最終的に次を使用してそれを行うことができました:
すべてのリンクを Links スタックに追加し、MouseDown イベント内で GetLink を使用するだけです :)
python - sendLine が整数を送信しない (Twisted Python)
Twisted ライブラリを使用して Python で MUD を作成しています。私は現在、sendLine メソッドを介して LineReceiver モジュールに整数を送信しようとしています。ただし、整数を送信しようとすると、プログラムの実行中に次のエラーメッセージが表示されます。
エラーの原因となっている行は次のとおりです。
c++ - Linuxでacceptが呼び出されずに接続するリッスンソケット
私はUbuntu Linuxでコードを実行しています.Setを使用して、リッスンしているソケットにアクティビティがあるとき(つまり、誰かが接続しようとしているとき)を選択してチェックすることになっています.問題は、選択すると常に0が返され、接続しようとするとすぐにつながります。しかし、サーバーでは、select は常に 0 を返すため、Accept は呼び出されません。
それが役立つ場合に備えて投票を実行するコードです
追加のコードは次のとおりです。
ここでも使用されています { // リスニング ソケットから接続を受け取るデータ ソケットを定義します。
ご覧のとおり、選択からアクティビティを取得した後まで .Accept を実行しませんが、そこまで到達することはありません Bind および listen 呼び出しはここにあります template void ListeningManager::AddPort( port p_port ) { if( m_sockets.size( ) == MAX ) { Exception e( ESocketLimitReached ); 投げる(e); }
python - 泥マップの描画
泥の地図を描いてみました。私はpythonとgraphvizを使用して次のようなものを取得しました:
http://img23.imageshack.us/img23/5222/arrasz.png
ご覧のとおり、いくつかの場所があり、N / S / W / E / Up/Downに行くと他の場所に行きます。
graphvizを使用して、このマップを描画して、北の位置を南に、東の位置を西の位置の右側に配置することは可能ですか?
私はそのように意味します:
それとも、graphvizよりも自動的に描画するための優れたツールがありますか?
java - 文字列またはフォーマットを構築するためのJava連結
現在、Javaを使用してMUD(テキストベースのゲーム)を作成しています。MUDの主要な側面の1つは、文字列をフォーマットしてユーザーに送り返すことです。これをどのように達成するのが最善でしょうか?
次の文字列を送信したいとします。
あなたは誰かに「こんにちは!」と言います -ここで、「誰か」、「言う」、「こんにちは!」すべて変数です。パフォーマンスの面で最高ののはどれですか?
"You " + verb + " to " + user + " \"" + text + "\""
また
String.format("You %1$s to %2$s \"%3$s\"", verb, user, text)
または他のオプション?
最終的にどちらが使いやすくなるかはわかりませんが(どこにでもあるので重要です)、+と連結すると少し混乱するので、この時点で考えています。大きな線のいくつか。この場合にStringBuilderを使用すると、読みにくくなると思います。
ここに何か提案はありますか?
arrays - これはYAMLを使用する有効な方法ですか?
私は一般的にsnakeyamlとyamlに不慣れです。MUDの「部屋」に関する情報を保存するために必要です。
部屋のエントリは次のようになります。
基本的に、各部屋にはid
、プレーヤーが部屋に入ったり検索したりするときに表示されるテキストがあります。また、同じyamlファイルで宣言されている「オブジェクト」の配列もあります。
yamlファイル内でこの構成は可能ですか?また、各部屋と各オブジェクトを配列に抽出する必要があるため、次のようになります。
この構成により、1つのループを作成し、配列の位置ですべての値を参照することにより、ファイルを解析し、GenericRoomクラスとGenericObjectクラスを簡単に作成できます。これはSnakeYAMLが私のためにできることですか?私はいくつかの例で遊んでいますが、実際のYAMLに関する知識が不足しているため、良い結果を得るのが難しくなっています。
java - ソケットを使用して泥からデータを受信する-telnetネゴシエーション?
最初に少しコンテキストを説明します。質問を理解しやすくするために、Javaネットワーキングについては十分に理解していますが、これまでに行ったすべてのネットワーキングは、コマンドを送信しました->応答を待ちます->繰り返します。最近、暇なときに少し違うことをやっています。マッドに接続したいのですが、標準のマッドクライアントを使用しています。しかし、私は考え始めて、泥に接続するサーバーを作成できるかどうかを確認することにしました(したがって、クライアントを使用して中間サーバーに接続し、次に泥に接続します) 。ほとんどの場合、これは私が最初にできるかどうかを確認するためだけのものでした(数人の友人と私はゲームチャットの外でセットアップしたかったなど)が、私はいくつかの問題に遭遇しており、それらはかなり見えるので、将来の参照のために解決したいと思います重要。
これまでのところ、ServerSocketをセットアップし、クライアント接続を受け入れ、入力ストリームと出力ストリームを保持するBufferedReaders / PrintWritersを生成します(新しい接続ごとのスレッド内)。次に、そのクライアントスレッド内に2番目のスレッドを生成して泥に接続します。これにより、読み取り行が常にループされ、クライアントスレッドの出力ストリームに出力されます。クライアントスレッドはコマンド入力を待機してループし、それを処理します。
このアプローチが適切かどうかはわかりません(前述したように、入力と出力を同時に処理する必要があるソケットプログラミングを行ったことがありません)。ただし、主な問題は、出力が数行後に停止することです。サーバーは泥にうまく接続し、ログイン画面の約12行を印刷します(重要な2行の間隔で問題が発生する場合は、この番号を明確にすることができます)。私は周りを見回し、同様の問題を回避するために一連のバイトを送信する必要があると述べた他の質問のいくつかの言及(telnetネゴシエーション?私は用語に精通していません)が、問題に関する具体的な情報をあまり見つけることができませんでした。
私はそれが私が知らない技術であるとかなり確信していますが、誰かが私にいくつかのリソースを指摘したり、一般的な解決策などを提供したりできれば、それは素晴らしいことです。
java - スレッドを「セッション」として使用する
私はテキストベースのゲーム、MUDを開発しています。プログラムの基本機能の準備ができました。次に、一度に複数のクライアントに接続できるようにしたいと思います。私はそれを達成するためにスレッドを使用する予定です。
私のゲームでは、各プレイヤーの現在の位置や体力ポイントなどの情報を保存する必要があります。私はそれをデータベースに保持することができましたが、それは非常に速く、時には毎秒変化するので、データベースの使用は非効率的です(私は正しいですか?)。
私の質問は、スレッドは「セッション」として動作できるか、つまり、各ユーザーに固有のデータを保持できるかということです。
はいの場合、それがどのように機能するかを理解するのに役立つリソースを教えていただけますか?
いいえの場合、あなたは何を提案しますか?データベースは良いオプションですか、それとも他の何かをお勧めしますか?
乾杯、エレイスト
javascript - JavaScript でダンジョンを表現し、モンスターを配置する最良の方法は何ですか?
私は JS を練習するための楽しいプロジェクトとして MUD を作成しようとしています (私は完全な初心者ですが、codecademy からもっと学ぶことに触発されました!) JS で自分のダンジョンを表現する方法についてアドバイスを得られることを望んでいました。 .
ダンジョンに欲しい機能は次のとおりです。
- ダンジョンにはランダムな数の部屋が必要です(指定されたパラメーター内)
- 部屋にはモンスターが自動的に配置されます
- (今のところ、部屋がどのように接続されているかは無視できます)
JS は OO 言語であるため、ダンジョンを表現する最善の方法はオブジェクトであると考えました。
その後、ルーム オブジェクトのメソッドを作成して、プレーヤーがルーム内のものとやり取りできるようにする予定です。
質問:
1) これは良いアイデアですか、うまくいきますか?
2) オブジェクトの乱数のプロパティを生成するにはどうすればよいですか?
ありがとう!