じゃんけんの勝負判定のコードを書くとします。
もっとも短く書いてください。
全体のコードではなく、勝負判定の部分を、出来る限り短く、です。関数を定義しても構いません。
じゃんけんの勝敗判定は 一行で書けます.
まず,じゃんけんの手を
と0,1,2の数字で表現します
そして,Aさんの出した手を変数$a,Bさんの出した手を変数$bとすると,以下の計算式で, Aさんの勝敗が計算できます.
($a-$b+3)%3;
この計算式の値が
となります.
具体的なプログラムとしては以下のようになります.
<?php // 引数 // 0 グー // 1 チョキ // 2 パー // 戻値 // 0 アイコ // 1 aの負け // 2 aの勝ち function janken($a, $b) { return ($a-$b+3)%3; } $hand = array(0 => "グー ", 1=>"チョキ", 2=>"パー "); $result = array(0 => "アイコ ", 1=>"aの負け", 2=>"aの勝ち"); echo "<pre>"; for ($a=0; $a<3; ++$a){ for ($b=0; $b<3; ++$b){ $r = janken($a, $b); echo "a: $hand[$a] b: $hand[$b] $result[$r]\n"; } } echo "</pre>"; ?>
x = ((A==0)&&(B==1))||((A==1)&&(B==2))||((A==2)&&(B==0));
y = ((A==0)&&(B==2))||((A==1)&&(B==0))||((A==2)&&(B==1));
hantei = x ? 1 : (y ? 2 : 0);
http://192.244.150.43/lecture/lbp/hw/hw05.htm
より引用
----------------------------------------------------
PHPは、3行目のような?を使えたと思います。
http://www.atmarkit.co.jp/flinux/php4/php4_3/php4_4.html
こちらを見ると?は使えそうですね。
あと、演算子は見直さないと駄目かもしれませんが、ロジックは
これでいけるはずです。
これは短い! 論理的に3行で収まるとは…
私が書くとif~endifの嵐になるのでどうしようかと思ってたのですよ…勉強になります!
チョキ = 0, グー = 1, パー = 2 のようにして、次のような感じではどうですか?
// $hand1 = プレイヤー1の手, $hand2 = プレイヤー2の手 function judge($hand1, $hand2) { if (($hand1 + 2) % 3 == $hand2) return 1; if (($hand1 + 1) % 3 == $hand2) return 2; return 0; }
プレイヤー1が勝ちなら 1 、プレイヤー2が勝ちなら 2 、あいこなら 0 が返ります。
使い方はこんな感じで。
$hand1 = 2; // プレイヤー1の手 = パー $hand2 = 0; // プレイヤー2の手 = チョキ $winner = judge($hand1, $hand2); // $winner = 2(プレイヤー2の勝ち)
除余算を使うのは思いもつきませんでした。
ifの使い方でも式の建て方一つで随分変わりますね。
$hand = array('グー', 'チョキ', 'パー') ; $result = array('ぞうさんの勝ち', 'きりんさんの勝ち', 'あいこ') ; $e = rand(0, 2) ; // ぞうさん $g = rand(0, 2) ; // きりんさん echo "ぞうさん(${hand[$e]}) vs. きりんさん(${hand[$g]})<br />\n" ; echo $result[($g - $e + 2) % 3] ;
やはり最終判定の部分は除余算ですね…使い方をマスターせねば。
わざわざrand()関数を入れてこれだけでゲームになっている回答ありがとうございました(´∀`*)
じゃんけんの勝敗判定は 一行で書けます.
まず,じゃんけんの手を
と0,1,2の数字で表現します
そして,Aさんの出した手を変数$a,Bさんの出した手を変数$bとすると,以下の計算式で, Aさんの勝敗が計算できます.
($a-$b+3)%3;
この計算式の値が
となります.
具体的なプログラムとしては以下のようになります.
<?php // 引数 // 0 グー // 1 チョキ // 2 パー // 戻値 // 0 アイコ // 1 aの負け // 2 aの勝ち function janken($a, $b) { return ($a-$b+3)%3; } $hand = array(0 => "グー ", 1=>"チョキ", 2=>"パー "); $result = array(0 => "アイコ ", 1=>"aの負け", 2=>"aの勝ち"); echo "<pre>"; for ($a=0; $a<3; ++$a){ for ($b=0; $b<3; ++$b){ $r = janken($a, $b); echo "a: $hand[$a] b: $hand[$b] $result[$r]\n"; } } echo "</pre>"; ?>
全体文はこれはこれでありがたいです。勉強になります。
判定部分だけとはいっても、前後の処理がないと意味がわかりませんので、全体を書いてみました。
赤い部分が判定部分です。
<?php
// 定義
$ar = array( "1"=>"グー", "2"=>"チョキ", "3"=>"パー" );
// 試験ルーチン
foreach ($ar as $a=>$ap) {
foreach ($ar as $b=>$bp) {
print $ap. " は ".$bp." に ".janken( $a, $b )."<br>\n";
}
}
// 勝敗判定関数
function janken( $a, $b ) {
return ( $a == $b ) ? "あいこ" : ( ( ($a - $b + 3) % 3 != 1 ) ? "勝ち" : "負け" );
}
?>
フォ、foreachうちの本載ってない(;´д`)もー
除余算なんてどこで使うのかと思っていましたが、結構頻回に使えそうですね。もっと勉強します。
全体文はこれはこれでありがたいです。勉強になります。