teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

見直し

2019/05/29 09:48

投稿

退会済みユーザー
answer CHANGED
@@ -153,4 +153,68 @@
153
153
  </form>
154
154
  </body>
155
155
  </html>
156
+ ```
157
+
158
+ 配列を使うと見通しがぐっと良くなるケース。
159
+ ```php
160
+ <?php
161
+ // 192036.php
162
+
163
+ define('GGG', 'ぐー');
164
+ define('CCC', 'ちょき');
165
+ define('PPP', 'ぱー');
166
+
167
+ define('GAME_WIN', '勝ち');
168
+ define('GAME_LOSE', '負け');
169
+ define('GAME_DRAW', 'あいこ');
170
+
171
+ $battle = array(GGG, CCC, PPP);
172
+ $judge = array(
173
+ GGG => array(
174
+ GGG => GAME_DRAW,
175
+ CCC => GAME_WIN,
176
+ PPP => GAME_LOSE,
177
+ ),
178
+ CCC => array(
179
+ GGG => GAME_LOSE,
180
+ CCC => GAME_DRAW,
181
+ PPP => GAME_WIN,
182
+ ),
183
+ PPP => array(
184
+ GGG => GAME_WIN,
185
+ CCC => GAME_LOSE,
186
+ PPP => GAME_DRAW,
187
+ ),
188
+ );
189
+ $pc = '';
190
+ $my = '';
191
+ $result ='';
192
+
193
+
194
+ if (isset($_POST['my']) === TRUE) {
195
+ $my = $_POST['my'];
196
+ $pc = $battle[array_rand($battle)];
197
+ $result = $judge[$my][$pc];
198
+ }
199
+ ?>
200
+ <!DOCTYPE html>
201
+ <html lang="ja">
202
+ <head>
203
+ <meta charset="UTF-8">
204
+ <title>じゃんけん勝負</title>
205
+ </head>
206
+ <body>
207
+ <h1>じゃんけん勝負</h1>
208
+ <label>自分: <?php print $my; ?></label>
209
+ <label>相手: <?php print $pc; ?></label>
210
+ <label>結果: <?php print $result; ?></label>
211
+
212
+ <form method="post">
213
+ <input type="radio" name="my" value="<?=GGG?>"<?php if ($my === GGG) { print ' checked'; } ?>/><?=GGG?>
214
+ <input type="radio" name="my" value="<?=CCC?>"<?php if ($my === CCC) { print ' checked'; } ?>/><?=CCC?>
215
+ <input type="radio" name="my" value="<?=PPP?>"<?php if ($my === PPP) { print ' checked'; } ?>/><?=PPP?>
216
+ <input type="submit" value="勝負">
217
+ </form>
218
+ </body>
219
+ </html>
156
220
  ```

2

見直し

2019/05/29 09:48

投稿

退会済みユーザー
answer CHANGED
@@ -1,10 +1,15 @@
1
1
  自分なりに書き直してみて、
2
2
 
3
3
  ・全角空白は論外。半角空白に直す。
4
+
4
- ・POST送信するパラメータがbattleで、ぐーちょきぱーを収めるのもbattleってのはややこしい。なので、POST送信するパラメータの名前をbattleでなくmyにしてみる。
5
+ ・POST送信するパラメータがbattleで、ぐーちょきぱーを収めるのもbattleってのはややこしい。
6
+ なので、POST送信するパラメータの名前をbattleでなくmyにしてみる。
7
+
5
8
  ・if()で判定後に$pcに再度代入するのは無駄。
6
- ・コード中になんども「ぐー」「ちょき」「ぱー」「勝ち」「負け」「あいこ」が出てくるが見づらく感じたので、ユーザー定義定数にしてみる。
7
9
 
10
+ ・コード中になんども「ぐー」「ちょき」「ぱー」「勝ち」「負け」「あいこ」が
11
+ 何度も出てくるが見づらく感じたので、ユーザー定義定数にしてみる。
12
+
8
13
  してみた。
9
14
 
10
15
  ```php
@@ -71,4 +76,81 @@
71
76
  </html>
72
77
  ```
73
78
 
74
- で、判定のif文群も、switch文にすればもうちょっと洗練されるだろうけど、まぁいいか
79
+ で、判定のif文群も、switch文にすればもうちょっと洗練されるだろう
80
+
81
+ ```php
82
+ <?php
83
+ // 192036.php
84
+
85
+ define('GGG', 'ぐー');
86
+ define('CCC', 'ちょき');
87
+ define('PPP', 'ぱー');
88
+
89
+ define('GAME_WIN', '勝ち');
90
+ define('GAME_LOSE', '負け');
91
+ define('GAME_DRAW', 'あいこ');
92
+
93
+ $battle = array(GGG, CCC, PPP);
94
+ $pc = '';
95
+ $my = '';
96
+ $result ='';
97
+
98
+
99
+ if (isset($_POST['my']) === TRUE) {
100
+ $my = $_POST['my'];
101
+ $pc = $battle[array_rand($battle)];
102
+ switch($my) {
103
+ case GGG:
104
+ switch($pc) {
105
+ case GGG:
106
+ $result = GAME_DRAW; break;
107
+ case CCC:
108
+ $result = GAME_WIN; break;
109
+ case PPP:
110
+ $result = GAME_LOSE; break;
111
+ }
112
+ break;
113
+ case CCC:
114
+ switch($pc) {
115
+ case GGG:
116
+ $result = GAME_LOSE; break;
117
+ case CCC:
118
+ $result = GAME_DRAW; break;
119
+ case PPP:
120
+ $result = GAME_WIN; break;
121
+ }
122
+ break;
123
+ case PPP:
124
+ switch($pc) {
125
+ case GGG:
126
+ $result = GAME_WIN; break;
127
+ case CCC:
128
+ $result = GAME_LOSE; break;
129
+ case PPP:
130
+ $result = GAME_DRAW; break;
131
+ }
132
+ break;
133
+ }
134
+ }
135
+ ?>
136
+ <!DOCTYPE html>
137
+ <html lang="ja">
138
+ <head>
139
+ <meta charset="UTF-8">
140
+ <title>じゃんけん勝負</title>
141
+ </head>
142
+ <body>
143
+ <h1>じゃんけん勝負</h1>
144
+ <label>自分: <?php print $my; ?></label>
145
+ <label>相手: <?php print $pc; ?></label>
146
+ <label>結果: <?php print $result; ?></label>
147
+
148
+ <form method="post">
149
+ <input type="radio" name="my" value="<?=GGG?>"<?php if ($my === GGG) { print ' checked'; } ?>/><?=GGG?>
150
+ <input type="radio" name="my" value="<?=CCC?>"<?php if ($my === CCC) { print ' checked'; } ?>/><?=CCC?>
151
+ <input type="radio" name="my" value="<?=PPP?>"<?php if ($my === PPP) { print ' checked'; } ?>/><?=PPP?>
152
+ <input type="submit" value="勝負">
153
+ </form>
154
+ </body>
155
+ </html>
156
+ ```

1

見直し

2019/05/29 09:34

投稿

退会済みユーザー
answer CHANGED
@@ -8,8 +8,9 @@
8
8
  してみた。
9
9
 
10
10
  ```php
11
- // 192036.php
12
11
  <?php
12
+ // 192036.php
13
+
13
14
  define('GGG', 'ぐー');
14
15
  define('CCC', 'ちょき');
15
16
  define('PPP', 'ぱー');