質問編集履歴
6
breakを追加しました。自分のコードでは直していたのですが、こちらを直すのを忘れていました。
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の位置を直しました。恐らくこれで大丈夫なはずです。
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からコピペし直しました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -72,12 +72,12 @@
|
|
72
72
|
board[i][j] = '_';
|
73
73
|
}
|
74
74
|
}
|
75
|
-
printf("\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
|
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){
|
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){
|
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
該当のソースコードを直しました!これでコードは完成しました。
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
|
-
|
139
|
+
if(count1 == n){
|
136
|
-
|
140
|
+
printf("%cの勝ちです!\n", kigou);
|
141
|
+
break;
|
137
|
-
|
142
|
+
}
|
138
|
-
|
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
|
-
|
154
|
+
if(count2 == n){
|
149
|
-
|
155
|
+
printf("%cの勝ちです!\n", kigou);
|
156
|
+
break;
|
150
|
-
|
157
|
+
}
|
151
|
-
|
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][
|
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){//
|
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
試したことを書き直しました。
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
|
-
|
193
|
+
しかし実際には勝っていても終わらなかったり、引き分けと判定してしまうのです。
|
190
|
-
|
191
194
|
|
192
195
|
### 補足情報(FW/ツールのバージョンなど)
|
193
196
|
Macbook Air M1 2020 Ver 12.6
|
1
誤字を直しました。
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
|
|