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

質問編集履歴

6

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

2022/12/15 22:14

投稿

haru0
haru0

スコア5

title CHANGED
File without changes
body 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

title CHANGED
File without changes
body CHANGED
@@ -132,10 +132,13 @@
132
132
  }
133
133
  }
134
134
  if(count1 == n){
135
- printf("%cの勝ちです!\n", kigou);
136
135
  break;
137
136
  }
138
137
  }
138
+ if(count1 == n){
139
+ printf("%cの勝ちです!\n", kigou);
140
+ break;
141
+ }
139
142
 
140
143
  int count2 = 0;
141
144
  for(x = 0; x < n; x++){//縦方向の行をn列分チェック。countで数えてその回数とnが同じであれば勝ちになるはず。
@@ -147,10 +150,13 @@
147
150
  }
148
151
  }
149
152
  if(count2 == n){
150
- printf("%cの勝ちです!\n", kigou);
151
153
  break;
152
154
  }
153
155
  }
156
+ if(count2 == n){
157
+ printf("%cの勝ちです!\n", kigou);
158
+ break;
159
+ }
154
160
 
155
161
 
156
162
  int count3 = 0;
@@ -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

title CHANGED
File without changes
body 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,32 +126,33 @@
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;
137
+ }
138
138
  }
139
- if(count1 == n){
140
- printf("%cの勝ちです!\n", kigou);
141
- break;
142
- }
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;
152
+ }
153
153
  }
154
- if(count2 == n){
155
- printf("%cの勝ちです!\n", kigou);
156
- break;
157
- }
158
154
 
155
+
159
156
  int count3 = 0;
160
157
  int a;
161
158
  for(a = 0; a < n; a++){//左上から右下に向かってチェックする。countで数えてその回数とnが同じであれば勝ちになるはず。
@@ -192,9 +189,9 @@
192
189
  }
193
190
  printf("\n");
194
191
  return 0;
195
-
196
192
  }
197
193
 
194
+
198
195
  ```
199
196
 
200
197
  ### 試したこと

3

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

2022/12/14 18:48

投稿

haru0
haru0

スコア5

title CHANGED
File without changes
body 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);
137
- }
138
141
  break;
139
142
  }
140
143
 
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);
150
- }
151
156
  break;
152
157
  }
153
158
 
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
168
  printf("%cの勝ちです!\n", kigou);
163
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++;
177
+ }
169
178
  }
170
- if(count == n){
179
+ if(count4 == n){
171
180
  printf("%cの勝ちです!\n", kigou);
172
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

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

1

誤字を直しました。

2022/12/14 15:05

投稿

haru0
haru0

スコア5

title CHANGED
File without changes
body 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