質問編集履歴

6

breakを追加しました。自分のコードでは直していたのですが、こちらを直すのを忘れていました。

2022/12/15 22:14

投稿

haru0
haru0

スコア5

test CHANGED
File without changes
test CHANGED
@@ -169,6 +169,7 @@
169
169
  }
170
170
  if(count3 == n){
171
171
  printf("%cの勝ちです!\n", kigou);
172
+ break;
172
173
  }
173
174
 
174
175
  int count4 = 0;
@@ -180,6 +181,7 @@
180
181
  }
181
182
  if(count4 == n){
182
183
  printf("%cの勝ちです!\n", kigou);
184
+ break;
183
185
  }
184
186
 
185
187
  if(while_count == n*n - 1){//

5

count1, count2そしてbreakの位置を直しました。恐らくこれで大丈夫なはずです。

2022/12/14 20:55

投稿

haru0
haru0

スコア5

test CHANGED
File without changes
test CHANGED
@@ -132,9 +132,12 @@
132
132
  }
133
133
  }
134
134
  if(count1 == n){
135
- printf("%cの勝ちです!\n", kigou);
136
135
  break;
137
136
  }
137
+ }
138
+ if(count1 == n){
139
+ printf("%cの勝ちです!\n", kigou);
140
+ break;
138
141
  }
139
142
 
140
143
  int count2 = 0;
@@ -147,9 +150,12 @@
147
150
  }
148
151
  }
149
152
  if(count2 == n){
150
- printf("%cの勝ちです!\n", kigou);
151
153
  break;
152
154
  }
155
+ }
156
+ if(count2 == n){
157
+ printf("%cの勝ちです!\n", kigou);
158
+ break;
153
159
  }
154
160
 
155
161
 
@@ -163,7 +169,6 @@
163
169
  }
164
170
  if(count3 == n){
165
171
  printf("%cの勝ちです!\n", kigou);
166
- break;
167
172
  }
168
173
 
169
174
  int count4 = 0;
@@ -175,7 +180,6 @@
175
180
  }
176
181
  if(count4 == n){
177
182
  printf("%cの勝ちです!\n", kigou);
178
- break;
179
183
  }
180
184
 
181
185
  if(while_count == n*n - 1){//

4

Xcodeからコピペし直しました。

2022/12/14 20:27

投稿

haru0
haru0

スコア5

test CHANGED
File without changes
test CHANGED
@@ -72,12 +72,12 @@
72
72
  board[i][j] = '_';
73
73
  }
74
74
  }
75
- printf("\n\n");
75
+ printf("\n");
76
76
 
