2012-03-22 13 views
5

私はちょうどゲームnethackのためのAIボットを始めています、そして、私はソースにある '人間のチェック'をバイパスすることはできません。私は(具体的にNode.jsの)、JavaScriptで働いている、とにより上記に、それは私がプログラムから再生させませんNode.jsからnethackに接続するには?

#ifdef TTY_GRAPHICS 
    /* idea from rpick%[email protected] 
    * prevent automated rerolling of characters 
    * test input (fd0) so that tee'ing output to get a screen dump still 
    * works 
    * also incidentally prevents development of any hack-o-matic programs 
    */ 
    /* added check for window-system type -dlc */ 
    if (!strcmp(windowprocs.name, "tty")) 
     if (!isatty(0)) 
     error("You must play from a terminal."); 
#endif 

:私が話しているコードのセクションがnethack/sys/unix/unixunix.cです私がbashシェルの子プロセスを作成して起動するように指示していても、nethackです。ソースを再コンパイルせずに上記をバイパスする方法を理解する必要があります。

私が使用している現在のコードは次のようになります。

"use strict"; 

var env = { TERM: 'tty' }; 
for (var k in process.env) { 
    env[k] = process.env[k]; 
} 

var terminal = require('child_process').spawn('bash', [], { 
    env: env, 
}); 

terminal.stdout.on('data', function (data) { 
    console.log('stdout: ' + data); 
}); 

terminal.on('exit', function (code) { 
     console.log('child process exited with code ' + code); 
}); 

setTimeout(function() { 
    terminal.stdin.write('nethack'); 
    terminal.stdin.end(); 
}, 1000); 

プログラムの出力は次のようになります。

stdout: You must play from a terminal. 

child process exited with code 1 

何のNode.js/JavaScriptの(とは、他の言語やフレームワーク、もし可能)黒魔法私はこの問題を解決するために使用できますか?

+1

これについては分かりませんが、ノードの[TTYモジュール](http://nodejs.org/api/tty.html)を調べるとよいでしょう。また、[このスレッド](http://groups.google.com/group/nodejs/browse_thread/thread/6fd25d16b250aa7d)も興味深いかもしれません。 –

+0

ええ、私はTTYモジュールをチェックアウトしました。v0.6 +は 'tty.open()'メソッドを廃止しているようですが、これは私が望むものかもしれませんが、廃止された 'process.binding 'stdio') 'コール、私はドキュメントを見つけることができません。私はスレッドをチェックアウトします。ありがとう。 – chrisdotcode

答えて

3

ptysはisatty()でtrueを返すため、色んな点検があります。 PtyはPseudo terminalの略で、プログラムが端末であるとふりまとうことができます。これがXtermとScreenの仕組みです。そのチェックがそれらのプログラムを許可しなかった場合、それらのプログラムでNetHackを再生することはできません。

私は一度も使ったことがありませんが、pty.jsはCコードで使用するものに正確にバインドされており、インターフェイスが理にかなっています。

+0

これは完璧に見える、ありがとう:-) – chrisdotcode

関連する問題