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

2020年6月19日

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

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

このブログを検索

プロフィール

自分の写真
プログラミングとサーバーを心の底から楽しむクリエーターです。 経営者であり、開発者でもありますが、得意としているのは、アイデア創出で、出来高は無限大です。

ブログ アーカイブ

QooQ