77
77
  /*
78
78
  whileの中でやること
79
79
  1.◯を入力する(◯スタート。偶数回目であれば◯、奇数回目であればXを入力。1回目からスタート?それとも0回目?調べる)
80
- 2.◯の場所が(A)範囲内で(B)空いているかどうか確認
80
+ 2.◯の場所が(A)範囲内で(B)空白なのかどうか確認
81
81
  3.◯を記入して、ボードを表示
82
82
  4.勝敗を判断
83
83
  5.ターンを進める
@@ -93,32 +93,28 @@
93
93
 
94
94
  if(x < 0 || x > n - 1 || y < 0 || y > n - 1){
95
95
  printf("入力された値が不正です。\n");
96
- }else{
96
+ }else if(board[y][x] != '_'){
97
97
  printf("そのマスは埋まってます。\n");
98
98
  }
99
99
  }while((x < 0 || x > n - 1 || y < 0 || y > n - 1) || (board[y][x] != '_'));
100
100
 
101
-
102
- //3.◯を記入して、ボードを表示
101
+ //3.◯xを記入して、
103
102
  if(while_count % 2 == 0){
104
103
  board[y][x] = 'O';
105
104
  }else{
106
105
  board[y][x] = 'X';
107
106
  }
108
107
 
109
-
108
+ //ボードを表示
110
109
  for (i = 0; i < n ; i++){
111
110
  printf("\n");
112
111
  for(j = 0; j < n ; j++){
113
112
  printf("%c", board[i][j]);
114
-
115
- }
113
+ }
116
- }
114
+ }
117
- printf("\n\n");
115
+ printf("\n");
118
116
 
119
117
  //4勝敗の判断。縦横斜めが同じかどうかをループで判断引き分け(全マス埋まるも考える)。
120
-
121
- int count = 0;
122
118
  char kigou; //if文を使って偶数回目であればkigou='O',奇数回目であればkigou='X'を代入
123
119
  if(while_count % 2 == 0){
124
120
  kigou = 'O';
@@ -130,31 +126,32 @@
130
126
  for(y = 0; y < n; y++){//横方向の行をn行分チェック。countで数えてその回数とnが同じであれば勝ちになるはず。
131
127
  count1 = 0;
132
128
  for(x = 0; x < n; x++){
133
- if(board[y][x] == kigou){//あとでkigouに変える
129
+ if(board[y][x] == kigou){
134
130
  printf("count1 %d\n", count1);
135
131
  count1++;
136
132
  }
137
133
  }
134
+ if(count1 == n){
135
+ printf("%cの勝ちです!\n", kigou);
136
+ break;
138
- }
137
+ }
139
- if(count1 == n){
140
- printf("%cの勝ちです!\n", kigou);
141
- break;
142
138
  }
143
139
 
144
140
  int count2 = 0;
145
141
  for(x = 0; x < n; x++){//縦方向の行をn列分チェック。countで数えてその回数とnが同じであれば勝ちになるはず。
146
142
  count2 = 0;
147
143
  for(y = 0; y < n; y++){
148
- if(board[y][x] == kigou){//あとでkigouに変える
144
+ if(board[y][x] == kigou){
149
145
  printf("count2 %d\n", count2);
150
146
  count2++;
151
147
  }
152
148
  }
149
+ if(count2 == n){
150
+ printf("%cの勝ちです!\n", kigou);
151
+ break;
153
- }
152
+ }
154
- if(count2 == n){
155
- printf("%cの勝ちです!\n", kigou);
156
- break;
157
- }
153
+ }
154
+
158
155
 
159
156
  int count3 = 0;
160
157
  int a;
@@ -192,8 +189,8 @@
192
189
  }
193
190
  printf("\n");
194
191
  return 0;
195
-
196
192
  }
193
+
197
194
 
198
195
  ```
199
196
 

3

該当のソースコードを直しました!これでコードは完成しました。

2022/12/14 18:48

投稿

haru0
haru0

スコア5

test CHANGED
File without changes
test CHANGED
@@ -126,61 +126,73 @@
126
126
  kigou = 'X';
127
127
  }
128
128
 
129
+ int count1 = 0;
129
130
  for(y = 0; y < n; y++){//横方向の行をn行分チェック。countで数えてその回数とnが同じであれば勝ちになるはず。
131
+ count1 = 0;
130
132
  for(x = 0; x < n; x++){
131
133
  if(board[y][x] == kigou){//あとでkigouに変える
134
+ printf("count1 %d\n", count1);
132
- count++;
135
+ count1++;
133
136
  }
134
137
  }
138
+ }
135
- if(count == n){
139
+ if(count1 == n){
136
- printf("%cの勝ちです!\n", kigou);
140
+ printf("%cの勝ちです!\n", kigou);
141
+ break;
137
- }
142
+ }
138
- break;
143
+
139
- }
140
-
141
- count = 0;
144
+ int count2 = 0;
142
145
  for(x = 0; x < n; x++){//縦方向の行をn列分チェック。countで数えてその回数とnが同じであれば勝ちになるはず。
146
+ count2 = 0;
143
147
  for(y = 0; y < n; y++){
144
148
  if(board[y][x] == kigou){//あとでkigouに変える
149
+ printf("count2 %d\n", count2);
145
- count++;
150
+ count2++;
146
151
  }
147
152
  }
153
+ }
148
- if(count == n){
154
+ if(count2 == n){
149
- printf("%cの勝ちです!\n", kigou);
155
+ printf("%cの勝ちです!\n", kigou);
156
+ break;
150
- }
157
+ }
151
- break;
158
+
152
- }
153
-
154
- count = 0;
159
+ int count3 = 0;
155
160
  int a;
156
161
  for(a = 0; a < n; a++){//左上から右下に向かってチェックする。countで数えてその回数とnが同じであれば勝ちになるはず。
157
162
  if(board[a][a] == kigou){
163
+ printf("count3 %d\n", count3);
158
- count++;
164
+ count3++;
159
- }
165
+ }
160
- }
166
+ }
161
- if(count == n){
167
+ if(count3 == n){
162
- printf("%cの勝ちです!\n", kigou);
168
+ printf("%cの勝ちです!\n", kigou);
163
- break;
169
+ break;
164
- }
170
+ }
165
-
171
+
166
- count = 0;
172
+ int count4 = 0;
167
173
  for (a = 0; a < n; a++){//右上から左下に向かってチェックする。countで数えてその回数とnが同じであれば勝ちになるはず。
168
- if(board[n - 1 - a][n - 1 - a] == kigou);
174
+ if(board[n - 1 - a][a] == kigou){
175
+ printf("count4 %d\n", count4);
176
+ count4++;
169
- }
177
+ }
178
+ }
170
- if(count == n){
179
+ if(count4 == n){
171
- printf("%cの勝ちです!\n", kigou);
180
+ printf("%cの勝ちです!\n", kigou);
172
- break;
181
+ break;
173
- }
182
+ }
174
-
183
+
175
- if(while_count == n*n - 1){//3x3マスであれば、9回目で決まる。while_countは0スタート
184
+ if(while_count == n*n - 1){//
176
185
  printf("引き分けです");
177
186
  break;
178
187
  }
179
188
  //5.ターンを進める
189
+ printf("\n%d周目終わり\n", while_count);
180
190
  while_count++;
191
+ printf("\n%d周目始まる\n", while_count);
181
192
  }
182
193
  printf("\n");
183
194
  return 0;
195
+
184
196
  }
185
197
 
186
198
  ```

2

試したことを書き直しました。

2022/12/14 15:52

投稿

haru0
haru0

スコア5

test CHANGED
File without changes
test CHANGED
@@ -186,8 +186,11 @@
186
186
  ```
187
187
 
188
188
  ### 試したこと
189
+ 判定方法に問題があると考えてので、76行目から125行目を変えたりして試しました。ただ自分が判定方法の何が問題なのか理解できていなかったため、何も分からなかったのが本音です。
190
+
191
+ 判定方法の考え方としては、例えば76行目から86行目が横方向への判定方法なのですが、y=0(0行目)の時、二つ目のforでxを0からn-1(3x3のゲームであれば、nは2)まで動かし、if文の中でkigouが何度boardと同じなのかを数え、countの数とnが同じになれば”勝ち”となる様に考えました。
192
+
189
- 3時間ぐらい色々試した解決しませんした
193
+ 実際には勝っていても終わらなかっ引き分けと判定てしうの
190
-
191
194
 
192
195
  ### 補足情報(FW/ツールのバージョンなど)
193
196
  Macbook Air M1 2020 Ver 12.6

1

誤字を直しました。

2022/12/14 15:05

投稿

haru0
haru0

スコア5

test CHANGED
File without changes
test CHANGED
@@ -36,7 +36,7 @@
36
36
  OXO
37
37
  XO_
38
38
  OX_
39
- ```
39
+
40
40
  //この様になっても終わらない
41
41
  パターン2.1
42
42
  OXO
@@ -46,6 +46,7 @@
46
46
  Oの勝ちです!
47
47
 
48
48
  //パターン2.0をこの状態まで続けるとなぜか終わる。
49
+ ```
49
50
 
50
51
  ### 該当のソースコード
51
52