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

2020年6月9日

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

t f B! P L
やっぱりプログラミングの王道は、ゲームでしょ!と、若き頃言っていたのを思い出す、ユゲタです。 「お題に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でやることにしましょう。

このブログを検索

プロフィール

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

ブログ アーカイブ

QooQ