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

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

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

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

Q&A

解決済

2回答

1454閲覧

PHPのじゃんけんゲームにおいて勝利回数

masaa0802

総合スコア28

PHP

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

0グッド

0クリップ

投稿2022/03/04 07:48

実現したいこと

イメージ説明

↑の「~回目の勝利です。」の数字が勝利するごとに増やしていくようにしたいです。countVictories()の記述をfor文やインクリメント等をしましたが、うまくいかず。その他のコードは予測通りの処理がされているので、countVictories()の部分をどのように記述すれば増えるのかご教授いただければ幸いです。

該当ソースコード

public function countVictories() { if ($this->judge() === '勝ち') { $_SESSION['result'] += + 1 ; } return $_SESSION['result']; }

ソースコード

php

1<?php 2// 判定が勝った時のみ勝利回数を表示させてください。 3// 例) 4// 山田太郎はグーを出しました。 5// 相手はチョキを出しました。 6// 勝敗は勝ちです。 7// 3回目の勝利です。 8 9 10if (! isset($_SESSION['result'])) { 11 $_SESSION['result'] = 0 ; 12} 13 14class Player 15{ 16 public function jankenConverter(int $choice): string 17 { 18 $janken = ''; 19 switch ($choice) { 20 case 1: 21 $janken = 'グー'; 22 break; 23 case 2: 24 $janken = 'チョキ'; 25 break; 26 case 3: 27 $janken = 'パー'; 28 break; 29 default: 30 } 31 return $janken; 32 } 33} 34 35 36class Me extends Player 37{ 38 private $name; 39 private $choice; 40 41 public function __construct(string $lastName, string $firstName, int $choice) 42 { 43 $this->name = $lastName.$firstName; 44 $this->choice = $choice; 45 } 46 47 public function getName(): string 48 { 49 return $this->name; 50 } 51 52 53 54 public function getChoice(): string 55 { 56 return $this->jankenConverter($this->choice); 57 } 58} 59 60class Enemy extends Player 61{ 62 private $choice; 63 public function __construct() 64 { 65 $this->choice = random_int(1, 3); 66 } 67 68 public function getChoice(): string 69 { 70 return $this->jankenConverter($this->choice); 71 } 72} 73 74class Battle 75{ 76 private $first; 77 private $second; 78 public function __construct(Me $me, Enemy $enemy) 79 { 80 $this->first = $me->getChoice(); 81 $this->second = $enemy->getChoice(); 82 } 83 84 private function judge(): string 85 { 86 if ($this->first === $this->second) { 87 return '引き分け'; 88 } 89 90 if ($this->first === 'グー' && $this->second === 'チョキ') { 91 return '勝ち'; 92 } 93 94 if ($this->first === 'グー' && $this->second === 'パー') { 95 return '負け'; 96 } 97 98 if ($this->first === 'チョキ' && $this->second === 'グー') { 99 return '負け'; 100 } 101 102 if ($this->first === 'チョキ' && $this->second === 'パー') { 103 return '勝ち'; 104 } 105 106 if ($this->first === 'パー' && $this->second === 'グー') { 107 return '勝ち'; 108 } 109 110 if ($this->first === 'パー' && $this->second === 'チョキ') { 111 return '負け'; 112 } 113 } 114 115 public function countVictories() 116 { 117 if ($this->judge() === '勝ち') { 118 $_SESSION['result'] += + 1 ; 119 } 120 return $_SESSION['result']; 121 } 122 123 // public function getVitories() 124 // { 125 // return $_SESSION['result']; 126 // } 127 128 public function showResult() 129 { 130 return $this->judge(); 131 } 132} 133 134if (! empty($_POST)) { 135 $me = new Me($_POST['last_name'], $_POST['first_name'], $_POST['choice'], $_POST['choice']); 136 $enemy = new Enemy(); 137 echo $me->getName().'は'.$me->getChoice().'を出しました。'; 138 echo '<br>'; 139 echo '相手は'.$enemy->getChoice().'を出しました。'; 140 echo '<br>'; 141 $battle = new Battle($me, $enemy); 142 echo '勝敗は'.$battle->showResult().'です。'; 143 if ($battle->showResult() === '勝ち') { 144 echo '<br>'; 145 echo $battle->countVictories().'回目の勝利です。'; 146 } 147} 148 149?> 150<!DOCTYPE html> 151<html lang="ja"> 152<head> 153<meta charset="utf-8"> 154<title>デバック練習</title> 155</head> 156<body> 157 <section> 158 <form action='./debug03.php' method="POST"> 159 <label></label> 160 <input type="text" name="last_name" value="<?php echo '山田' ?>" /> 161 <label></label> 162 <input type="text" name="first_name" value="<?php echo '太郎' ?>" /> 163 <select name='choice'> 164 <option value=0 >--</option> 165 <option value=1 >グー</option> 166 <option value=2 >チョキ</option> 167 <option value=3 >パー</option> 168 </select> 169 <input type="submit" value="送信する"/> 170 </form> 171 </section> 172</body> 173</html> 174

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

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

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

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

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

m.ts10806

2022/03/04 07:52

そもそもsession_startされてないように見受けられますが起きてる問題は何でしょうか
masaa0802

2022/03/04 07:58

ご返信ありがとうございます。session_start();を記述し忘れておりました。記述した瞬間、回数が更新されました!ありがとうございます!
m.ts10806

2022/03/04 08:16

自身で回答したうえで自己解決としておいてください。 ただ、そもそも何もエラーが起きてないとは思えないので、「うまくいかない」という表現は避けてください。何が起きてるか誰にも伝わりません(質問は編集できます)
masaa0802

2022/03/04 08:39

かしこまりました。今後はより詳細に記述するようにしていきます。 ご指摘ありがとうございます。
guest

回答2

0

これは文法としておかしいと思います。
コメントで指摘して頂きましたが、文法として間違っていませんでした。
混乱を招く回答をしてしまいすみませんでした。

php

1$_SESSION['result'] += + 1 ;

以下のコードが正しいと思います

php

1$_SESSION['result'] += 1 ;

投稿2022/03/04 07:58

編集2022/03/04 09:03
mineralwater

総合スコア289

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

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

mineralwater

2022/03/04 08:57

知りませんでした。 ご指摘ありがとうございます
m.ts10806

2022/03/04 10:35

私も一瞬「どうだっけ?」となって上記コード試しました。 よくよく考えたら1を+1と表現してるだけなんですよね。
guest

0

自己解決

原因

回数が更新されない原因としてはsession_start();の記述漏れによってSESSIONが開始されていなかったため。

記述後、回数が更新されるようになった。

投稿2022/03/04 08:42

masaa0802

総合スコア28

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問