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

2020年6月11日

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

youtubeでゲーム実況が視聴数を半端なく稼いでいるようですが、全く見たことが無い、ユゲタです。 スポーツも、ゲームも、人がやっているのを見るよりも、自分でやるほうが好きという人も多いと思いますが、何も考えずに見ていられるというのも、今どきのエンタメなんですかね? もしかすると、プログラミング実況というのも見ている人は勉強になるのかもしれませんね。 え? もうやってる人いる? それは見ないといけないな・・・ そんなワケで、実況ではないですが、今回は「じゃんけんゲーム」をshellプログラムでコーディングしてみたいと思います。

本日のIT謎掛け

「ゲーム実況」と、かけまして・・・ 「吹奏楽」と、ときます。 そのココロは・・・ チューバ(youtuberと楽器のチューバ)の雰囲気で、表現に効果が出ます。

コード

#!/bin/bash # ユーザーの入力した手のマッチング処理 _match(){ my_spr=$1 com_spr=$2 res=`_threesomes ${my_spr} ${com_spr}` echo "あなたの出した手は、${_spr_val[$my_spr]}です。" echo "コンピュータの出した手は、${_spr_val[$com_spr]}です。" if [ "$res" = "win" ];then echo "あなたの勝ちです。" elif [ "$res" = "lose" ];then echo "あなたの負けです。" else echo "引き分けです。" fi } # key->string _spr_val=(グー チョキ パー) # computer-random _com_spr(){ echo `expr $RANDOM "*" 3 / 32768` } # 三つ巴判定 _threesomes(){ my_spr=$1 com_spr=$2 if [ "$my_spr" = "$com_spr" ];then echo "draw"; elif [ "$my_spr" = "0" ] && [ "$com_spr" = "1" ];then echo "win"; elif [ "$my_spr" = "1" ] && [ "$com_spr" = "2" ];then echo "win"; elif [ "$my_spr" = "2" ] && [ "$com_spr" = "0" ];then echo "win"; else echo "lose"; fi } # input read -p "Input : じゃんけん [ 0:グー , 1:チョキ , 2:パー ] : " my_spr com_spr=`_com_spr` _match ${my_spr} ${com_spr}

実行

$ bash janken.sh Input : じゃんけん [ 0:グー , 1:チョキ , 2:パー ] : 1 あなたの出した手は、チョキです。 コンピュータの出した手は、パーです。 あなたの勝ちです。 $ bash janken.sh Input : じゃんけん [ 0:グー , 1:チョキ , 2:パー ] : 1 あなたの出した手は、チョキです。 コンピュータの出した手は、グーです。 あなたの負けです。 $ bash janken.sh Input : じゃんけん [ 0:グー , 1:チョキ , 2:パー ] : 1 あなたの出した手は、チョキです。 コンピュータの出した手は、チョキです。 引き分けです。 無事に、ちゃんと勝ち負けしているのが分かります。

解説とまとめ

今回のShell言語でのじゃんけんゲームは、待ち状態の入力モードと、配列、関数、乱数、などが学習できました。 他の言語が便利になりすぎている反面、shellの乱数の取り出し方などは、独特過ぎてもはや裏技にしか見えません。 linuxのシステム変数で乱数を持っているなんて、知らんかった・・・ あと、起動コマンドですが、"sh"ではなくて"bash"にしているところ、注意してくださいね。 配列操作がshではどうしてもできずに、bashで対応しました。 グー、チョキ、パーの配列作っているところ、クォーテーションがなくて、普通のエンジニアであれば、ドキドキしてしまうポイントですね。 shellって、たまに使っておかないと、すぐに忘れてしまう言語です。

このブログを検索

ごあいさつ

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