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

2020年6月9日

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

やっぱりプログラミングの王道は、ゲームでしょ!と、若き頃言っていたのを思い出す、ユゲタです。 「お題にTRY」シリーズの第二弾は「じゃんけんゲーム」を作ってみます。 いろいろな言語に挑戦してみて、それぞれの特性を学習して行きますよ〜。 初回はPHPです。

本日のIT謎掛け

「ゲームプログラミング」と、かけまして・・・ 「お笑い芸人のネタ帳」と、ときます。 そのココロは・・・ 楽しい半面、意外と静かに黙々と書いていくイメージです。

じゃんけんゲームの仕様作成

初回なので・・・ある程度の仕様を決めておきたいと思います。 まず、じゃんけんの基本「0:グー」「1:チョキ」「2:パー」をそれぞれ、配列に格納し、keyになる番号を入力します。 次に、コンピュータ側がランダムで値を決める。 入力後に、勝ち負け判定を行って、結果を表示。 比較的単純ですが、ほぼコマンドラインで動作することを考慮して、見た目はテキストのみで進めます。 このプログラミングから学習できるポイントは、
・配列操作 ・乱数の取得 ・入力値の受け取り(標準入力:STDIN) ・三つ巴の勝ち負け判定(パターン条件文)
てな感じでしょう。

ターミナル版

<?php spr::input_number(); class spr{ // 基本データ public static $spr_arr = array("グー","チョキ","パー"); // 入力処理 public static function input_number(){ print "- Input [0:グー , 1:チョキ , 2:パー] : "; $stdin = trim(fgets(STDIN)); self::check_match($stdin); } // 勝敗判定 public static function check_match($stdin=""){ // 正常入力 if(isset(self::$spr_arr[$stdin])){ $com_spr = self::get_computer_spr(); print sprintf(" あなたの出した手は、%sです。\n" , self::$spr_arr[$stdin]); print sprintf(" コンピュータの出した手は、%sです。\n" , self::$spr_arr[$com_spr]); switch(self::threesomes($stdin,$com_spr)){ case "win": print "あなたの勝ちです!\n"; break; case "lose": print "あなたの負けです!\n"; break; case "draw": print "あいこです!もう一回\n"; // あいこの場合はもう一回 self::input_number(); break; } } // 入力値エラー else{ print " ! Error : 番号で入力してください。\n"; self::input_number(); } } // コンピュータ側の出した手(ランダム) public static function get_computer_spr(){ return rand(0,2); } // 三つ巴判定 public static function threesomes($my_spr,$com_spr){ if($my_spr == $com_spr){ return "draw"; } else if(($my_spr == 0 && $com_spr == 1)){ return "win"; } else if(($my_spr == 1 && $com_spr == 2)){ return "win"; } else if(($my_spr == 2 && $com_spr == 0)){ return "win"; } else{ return "lose"; } } }

実行

$ php 001.php - Input [0:グー , 1:チョキ , 2:パー] : 1 あなたの出した手は、チョキです。 コンピュータの出した手は、グーです。 あなたの負けです! $ php 001.php - Input [0:グー , 1:チョキ , 2:パー] : 1 あなたの出した手は、チョキです。 コンピュータの出した手は、パーです。 あなたの勝ちです! $ php 001.php - Input [0:グー , 1:チョキ , 2:パー] : 1 あなたの出した手は、チョキです。 コンピュータの出した手は、パーです。 あなたの勝ちです! $ php 001.php - Input [0:グー , 1:チョキ , 2:パー] : a ! Error : 番号で入力してください。 - Input [0:グー , 1:チョキ , 2:パー] : 1 あなたの出した手は、チョキです。 コンピュータの出した手は、チョキです。 あいこです! - Input [0:グー , 1:チョキ , 2:パー] : 2 あなたの出した手は、パーです。 コンピュータの出した手は、チョキです。 あなたの負けです!

まとめ

当初想定していたよりも、大きなプログラムになってしまいました。 判定箇所など、もっとコンパクトに書けるとは思いますが、今回は見やすさ、わかり易さも重視して、 ifを垂れ流してみました。 コンピュータの出しては0~2の整数値をランダムで出すだけですが、 前回の勝ち負け、あいこの時に、次に出す手をアルゴリズムで決めるというのもAIっぽくなるけど、if文だけでやると、かなり寒い結果になりそうなので、やっぱりここはランダム一発だけにしておきました。 ブラウザにHTMLを表示するパターンの方が、一般的かと思いましたが、今回は、他の言語と似た感じのターミナル版のみをプログラミングしてみました。 GUI版は、Javascriptでやることにしましょう。

このブログを検索

ごあいさつ

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