問題タブ [nethack]
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.
python - この NetHack 関数を Python に移植するにはどうすればよいですか?
ゲームの NetHack と同じムーンフェイズ値を返す Python 関数を作成しようとしています。これはhacklib.cにあります。
NetHack コードから対応する関数を単純にコピーしようとしましたが、正しい結果が得られるとは思えません。
私が書いた関数はphase_of_the_moon()
.
関数position()
とphase()
は、ネットで見つけたもので、関数の成功の指標として使用しています。これらは非常に正確であり、nethack.alt.org サーバーとほぼ一致する結果が得られます ( http://alt.org/nethack/moon/pom.txtを参照)。しかし、私が求めているのは、元の NetHack 機能の正確な複製であり、特異性はそのままです。
私の機能と「コントロール」機能が少なくとも同じムーンフェイズを与えることを期待していますが、現在はそうではなく、その理由もわかりません!
NetHack コードは次のとおりです。
これがgetlt()
関数です(hacklib.cにもあります):
ここに私のPythonコードがあります:
artificial-intelligence - NetHack ボットの構築: ベイジアン分析は良い戦略ですか?
私の友人は、NetHack ボット (ローグライク ゲームをプレイするボット: NetHack) の構築を始めています。似たようなゲームである Angband 用の非常にうまく機能するボットがありますが、部分的に機能するのは、町に戻るのが簡単で、アイテムを獲得するために常に低レベルをスカムできるからです。
NetHack では、この問題ははるかに困難です。なぜなら、ゲームは大胆な実験に報いるものであり、基本的に 1,000 のエッジ ケースとして構築されているからです。
最近私は、スパムが作成されるのとほぼ同じ方法で、ある種の単純なベイジアン分析を使用することを提案しました。
基本的に、ボットは最初に、見つけたすべてのアイテムまたはクリーチャーで可能なすべてのアクションを試行し、その情報を保存することで、コーパスを構築します。時間が経つにつれて、適度にプレイ可能なモデルを生成できるようになります。
良いスタートとは何かという正しい方向性を示してくれる人はいますか? 私は間違ったツリーを吠えていますか、それともベイジアン分析の考え方を誤解していますか?
編集:私の友人は、python バインディングを可能にする彼の NetHack パッチの github リポジトリを作成しました。まだまだ原始的な状態ですが、興味のある方はどうぞ…
iphone - UILabelなどの他のエンコーディングの「特殊」文字を表示する
iPhoneで端末をシミュレートして、実際のDEC端末で楽しんだ原始的なグラフィックを使用してNethackのようなゲームをプレイできるようにしたいと思います。Nethackでは、vt互換端末の場合はDECgraphicsを、コードページ437をサポートする場合はIBMGraphicsを選択できます。
これらの特殊なグラフィック文字は、端末に送信される文字列によって生成されることを私は知っています(vt100.netには、端末のマニュアルやテストプログラムを含む膨大な量の情報があります)。これらの文字列を受信して解釈することはできますが、UIViewでこれらの文字を再現して表示できる必要があります。
kCFStringEncodingMacVT100とkCFStringEncodingDOSLatinUSがパズルの鍵のようです。これは、UILabelに「特殊文字」グリフを取得するために私が何をしようとしたかを示す部分的なコードです。
0から255までのcの値を試しました。このコードを使用して、スペースから「〜」までの文字を表示できますが、コーナーやその他の行文字はまったくありません。表示する文字がない場合、charStringはnilです。
これで、Courier New TTFにこれらの文字が含まれていると確信しています。Macでは、ターミナルフォントをCourier Newに設定してNethackを再生でき、DECgraphicsを設定でき、表示は問題ありません。
したがって、質問は次のとおりです。
- 上記のコードの何が問題になっていますか?
- DECの特殊文字やコードページ437をサポートする、自由に利用できる等幅のTrueTypeフォントはどれですか。
- それらのグリフが存在することを確認するために、TTFを取得したら、どのようにテストできますか?
- これらのグリフをUILabelなどでどのように表示できますか?
(利用可能なグラフィカルタイルセットを使用したくない、好きではありません。すでに無料で利用できるNethackが少なくとも2つあることは知っていますが、必要な単純なキーボードインターフェイスを備えたものはありません。ポップアップがウィンドウに表示されます。すべてのアプローチが本当に遅くてイライラするからです。それは簡単なプロジェクトではないことを私は知っています。そしていつかAngbandしたいと思うかもしれません。)
c - NetHackソースコードで「NEARDATA」とはどういう意味ですか?
NetHackのソースコード(Cで書かれている)には、私が理解できないことがいくつかあります。
次のコードは、Nethack3.4.3のソースコードに含まれています。
( http://nethackwiki.com/wiki/engrave.c#line9のengrave.cの9行目)
( http://nethackwiki.com/wiki/cmd.c#line106のcmd.cの106行目)
(cmd.cの157行目)
「NEARDATA」、「STATIC_VAR」、「STATIC_PTR」、「STATIC_DCL」とは何か、またそれらの意味を教えてください。
javascript - Node.jsからnethackに接続する方法は?
ゲーム用のAIボットを開始したばかりnethack
で、ソースにある「ヒューマンチェック」をバイパスすることはできません。私が話しているコードのセクションは次のnethack/sys/unix/unixunix.c
とおりです。
私はJavaScript(より具体的にはNode.js)で作業していますが、上記の理由により、bashシェルの子プロセスを生成して開始するように指示していても、プログラムから再生できませんnethack
。ソースを再コンパイルせずに上記をバイパスする方法を理解する必要があります。
私が使用している現在のコードは次のとおりです。
プログラムの出力は次のとおりです。
この問題を解決するために、どのNode.js / JavaScript(および可能であれば他の言語やフレームワークではない)の黒魔術を使用できますか?
c++ - NetHackコリドーの実装
自分で簡略化されたバージョンをコーディングしている最中なので、NetHackで遊んでいました。私の質問は、廊下はどのように実装されているのですか?私はここ数日アプローチを考えようとしていて、合理的なものを思い付くことができません。
nethack - Nethack のソース コードはどこにありますか
DOS nethack のソース コードを表示できる場所はありますか? ソース コード ファイルをダウンロードしようとすると、ファイルを開くことができません。コードが記載されているウェブサイト/オンライン PDF はありますか? また、初心者向けの C++ ローグライクに関するチュートリアルがあれば、そのリンクを教えていただけますか? ありがとうございました。
python - Python (2.7.x) プログラムに nethack のような ASCII グラフィックを出力させる方法は?
ASCII グラフィックスのフレームを常に出力する必要があるコンソール ゲームを作成しようとしていますが、機能をよりスムーズにする方法を考えています。ゲームが Python で書かれていないとは思いませnethack-console
んが、動き回っていないように見える「アニメーション化された」フレームをどれだけうまく表示できるかを調べており、グラフィックが「再印刷」されたことを明確に示していません。その結果、グラフィックスが非常に一貫したものになり、発生するアニメーションは「単一の印刷物で行われたように見えます」. 説明が十分に明確でない場合は、例を使用しましょう。
000X
「x」が 1 単位左に移動する場合、コンソールでこれを確認したいと思います。
00X0
ではない:
000X
00X0
c - Windows 7 で NetHack をコンパイルするにはどうすればよいですか?
私は NetHack が好きで、楽しみのためにソースを少しいじりたいと思っています。それを行う前に、箱から出してコンパイルできるようにしたいと思いますが、それを実現するのに少なからず困難があります。
ここからソースコードをダウンロードし、ここの指示に従いましたが、うまくいきませんでした。
私は最終的に次のようになりました
それが話している行を見ましたが、実際には何も教えてくれませんでした。インクルードディレクトリに作成されているdate.hファイルが常に空であることに気付きましたが、それもあまり役に立ちません。Install.nt README を読みましたが、その指示はかなり明確に見えました。ただし、何も変更していないため、コンパイルに失敗する理由がわかりません...
私は自分自身を有能なプログラマーだと思っていますが、makefile や C コードを実行可能なアプリケーションにコンパイルすることに関してはほとんど何も知らないので、ここでかなり迷っています。MinGW をダウンロードしてインストールしました... すべて、つまり、MinGW インストーラーを実行したときにアンインストールされたものは何も残っていません。
ここで何が間違っていますか?
編集:date.hが言及されていたように:
OPTIONS_FILE
コメントアウトされているように見える、何らかの呼び出しを行っているように見えることに気付きました。コメントを外して、何が起こるか見てみましょう。
編集2それはうまくいきませんでした。date.h ファイルを手動で作成/更新する必要がある可能性はありますか? もしそうなら、私はそれに何を入れますか?Google への質問のように聞こえます...
EDIT 3私はこれをはるかに古いバージョンで見つけて変更しようとしましたが、どちらも機能しませんでした...
EDIT 4誰かがMakedefsについて言及しましたが、これはクラッシュしているようです。問題を引き起こしていると思われる C 関数を見つけました。
また、コンパイルプロセスのこの時点に到達すると、すぐに次の画像が表示されます。
それで、問題を (私が思うに?) 問題を壊している makedefs ヘルパー プログラムに絞り込んだので、次のステップはその理由を見つけることだと思いますか?
編集 5 : Makedefs.c をコンパイルするときに特別なパラメーターを使用する必要があることが提案されています。Makefile を調べて、コンパイルが行われる場所を見つけました。コンパイルが行われている場所を見つけたと思いますが、ここで何が起こっているのかはよくわかりません。
私はそれ$(*)
が変数または変数に相当する Makefile であることを知っています。
$(U)
を指し$(UTIL)/
、 を$(UTIL)
指し../util
ます。
$(MAKEOBJS)
を指し$(O)makedefs.o $(O)monst.o $(O)objects.o
ます。
準成功した実行で観察した動作を考慮すると、これは理にかなっています (大きなフリーズ前にいくつかのファイルがコンパイルされます) $(O)
。$(OBJ)/
o
$(O)makedefs.o
o/makedefs.o
とにかく、$(link)
を指しgcc
ます。
$(LFLAGSU)
を指す を$(LFLAGSBASEC)
指す を指す を指すを$(linkdebug)
指す-g
$(CONFIG_H)
多数のヘッダー ファイルを指します。
$(INCL)
を指し../include
ます。
$(CFLAGSU)
を指し$(CFLAGSBASE) $(WINPFLAG)
ます。
$(WIN32) を指す を$(CFLAGSBASE)
指す-c $(cflags) -I$(INCL) $(WINPINC) $(cdebug)
$(cflags)
を-mms-bitfields
$(WINPINC)
指すを指す を指すを指す を指す . . そして、そこにあります。RossRidge -D_USE_32BIT_TIME_T.-I$(WIN32)
../win/win32
$(cdebug)
-g
$(WINPFLAG)
-DTILES -DMSWIN_GRAPHICS -D_WIN32_IE=0x0400
しかし、私はここまで来たので、このようなもののいくつかが何を意味するのかを知りたいと思っています. 最初の行を見ると、$(U)makedefs.exe :
. 私には、コンパイルされた出力ファイルのターゲットの宣言のように見えますか? あれは正しいですか?@
また、 の前後の$(link) $(LFLAGSU)
意味は何-o$
ですか? $
とはどういう意味-o
ですか?
とにかく、私が考え出したことを試して、それがまったく機能するかどうかを確認したいと思います. ...ああ、追加-D_USE_32BIT_TIME_T
してもうまくいきWINPFLAG
ませんでした。
最終(ish)編集: RossRidgeが-D_USE_32BIT_TIME_T
フラグを使用するという彼の提案で正しかったことがわかりました。私の間違いは、間違った場所に置いていました。同梱されている Makefile.gcc を見ると、165 行目 (IF ステートメント内) に注目してください。あなた-D_USE_32BIT_TIME_T
はその最後にタックしたい. しかし、その IF ステートメントの ELSE の最後にある 176 行目の最後にも追加する必要があります。そのため、代わりにブロック全体が次のようになります (大きな変更ではありませんが、変更を行わずに私の状況で実行している場合はクラッシュするほど重要です):