2011-12-30 12 views
6

私はPerl初心者です(ここの人に比べて)。私は、コマンドプロンプトを使って多くのことをするためのプログラムを書くことができることを十分に知っています。ある時点で、私は迷路を作ってそれを解決させるコマンドプロンプトゲームを書くことに決めました。品質のグラフィックスに加えて、欠けていた唯一のものは、私が迷路で行ったたびにEnterを押さずにWASDコントロールを使用する能力でした。Perlは一度に1文字ずつSTDINから入力することができますか?

私のゲームの仕事をするために、デフォルトの\nのように、入力を分けるために何かを使わなくても、PerlにSTDINの入力として1文字を持たせたいと思っています。どうすればこれを達成できますか?

私は単純な回答をオンラインで探していましたが、私が持っている本で検索しましたが、何も見つかりませんでした。私は$/=""を設定しようとしましたが、それはすべての入力をバイパスするようです。私の質問には本当に簡単な答えがあるかもしれないと思うが、それは不可能かもしれないと恐れている。

また、$/=""は実際に入力をバイパスしているのですか、それとも入力があまりにも速いので、キーをまだ押していないと入力がないと仮定していますか?

+2

[Term :: ReadKey](http://search.cpan.org/perldoc?Term::ReadKey) – ikegami

+0

@ikegamiパーフェクト! – PhiNotPi

+0

[WindowsでPerlを使用してSTDINから1文字を読み込むにはどうすればよいですか?](https://stackoverflow.com/questions/2021482/how-do-i-read-a-single-character-from-stdin - perl-on-windowsを使用する) –

答えて

4

IO::Promptを使用することができる。$/ = ''設定に関するperldoc -v '$/'から

#!/usr/bin/env perl 

use strict; 
use warnings; 

use IO::Prompt; 

my $key = prompt '', -1; 
print "\nPressed key: $key\n"; 

関連抜粋:

入力レコードセパレータ、デフォルトで改行。これはPerlの の "行"のアイデアに影響します。 awkのRS変数のように動作します. ヌル文字列(空白行にはスペースやタブを含めることはできません)に設定すると、空白行をターミネータとして扱います。

1

* nixを使用している場合は、Cursesが便利です。

これは、あなたが望むことをするgetchメソッドを持っています。

Term::TermKeyも潜在的な解決策のようです。

関連する問題