質問編集履歴

2

コードの修正

2022/02/27 07:52

投稿

sshd911
sshd911

スコア1

test CHANGED
File without changes
test CHANGED
@@ -29,7 +29,7 @@
29
29
  global $myCards, $hostCards, $myTotal, $hostTotal, $turn, $result, $cards;
30
30
  unset($result['result']);
31
31
  $turn['turn'] = false;
32
- for ($i=1; $i<=10; $i++) {
32
+ for ($i=1; $i<=10; $i++) { // こちらが問題の箇所です。
33
33
  $cards['cards'] = $i;
34
34
  }
35
35
  for ($i=1; $i<=10; $i++) {
@@ -41,10 +41,9 @@
41
41
  for ($i=1; $i<=10; $i++) {
42
42
  $cards['cards'] = $i;
43
43
  }
44
- $cards['cards'] = array_column($cards, 'cards');
45
44
 
46
45
  // shuffle(array_column($cards, 'cards'));
47
- $myCards['myCards'] = array_pop($cards);
46
+ $myCards['myCards'] = array_pop($cards); // ここも問題かもしれません。
48
47
  $myCards['myCards'] = array_pop($cards);
49
48
  $hostCards['hostCards'] = array_pop($cards);
50
49
  $hostCards['hostCards'] = array_pop($cards);
@@ -162,10 +161,11 @@
162
161
  コード
163
162
  ```
164
163
  > 引用テキスト
164
+ 初回リセットが完了しました。
165
165
  自分の手札:Array ( [0] => 7 [1] => 10 [2] => Array ( [0] => 8 [1] => 7 [2] => Array ( [0] => 5 [1] => 7 [2] => Array ( [0] => 5 [1] => 6 [2] => Array ( [0] => 3 [1] => 2 [2] => Array ( [0] => 4 [1] => 1 [2] => Array ( [0] => 3 [1] => 6 [2] => Array ( [0] => Array ( [0] => Array ( [0] => Array ( [0] => Array ( [0] => Array ( [0] => Array ( [0] => Array ( [0] => Array ( [0] => Array ( [0] => Array ( [0] => Array ( [0] => Array ( [0] => Array ( [0] => Array ( [0] => Array ( [0] => Array ( [0] => Array ( [0] => Array ( [0] => Array ( [0] => Array ( [0] => Array ( [0] => Array ( [0] => Array ( [0] => Array ( [0] => Array ( [0] => Array ( [0] => Array ( [0] => Array ( [0] => Array ( [0] => ) [1] => 3 [2] => 8 ) [1] => 10 [2] => 9 ) ) [1] => 3 [2] => 5 [3] => 5 ) ) [1] => 4 [2] => 3 [3] => 4 ) ) [1] => 4 [2] => 9 [3] => 1 ) ) [1] => 3 [2] => 10 ) ) [1] => 6 [2] => Array ( [0] => Array ( [0] => 5 [1] => 1 [2] => 8 [3] => 6 [4] => Array ( [0] => Array ( [0] => 3 [1] => 1 [2] => 8 [3] => 7 [4] => 5 [5] => Array ( [0] => Array ( [0] => 1 [1] => 9 [2] => 6 [3] => 5 [4] => Array ( [0] => Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 8 [4] => 10 [5] => 7 [6] => 2 [7] => 7 [8] => 9 [9] => 10 [10] => 3 [11] => 3 [12] => 7 [13] => 6 [14] => 1 [15] => 8 [16] => 9 [17] => 5 [18] => 9 [19] => 7 [20] => 2 [21] => 8 [22] => 6 [23] => 10 [24] => 4 [25] => 2 [26] => 1 [27] => Array ( [0] => Array ( [0] => Array ( [0] => 8 [1] => 6 [2] => 2 [3] => 7 [4] => 2 [5] => 2 [6] => 5 [7] => 3 [8] => 7 [9] => 1 [10] => 4 [11] => 5 [12] => 9 [13] => 7 [14] => 9 [15] => 9 [16] => 1 [17] => 9 [18] => 6 [19] => 3 [20] => 10 [21] => 6 [22] => 10 [23] => Array ( [0] => 2 [1] => 3 [2] => 10 [3] => 3 [4] => 3 [5] => 6 [6] => 7 [7] => 5 [8] => 5 [9] => 6 [10] => 6 [11] => 4 [12] => 7 [13] => 8 [14] => 10 [15] => 5 [16] => 1 [17] => 4 [18] => 6 [19] => 9 [20] => 5 [21] => 7 [22] => 8 [23] => 1 [24] => 9 [25] => 7 [26] => 10 [27] => 1 [28] => 8 [29] => 9 [30] => 8 [31] => 2 [32] => 9 [33] => 4 [34] => Array ( [0] => 5 [1] => 9 [2] => 8 [3] => 1 [4] => 3 [5] => 3 [6] => 1 [7] => 5 [8] => 10 [9] => 7 [10] => 8 [11] => 4 [12] => 8 [13] => 6 [14] => 9 [15] => 6 [16] => 1 [17] => 4 [18] => 4 [19] => 1 [20] => Array ( [0] => 9 [1] => 5 [2] => 8 [3] => 2 [4] => 8 [5] => 10 [6] => 5 [7] => 6 [8] => 6 [9] => 3 [10] => 7 [11] => 4 [12] => 7 [13] => 2 [14] => 3 [15] => 1 [16] => 8 [17] => 6 [18] => 2 [19] => 9 [20] => 6 [21] => 4 [22] => 10 [23] => 9 [24] => 9 [25] => 1 [26] => 4 [27] => 10 [28] => 8 [29] => 3 [30] => Array ( [0] => 7 [1] => 1 [2] => 7 [3] => 3 [4] => 2 [5] => 9 [6] => 8 [7] => 5 [8] => 5 [9] => 2 [10] => 1 [11] => 3 [12] => 6 [13] => 4 [14] => 8 [15] => 8 [16] => 10 [17] => 6 [18] => 4 [19] => 1 [20] => 8 [21] => 9 [22] => 4 [23] => 4 [24] => 5 [25] => 2 [26] => 6 [27] => 5 [28] => 3 [29] => 1 [30] => 7 [31] => 9 [32] => 10 [33] => 6 [34] => 2 [35] => 10 [36] => 7 ) [31] => 4 [32] => 10 [33] => 5 [34] => 7 [35] => 5 [36] => 1 ) [21] => 6 [22] => 9 [23] => 7 [24] => 2 [25] => 10 [26] => 5 [27] => 3 [28] => 4 [29] => 10 [30] => 5 [31] => 2 [32] => 7 [33] => 6 [34] => 9 [35] => 3 [36] => 2 ) [35] => 4 [36] => 10 ) [24] => 10 [25] => 1 [26] => 8 [27] => 5 [28] => 10 [29] => 7 [30] => 3 [31] => 5 [32] => 4 [33] => 8 ) [1] => 5 [2] => 8 [3] => 10 [4] => 6 [5] => 1 [6] => 2 [7] => 5 [8] => 9 [9] => 4 [10] => 8 [11] => 9 [12] => 7 [13] => 6 [14] => 4 [15] => 3 [16] => 1 [17] => 8 [18] => 5 [19] => 1 [20] => 10 [21] => 7 [22] => 6 [23] => 4 [24] => 10 [25] => 9 [26] => 8 [27] => 3 [28] => 1 [29] => 3 [30] => 2 [31] => 7 [32] => 7 [33] => 2 [34] => 3 [35] => 6 [36] => 4 ) ) [28] => 4 [29] => 4 [30] => 10 [31] => 5 [32] => 6 [33] => 9 [34] => 8 [35] => 4 ) ) [5] => 8 [6] => 9 [7] => 9 [8] => 10 [9] => 9 [10] => 3 [11] => 5 [12] => 2 [13] => 7 [14] => 4 [15] => 6 [16] => 1 [17] => 10 [18] => 1 [19] => 3 [20] => 3 [21] => 7 [22] => 4 [23] => 8 [24] => 7 [25] => 1 [26] => 6 [27] => 7 [28] => 8 [29] => 10 [30] => 2 [31] => 2 [32] => 5 [33] => 8 [34] => 2 [35] => 10 ) ) [6] => 6 [7] => 6 [8] => 4 [9] => 3 [10] => 2 [11] => 7 [12] => 5 [13] => 2 [14] => 3 [15] => 8 [16] => 5 [17] => 9 [18] => 8 [19] => 2 [20] => 4 [21] => 10 [22] => 6 [23] => 1 [24] => 9 [25] => 7 [26] => 6 [27] => 10 [28] => 10 [29] => 8 [30] => 1 [31] => 7 [32] => 10 [33] => 4 [34] => 2 [35] => 5 ) ) [5] => 4 [6] => 2 [7] => 2 [8] => 7 [9] => 10 [10] => 5 [11] => 5 [12] => 8 [13] => 2 [14] => 1 [15] => 6 [16] => 7 [17] => 5 [18] => 8 [19] => 2 [20] => 3 [21] => 6 [22] => 9 [23] => 9 [24] => 4 [25] => 1 [26] => 6 [27] => 1 [28] => 3 [29] => 9 [30] => 9 [31] => 7 [32] => 8 [33] => 10 [34] => 3 ) ) ) ) [1] => 2 [2] => 2 ) ) [1] => 7 [2] => 5 ) ) ) ) ) ) ) [1] => 1 [2] => 2 ) [1] => 7 [2] => 3 ) [1] => 2 [2] => 5 ) [1] => 5 [2] => 2 ) [1] => 4 [2] => 5 ) [1] => 7 [2] => 2 ) [1] => 2 [2] => 3 ) ) ) ) ) ) ) )
166
166
 
167
167
  合計:0
168
168
 
169
- 以下同文
169
+ 以下似たような結果が出力されます。
170
170
 
171
171
 

1

コードの修正

2022/02/27 07:48

投稿

sshd911
sshd911

スコア1

test CHANGED
File without changes
test CHANGED
@@ -7,144 +7,156 @@
7
7
  ```php
8
8
  <?php
9
9
  session_start();
10
-
11
- $end_game = false; //終局フラグ
10
+
12
- $cards = array(); //山札
13
- $player = array(); //プレイヤー手札
11
+ if(empty($_GET)) { // 初回時リセット
14
- $opp = array(); //対戦相手の手札
12
+ resetGame();
15
-
16
- if(!isset($_GET['reset'])){
13
+ print '初回リセットが完了しました。';
17
- if(isset($_SESSION['cards'])) $cards = $_SESSION['cards'];
18
- if(isset($_SESSION['player'])) $player = $_SESSION['player'];
19
- if(isset($_SESSION['opponent'])) $opp = $_SESSION['opponent'];
20
14
  }
15
+
21
-
16
+ $myCards['myCards'] = &$_SESSION['myCards']; // 自分の手札
17
+ $_SESSION['myCards'] = &$myCards['myCards'];
18
+ $hostCards['hostCards'] = &$_SESSION['hostCards']; // 相手の手札
19
+ $_SESSION['hostCards'] = &$hostCards['hostCards'];
20
+ $myTotal; // 自分の合計
21
+ $hostTotal; // 相手の合計
22
+ $cards['cards'] = &$_SESSION['cards']; // 山札
22
- if(isset($_SESSION['cards']) && !isset($_GET['reset'])){
23
+ $_SESSION['cards'] = &$cards['cards'];
24
+ $turn['turn'] = &$_SESSION['turn']; // 自分のターンが終わるとtrueになる
25
+ $_SESSION['turn'] = &$turn['turn'];
26
+ $result;
27
+
28
+ function resetGame() { // 山札をリセット & シャッフル & 配る
29
+ global $myCards, $hostCards, $myTotal, $hostTotal, $turn, $result, $cards;
30
+ unset($result['result']);
31
+ $turn['turn'] = false;
32
+ for ($i=1; $i<=10; $i++) {
23
- $cards = $_SESSION['cards'];
33
+ $cards['cards'] = $i;
34
+ }
24
- } else {
35
+ for ($i=1; $i<=10; $i++) {
25
- $cards = init_cards();
36
+ $cards['cards'] = $i;
37
+ }
38
+ for ($i=1; $i<=10; $i++) {
26
- //2枚ずつカードを配る
39
+ $cards['cards'] = $i;
40
+ }
41
+ for ($i=1; $i<=10; $i++) {
42
+ $cards['cards'] = $i;
43
+ }
44
+ $cards['cards'] = array_column($cards, 'cards');
45
+
46
+ // shuffle(array_column($cards, 'cards'));
27
- $player[] = array_shift($cards);
47
+ $myCards['myCards'] = array_pop($cards);
28
- $player[] = array_shift($cards);
48
+ $myCards['myCards'] = array_pop($cards);
29
- $opp[] = array_shift($cards);
49
+ $hostCards['hostCards'] = array_pop($cards);
30
- $opp[] = array_shift($cards);
50
+ $hostCards['hostCards'] = array_pop($cards);
51
+ $myTotal = array_sum(array_column($myCards,'myCards'));
52
+ $hostTotal = array_sum(array_column($hostCards,'hostCards'));
31
53
  }
32
-
33
- if(isset($_GET['hit'])) $player[] = array_shift($cards);
54
+
34
-
35
- //対戦相手の思考と終局判定
36
- if( isset($_GET['hit']) || isset($_GET['stand']) ){
37
- $threshold = 15; //ヒットするしきい値
55
+ function hit() { // カードを引く
38
- if( sum_up_hands($opp) < $threshold ){
56
+ global $myCards, $myTotal, $cards, $turn;
39
- $opp[] = array_shift($cards);
57
+ $turn['turn'] = false;
40
- } else if( isset($_GET['stand']) ){
58
+ if(count($myCards['myCards']) < 12){
59
+ $myCards['myCards'] = array_pop($cards);
60
+ $myTotal = array_sum(array_column($myCards, 'myCards'));
41
- $end_game = true;
61
+ }else {
62
+ return print 'これ以上ヒットはできません。';
42
- }
63
+ }
43
64
  }
44
-
45
- //合計
65
+
46
- $player_total = sum_up_hands($player);
47
- $opp_total = sum_up_hands($opp);
66
+ function stand() { // スタンド後の処理
48
-
67
+ global $hostCards, $hostTotal, $cards, $turn, $myTotal, $result;
68
+ $hostTotal = array_sum(array_column($hostCards, 'myCards'));
49
- if($player_total > 21 || $opp_total > 21) $end_game = true;
69
+ if($hostTotal < 17) { // ホストは手札の合計が17以下の場合カードを引く
50
-
51
- $_SESSION['cards'] = $cards;
70
+ $hostCards['hostCards'] = array_pop($cards);
52
- $_SESSION['player'] = $player;
71
+ return stand();
72
+ }else {
53
- $_SESSION['opponent'] = $opp;
73
+ $turn['turn'] = true;
54
-
74
+
55
- function init_cards(){
75
+ if(is_bool($turn['turn'])){
56
- //山札を用意する
57
- $cards = array();
58
- $suits = array('spade', 'heart', 'diamond', 'club');
59
-
60
- foreach($suits as $suit){
76
+ if ($myTotal == $hostTotal) {
77
+ if ($myTotal < 22 && $hostTotal < 22) {
78
+ return $result = '同点の為、引き分けです。';
79
+ } else {
80
+ return $result = 'あなたとホストがバーストした為、引き分けです。';
81
+ }} elseif ($myTotal > $hostTotal) {
61
- for($i=1;$i<=13;$i++){
82
+ if ($myTotal > 21) {
83
+ return $result = 'あなたがバーストした為、ホスト勝ちです。';
62
- $cards[] = array(
84
+ } else {
63
- 'num' => $i,
85
+ return $result = 'あなたの勝ちです。';
86
+ }} elseif ($myTotal < $hostTotal) {
64
- 'suit' => $suit
87
+ if ($hostTotal > 21) {
88
+ return $result = 'ホストがバーストした為、あなたの勝ちです。';
65
- );
89
+ } else {
90
+ return $result = 'ホストの勝ちです';
66
91
  }
67
92
  }
68
- shuffle($cards);
69
- return $cards;
93
+ }
70
94
  }
71
-
72
- function sum_up_hands($hands){
73
- $ace = 0;
74
- $total = 0;
75
- foreach($hands as $card){
76
- $num = $card['num'];
77
- if($num > 10){
78
- $total += 10;
79
- } else if($num === 1){
80
- $ace++;
81
- $total += 1;
82
- } else {
83
- $total += $num;
84
- }
85
- }
86
- //Aの処理
87
- if(!empty($ace)){
88
- $add = 10 * floor( (21 - $total) / 10 );
89
- if($add > 0) $total += $add;
90
- }
91
- return $total;
92
95
  }
93
96
  ?>
97
+ <?php
98
+
99
+ if(! empty($_GET['reset'])) {$_SESSION['reset'] = $_GET['reset'];}
94
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
100
+ if(! empty($_GET['hit'])) {$_SESSION['hit'] = $_GET['hit'] ;}
101
+ if(! empty($_GET['stand'])) {$_SESSION['stand'] = $_GET['stand'];}
102
+
103
+ if($_SESSION['reset'] && $_SESSION['turn'] === true) {
104
+ unset($_SESSION['reset']);
105
+ print 'リセットされました';
106
+ resetGame();
107
+ }
95
- <html xmlns="http://www.w3.org/1999/xhtml">
108
+ if($_SESSION['hit'] && $_SESSION['turn'] === false) {
109
+ unset($_SESSION['hit']);
110
+ print 'ヒットされました';
111
+ hit();
112
+ }
113
+ if($_SESSION['stand'] && $_SESSION['turn'] === false) {
114
+ unset($_SESSION['stand']);
115
+ print 'スタンドされました.';
116
+ stand();
117
+ }
118
+ ?>
119
+
120
+ <!DOCTYPE html>
121
+ <html lang="ja">
96
122
  <head>
123
+ <meta charset="UTF-8">
97
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
124
+ <link rel="stylesheet" href="brack-jack.css">
98
- <title>Black Jack</title>
125
+ <title>BrackJack</title>
99
126
  </head>
100
127
  <body>
128
+ <!-- 自分の手札を表示 -->
101
- <p>Your Hand:
129
+ <p>自分の手札:<?php
102
- <?php
103
- foreach($player as $card){
130
+ // foreach($myCards as $mv) {
104
- echo $card['num'] . ' ';
131
+ // print $mv.', ';
105
- }
106
- ?>
107
- <br />
132
+ // }
108
- Total:
109
- <?php
110
- echo $player_total;
111
- if($player_total > 21){
112
- echo ' Burst';
133
+ print_r($myCards['myCards']);
113
- } else if($end_game === true && $player_total > $opp_total){
114
- echo ' Win';
115
- }
116
- ?>
117
- </p>
134
+ ?></p>
118
-
119
- <hr />
135
+ <!-- 自分の手札の合計を表示 -->
120
-
121
- <p>Opponent's Hand:
122
- <?php
123
- foreach($opp as $card){
124
- echo $card['num'] . ' ';
136
+ <p>合計:<?= $myTotal; ?></p>
125
- }
126
- ?>
127
- <br />
128
- Total:
129
- <?php
130
- echo $opp_total;
131
- if($opp_total > 21){
132
- echo ' Burst';
133
- } else if($end_game === true && $opp_total > $player_total){
134
- echo ' Win';
135
- }
136
- ?>
137
- </p>
138
-
139
- <hr />
140
-
141
- <ul>
137
+ <hr>
138
+ <!-- ホストの手札を表示 -->
139
+ <p>相手の手札:<?php
140
+ // foreach($hostCards as $hv) {
141
+ // print $hv.', ';
142
+ // }
143
+ print_r($hostCards);
144
+ ?></p>
145
+ <!-- ホストの手札の合計を表示 -->
146
+ <p>合計:<?= $hostTotal; ?>
147
+ <hr>
148
+ <?= $result ?></p>
149
+ <hr>
150
+ <!-- $_GETの送信 -->
151
+ <?php if ($_SESSION['turn'] === true) :?>
152
+ <a href="?reset=reset">リセット</a>
153
+ <?php endif; ?>
142
- <?php if($end_game === false):?>
154
+ <?php if ($_SESSION['turn'] === false) :?>
143
- <li><a href="?hit">Hit</a></li>
155
+ <a href="?hit=hit">ヒット</a>
156
+ <?php endif; ?>
157
+ <?php if ($_SESSION['turn'] === false) :?>
144
- <li><a href="?stand">Stand</a></li>
158
+ <a href="?stand=stand">スタンド</a>
145
- <?php endif;?>
159
+ <?php endif;?>
146
- <li><a href="?reset">Reset</a></li>
147
- </ul>
148
160
  </body>
149
161
  </html>
150
162
  コード