じゃんけんのコードを考えていて、if()文で書いてもなんか冗長だなあと感じていました。
↓こんな感じのコードです。
($bのuserHandは入力で受け取れるように改良してください。)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<?php $hands = ['ぐー', 'ちょき"', 'ぱー']; $a = rand(0, 2); //pcHand $b = 1; //userHand echo "PCの手は{$hands[$a]}です。\n"; echo "あなたの手は{$hands[$b]}です。\n"; if($a == $b) { echo "あいこ"; } elseif($a == 0 && $b == 1 || $a == 1 && $b == 2 || $a == 2 && $b == 0) { echo "アナタのまけです..."; } elseif($a == 0 && $b == 2 || $a == 1 && $b == 0 || $a == 2 && $b == 1) { echo "あなたのかちです!"; } ?> |
一応、じゃんけんのコードとしてはちゃんと勝敗がつけられるのですけれども...
そこで、見つけたのが「ジョイタスネット」というサイトの「PHPでじゃんけんゲームを作ろう!」という記事です。
外部リンク:PHPでじゃんけんゲームを作ろう!
勝敗が、たったの一行なんですよ!!!
1 |
<p><?=$results[($userHand + 3 -$pcHand) % 3]?></p> |
はじめ、コードを読んでいて勝敗はどこでつけているのかと悩んでいたのですが、この一行を読み解いたときに感動してしまいました。
ジョイタスネットさんのコードはWeb用に整えられていますので、ざっくりと分かりやすく取り出してみます。
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php $hands = ['ぐー', 'ちょき', 'ぱー']; $results = ['あいこ', 'アナタのまけです...', 'アナタのかちです!']; $pcHand = rand(0, count($hands) - 1); $userHand = 1; echo "PCの手は{$hands[$pcHand]}です。\n"; echo "あなたの手は{$hands[$userHand]}です。\n"; echo $results[($userHand + 3 - $pcHand) % 3]; ?> |
たとえば、$userHandが0(ぐー)で$pcHandも0(ぐー)の場合、
$results[($userHand + 3 - $pcHand) % 3]; → (0+3-0)%3 = 0(あいこ)
$userHandが2(ぱー)で$pcHandが1(ちょき)の場合、
$results[($userHand + 3 - $pcHand) % 3]; → (2+3-1)%3 = 1(アナタのまけです...)
$userHandが1(ちょき)で$pcHandが2(ぱー)の場合、
$results[($userHand + 3 - $pcHand) % 3]; → (1+3-2)%3 = 2(アナタのかちです!)
すごいすごいすごい(語彙力w
計算で勝敗が導き出されるなんて、プログラミングの力点を感じられて感動しました!
どうしたらこんな素晴らしいコードが書けるのか、早くこんな思考が持てるようになりたいです。はあ、でもだんだんとコードが読めるようになってきて少し成長したと言えるでしょうか。
一人で盛り上がってて済みません。初心者はこんな感動するのかなど生暖かく見守って頂けたら幸いです。きょうのプログラミング勉強のピックアップでした!(*'ω'*)