質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

827閲覧

PHPのコードレビューをお願いします。じゃんけんアプリ

minatonn

総合スコア14

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2020/08/07 00:43

前提・実現したいこと

趣味でPHPの勉強をしています。
PHPでじゃんけんアプリを作成しました。
コードレビューをお願いします。

該当のソースコード

●index.php

<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <form action="result.php" method="POST"> <input type="radio" value="ぐー" name="yourJudge">ぐー <input type="radio" value="ちょき" name="yourJudge">ちょき <input type="radio" value="ぱー" name="yourJudge">ぱー <input type="submit" value="送信する"> </form> </body> </html>

●result.php

<?php //index.htmlから値を受け取り、変数に結果を代入する。 $yours = $_POST["yourJudge"]; //CPU側がシャンけんで何をだすのかランダムで選出 function choiceNumber(){ $choiceNumber = rand(1,3); return $choiceNumber; } $decisionNumber = choiceNumber(); //$judgeCpuで生成された数字を文字に変換 function converter($decisionNumber){ if ($decisionNumber === 1){ $judgeJanken = "ぐー"; return $judgeJanken; } else if ($decisionNumber === 2){ $judgeJanken = "ちょき"; return $judgeJanken; } else if ($decisionNumber === 3){ $judgeJanken = "ぱー"; return $judgeJanken; } } $cpus = converter($decisionNumber); //じゃんけんの判定 function judge($yours,$cpus){ if($yours === $cpus) { $result = "引き分け"; return $result; } else if($yours === "ぐー"){ if($cpus === "ちょき"){ $result = "あなたの勝ち"; return $result; } else if($cpus === "ぱー"){ $result = "あなたの負け"; return $result; } } else if($yours === "ちょき"){ if($cpus === "ぐー"){ $result = "あなたの負け"; return $result; } else if($cpus === "ぱー"){ $result = "あなたの勝ち"; return $result; } } else if($yours ==="ぱー"){ if($cpus === "ぐー"){ $result = "あなたの勝ち"; return $result; } else if($cpus === "ちょき"){ $result = "あなたの負け"; return $result; } } } //表示する結果を変数に代入 $resultDisplay = judge($yours,$cpus); ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> </head> <body> <h1>じゃんけんの結果</h1> <p>あなた:<?php echo $yours?></p> <p>CPU:<?php echo $cpus?></p> <p><?php echo $resultDisplay?></p> </body> </html> ?>
PHP7,HTML

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/08/07 00:49

仕様説明も観点も何もなしに「コードレビューお願いします」と言われても他人には無理です。
m.ts10806

2020/08/07 02:15

せめてレビュー観点くらい書いてください。 いずれにしても「どれこもれもダメ」というダメ出しになりますが。 レビュー観点があることで多少はアドバイスの方向性が定まります。 あとコードはマークダウンのcode機能を利用してご提示ください。
m.ts10806

2020/08/07 02:16

ご存知ないかもしれませんが、質問は編集できます。
guest

回答2

0

ベストアンサー

あくまで個人的な意見ですが、細かく関数に分けすぎな気がします。
もう少し大きく関数に切り分けてしまってもいいと思います。
この規模なら。

あとは、簡単にジャンケンを判断できるアルゴリズムを使っても良いかもしれません。(参考

ここら辺を加味するとここまでシンプルにできます。

HTML

1 2<!DOCTYPE html> 3<meta charset="UTF-8"> 4<meta name="viewport" content="width=device-width, initial-scale=1.0"> 5<title>Document</title> 6<form action="result.php" method="POST"> 7 <input type="radio" value="0" name="yourJudge">ぐー 8 <input type="radio" value="1" name="yourJudge">ちょき 9 <input type="radio" value="2" name="yourJudge">ぱー 10 <input type="submit" value="送信する"> 11</form> 12

php

1<?php 2 3$choices = [ 4 0 => 'ぐー', 5 1 => 'ちょき', 6 2 => 'ぱー' 7]; 8 9$yours = (int) $_POST["yourJudge"]; 10 11if( $choices[$yours] == NULL){ 12 // 例外処理 13} 14 15$cpu = random_int(0, 2); 16 17$result = ($yours - $cpu + 3) % 3; 18 19if( $result == 0 ){ 20 $message = 'あいこ'; 21} else if( $result == 1 ){ 22 $message = 'あなたの負け'; 23} else { 24 $message = 'あなたの勝ち'; 25} 26?><!DOCTYPE html> 27<meta charset="UTF-8"> 28<title>Document</title> 29<h1>じゃんけんの結果</h1> 30<p>あなた:<?php echo $choices[$yours] ?></p> 31<p>CPU:<?php echo $choices[$cpu] ?></p> 32<p><?php echo $message ?></p>

未検証でトイレに行きたい焦りの中書いているのでミスあるかもです。
なかったです。よかった。

投稿2020/08/07 01:00

編集2020/08/07 01:55
kyoya0819

総合スコア10429

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

minatonn

2020/08/07 01:12

ありがとうございます! 添付していただいたページもとても参考になりました!
kyoya0819

2020/08/07 01:28

動きますね。よかった。
dodox86

2020/08/07 01:37

> 未検証でトイレに行きたい焦りの中書いている トイレ済ませてから書いてくださいw じゃんけんの判定アルゴリズムは知りませんでした。なるほど面白いですね。
m.ts10806

2020/08/07 01:47

HTML雑なのはあえてですよね。さすが。
kyoya0819

2020/08/07 01:57 編集

普段からbodyタグや(htmlタグ)などを省く癖があるのでそれもあるかもです。一から書き直しているので
guest

0

実はこの手のじゃんけん、先に「かち・まけ・あいこ」を決めてあとから
それに該当する手を決めてもOK
つまり自分がぐーで相手がぱーだったから負けじゃなく
自分が何をだしても負けがきまっていて、ぐーをだしたら相手はぱーという具合

投稿2020/08/07 02:00

編集2020/08/07 02:04
yambejp

総合スコア114837

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2020/08/07 02:05

たいていサーバー側で処理する場合あらかじめ確率がきまっているので 全体の「かちまけあいこ」の比率はある程度調整がはいっているもの
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問