見出し画像

[PHP]「じゃんけんゲーム」を作る。

最近、PHPを学習していても以前より理解がスムーズになってきました。少しずつプログラミングに慣れてきた証拠でしょうか。

本日はPHPを使ってじゃんけんゲームを作ります。

コードを書いてみてプログラミング初学者にはちょうどいい難易度だったかと思いましたので記録しておきます。

要件

じゃんけんゲームを作る前に要件をまとめてみました。
※ファイルsample.phpにコードを書いていきます。

  • キーボード入力でユーザーが出す手を決める

  • コンピュータはランダムで出す手を決める。

  • if文でじゃんけんの勝敗の処理を行う。

では作っていきます。


コード全体

ini_set("display_errors""Off"); 

$hand_list = array(
  1 => 'グー',
  2 => 'チョキ',
  3 => 'パー',
);

echo '1:グー, 2:チョキ, 3:パー'."\n";
echo 'じゃんけんの手を決めてください >>> ';

$input = trim(fgets(STDIN));

if(!$hand_list[$input]):
  echo '正しく入力してください';
  exit();
endif;

$your_hand = $hand_list[$input];
$com_hand = $hand_list[rand(13)];

echo 'あなた: '.$your_hand."\n";
echo 'コンピューター: '.$com_hand."\n";

if($your_hand == $com_hand):
  $result = 'あいこ';
elseif(
    $your_hand == 'グー' and $com_hand == 'チョキ' or 
    $your_hand == 'チョキ' and $com_hand == 'パー' or
    $your_hand == 'パー' and $com_hand == 'グー'):
  $result = 'あなたの勝ち!';
else:
  $result = 'あなたの負け';
endif;

echo $result;

/* sample.phpの実行結果 */
1:グー, 2:チョキ, 3:パー
じゃんけんの手を決めてください >>> 2   
あなた: チョキ      
コンピューター: パー
あなたの勝ち!       


必要なリストと変数を定義

// じゃんけんの手を連想配列で定義
$hand_list = array(
  1 => 'グー',
  2 => 'チョキ',
  3 => 'パー',
);

じゃんけんの手を連想配列として定義します。

キーである「1, 2, 3」はユーザーに入力してもらう数字に対応しています。
(詳しくはのちに説明します)

例えば、ユーザーが「1」を入力した場合は「グー」を出したということになりますね。

標準入力

ユーザーにじゃんけんで出す手を決めてもらわなければなりません。

そこで使えるのがfgets()です。
この関数はファイルポインタから 1 行取得するのが役割ですが、引数にSTDINを渡すと標準入力として外部から与えられた入力値を受け取ることができます。

あまり使われることのない引数らしいですがプログラミングテストなどではよく使われるので知っておいて損はないでしょう。

ただし、受け取った値には改行文字などが含まれている場合があるのでtrim()で除去しましょう。

echo '1:グー, 2:チョキ, 3:パー'."\n";
echo 'じゃんけんの手を決めてください >>> ';

$input = trim(fgets(STDIN));

$your_hand = $hand_list[$input];

上記のコードでsample.phpを実行すると以下のようになるので>>>の箇所に1, 2, 3のいずれかを半角数字で入力しましょう。すると$inputに入力した数値が代入されます。

1:グー, 2:チョキ, 3:パー
じゃんけんの手を決めてください >>> //数字を入力

入力した数値に対応したじゃんけんの手を$hand_list[$input]として$your_handに代入します。

もしユーザーが誤って文字や全角数字などを入力した場合、プログラムが正常に動かなくなってしまうので対策を行っていきます。

// エラーコードを非表示に設定
ini_set("display_errors""Off"); 

if(!$hand_list[$input]):
  echo '正しく入力してください';
  exit();
endif;

if構文では$hand_list[$input]が取得できなかったときの処理を記述しています。

例えばユーザーが4と入力して$inputに4が代入されても$hand_list[4]は存在しないのでこのif文が処理してくれます。

if文の条件に当てはまった場合、エラーコードが表示されてしまうので念のためにエラーコードを非表示設定にしておきます。

コンピュータが出す手を定義

$com_hand = $hand_list[rand(13)];

コンピュータにはランダム関数を使って出す手を決めます。ユーザーが出した手$your_handに対して$com_handにコンピュータが出した手を代入します。

rand(1, 3)とすることで1,2,3のいずれかをランダムで選びます。

それに対応する手が$com_handに代入されます。

ユーザーとコンピュータの出した手を出力

echo 'あなた: '.$your_hand."\n";
echo 'コンピューター: '.$com_hand."\n";

/* 実行結果 */
あなた: チョキ      
コンピューター: パー

ここはただお互いがどっちの手を出したのかを確認するための処理です。

じゃんけんの結果を出力

if($your_hand == $com_hand):
  $result = 'あいこ';
elseif(
    $your_hand == 'グー' and $com_hand == 'チョキ' or 
    $your_hand == 'チョキ' and $com_hand == 'パー' or
    $your_hand == 'パー' and $com_hand == 'グー'):
  $result = 'あなたの勝ち!';
else:
  $result = 'あなたの負け';
endif;

echo $result;

/* 実行結果 */
あなたの勝ち!

ここがじゃんけんゲームの重要処理です。

あいこの場合の判別は簡単です。お互いの出した手が一致すればあいこなので条件は$your_hand == $com_handです。

elseifの条件式にはユーザーが勝つ場合の条件をすべて書き出しています。
AorBで条件をつなげることで「AまたはB」と表せます。

elseはどの条件にも当てはまらなかった(あいこでもユーザーの勝ちでもなかった)場合であるの処理が行われます。つまりユーザーの負けだった処理が行われます。

その結果を$resultに代入して最後に出力しています。

簡易的ではありますが、これでじゃんけんゲームが完成しました。
これからもプログラミングの勉強を頑張りたいと思います。

この記事が気に入ったらサポートをしてみませんか?