知らない人も多いし、少し古いイメージのawk言語が、大好きな、ユゲタです。
akw言語は、コマンドワンライナーで、文字列整形をするのが一般的な使い方ですが、今回はそれを使って、じゃんけんゲームを作ってみたいと思います。
本日のIT謎掛け
「コマンドワンライナー」と、かけまして・・・
「台所で洗っていたて落としてしまった茶碗」と、ときます。
その、ココロは・・・
ソッコーで、カケ(書け、欠け)ます。
AWKでじゃんけんゲーム
BEGIN {
FS=",";
srand();
SPR_ARR[1]="グー";
SPR_ARR[2]="チョキ";
SPR_ARR[3]="パー";
}
/[1-3]/{
MY_SPR = $1;
COM_SPR = int(rand() * 3) + 1;
FLG = "true";
}
/[^1-3]/{
FLG = "false";
}
END{
if(FLG == "true"){
print "あなたの出した手は、"SPR_ARR[MY_SPR]"です。";
print "コンピュータの出した手は、"SPR_ARR[COM_SPR]"です。";
RES = SPR_MUTCH(MY_SPR , COM_SPR);
print RESULT_STR(RES);
}
else{
print "「1,2,3」で入力してください。";
}
}
function SPR_MUTCH(MY_SPR , COM_SPR){
if(MY_SPR == COM_SPR){
return "draw";
}
else if(MY_SPR == 1 && COM_SPR == 2){
return "win";
}
else if(MY_SPR == 2 && COM_SPR == 3){
return "win";
}
else if(MY_SPR == 3 && COM_SPR == 1){
return "win";
}
else{
return "lose";
}
}
function RESULT_STR(RES_KEY){
if(RES_KEY == "win"){
return "あなたの勝ちです。";
}
else if(RES_KEY == "lose"){
return "あなたの負けです。";
}
else{
return "引き分けです。";
}
}
実行と解説
$ echo 1 | awk -f janken.awk
あなたの出した手は、グーです。
コンピュータの出した手は、チョキです。
あなたの勝ちです。
$ echo 2 | awk -f janken.awk
あなたの出した手は、チョキです。
コンピュータの出した手は、チョキです。
引き分けです。
$ echo 3 | awk -f janken.awk
あなたの出した手は、パーです。
コンピュータの出した手は、チョキです。
あなたの負けです。
$ echo "a" | awk -f janken.awk
「グー:1 , チョキ:2 , パー:3」の数値で入力してください。
awkは入力の受付がリアルタイムでできないため、上記のように、事前に入力をコマンドで送ってあげる方式にしました。
今回は、「グー:1 , チョキ:2 , パー:3」の数値入力で対応していますが、それ以外を入力すると、警告文字を出す分岐も入れてみました。
また、awkの乱数はrand()で簡単に取得できるのですが、randomの宿命である、同じ乱数が返る状態はawkも健在のため、BEGINでseed処理として、"srand();"を宣言してあげることで、タイムシードできるようになります。
配列も、awkは、宣言なしにいきなり構築できちゃうのも、他の言語を使っている人は、ドキドキしてしまうんじゃないでしょうか?
ただ、プログラミングしてみると、思いの外、スムーズに入力できて、不具合が出にくい言語であることがわかります。
最後に・・・
普段はワンライナーで利用することが多いのですが、こうして大きめの処理をファイルにしておいて、便利に呼び出すようなライブラリを作っておくのも手ですね。
まさか、awkでゲームを作るっていうのは、かなりの荒行だとは思いますが・・・
GUIは難しそうだな・・・
0 件のコメント:
コメントを投稿