[お題にTRY] じゃんけんゲーム #awk

2020年6月19日

テクノロジー プログラミング

知らない人も多いし、少し古いイメージの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は難しそうだな・・・

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。