質問編集履歴

5

正しく動いてないということについて具体的な内容を追加しました。また,一部表記が分かりづらいものになっている箇所があったのでそこを修正しました。

2021/07/02 10:33

投稿

wagashi_157
wagashi_157

スコア51

test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,6 @@
1
1
  #実行したいこと発生している問題
2
2
 
3
- C++で壁や箱,ゴールの数がどのような設定でも動く倉庫番を作成しているのですが,コンパイルは上手くいったものの,正しく動きません(例えば,ゴールが1つしか表示されない,5×5のマスが整っていない,など)。詳しい原因が分からないので教えていただきたいです。print()関数,completed()関数,move()関数を特に確認してほしいです。また,STLalgorithmの扱いに慣れていないので扱い方についても教えてほしいです。
3
+ C++で壁や箱,ゴールの数がどのような設定でも動く倉庫番を作成しているのですが,コンパイルは上手くいったものの,正しく動きません(具体的にはゴールが1つしか表示されない,それによって1つの箱をゴールに動かしたら終わってしまう,5×5のマスが整っていないといった問題があります)。詳しい原因が分からないので教えていただきたいです。print()関数,completed()関数,move()関数を特に確認してほしいです。また,STLアルゴリズムの扱いに慣れていないので扱い方についても教えてほしいです。
4
4
 
5
5
 
6
6
 
@@ -24,7 +24,7 @@
24
24
 
25
25
  ```
26
26
 
27
- ②#include<algorithm>を追加し、wall, box, goal が「vectorの要素に含まれているかどうかを判定する」ようにする。
27
+ ②#include<algorithm>を基に、wall, box, goal が「vectorの要素に含まれているかどうかを判定する」ようにする。
28
28
 
29
29
  ③completed 関数を「順番に関係なくgoalの全ての要素がboxの全ての要素と一致しているかを判定する」ものにする。
30
30
 

4

正しく動かない詳細・例を入れました。

2021/07/02 10:33

投稿

wagashi_157
wagashi_157

スコア51

test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,6 @@
1
1
  #実行したいこと発生している問題
2
2
 
3
- C++で壁や箱,ゴールの数がどのような設定でも動く倉庫番を作成しているのですが,コンパイルは上手くいったものの,正しく動きません(例えば,が1つしか表示されないなど)。詳しい詳しい原因が分からないので教えていただきたいです。print()関数,completed()関数,move()関数を特に確認してほしいです。また,STLalgorithmの扱いに慣れていないので扱い方についても教えてほしいです。
3
+ C++で壁や箱,ゴールの数がどのような設定でも動く倉庫番を作成しているのですが,コンパイルは上手くいったものの,正しく動きません(例えば,ゴールが1つしか表示されない,5×5のマスが整っていい,など)。詳しい原因が分からないので教えていただきたいです。print()関数,completed()関数,move()関数を特に確認してほしいです。また,STLalgorithmの扱いに慣れていないので扱い方についても教えてほしいです。
4
4
 
5
5
 
6
6
 

3

見やすいように書式を改善しました。

2021/07/01 16:20

投稿

wagashi_157
wagashi_157

スコア51

test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,10 @@
1
1
  #実行したいこと発生している問題
2
2
 
3
- C++で壁や箱,ゴールの数がどのような設定でも動く倉庫番を作成しているのですが,コンパイルは上手くいったものの,正しく動きません(例えば,箱が1つしか表示されないなど)。詳しい詳しい原因が分からないので教えていただきたいです。print()関数,completed()関数,move()関数を特に確認してほしいです。また,STLalgorithmの扱いに慣れていないので扱い方についても教えてほしいです。ちなみに,以下の要領でプログラムを作成しようと考えています。
3
+ C++で壁や箱,ゴールの数がどのような設定でも動く倉庫番を作成しているのですが,コンパイルは上手くいったものの,正しく動きません(例えば,箱が1つしか表示されないなど)。詳しい詳しい原因が分からないので教えていただきたいです。print()関数,completed()関数,move()関数を特に確認してほしいです。また,STLalgorithmの扱いに慣れていないので扱い方についても教えてほしいです。
4
+
5
+
6
+
7
+ ちなみに,以下の要領でプログラムを作成しようと考えています。
4
8
 
5
9
  ①#include<vector>を利用し「ゲームフィールドの初期設定」部分を以下のようにする。
6
10
 

2

「正しく動かない」があまりにも漠然としていたため,実施要領をまとめその通りに上手くいかないことを述べました。

2021/07/01 15:44

投稿

wagashi_157
wagashi_157

スコア51

test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,30 @@
1
1
  #実行したいこと発生している問題
2
2
 
3
- C++で壁や箱,ゴールの数がどのような設定でも動く倉庫番を作成しているのですが,コンパイルは上手くいったものの,正しく動きません。詳しい原因が分からないので教えていただきたいです。print()関数,completed()関数,move()関数を特に確認してほしいです。また,algorithmを利用したのですが,どのalgorithmを利用すば良か分からないので教えてください。
3
+ C++で壁や箱,ゴールの数がどのような設定でも動く倉庫番を作成しているのですが,コンパイルは上手くいったものの,正しく動きません(例えば,箱が1つしか表示されないなど)。詳しい詳しい原因が分からないので教えていただきたいです。print()関数,completed()関数,move()関数を特に確認してほしいです。また,STLalgorithmの扱に慣いないので扱い方についても教えてほしですちなみに,以下の要領でプログラムを作成しようと考えています。
4
+
5
+ ①#include<vector>を利用し「ゲームフィールドの初期設定」部分を以下のようにする。
6
+
7
+ ```
8
+
9
+  const int row{3};
10
+
11
+  const int column{3};
12
+
13
+  const std::vector<Pos> wall{}; //壁0 個
14
+
15
+  const std::vector<Pos> goal{{0,0},{2,1}}; //ゴール2 個
16
+
17
+  Pos player{2,0};
18
+
19
+  std::vector<Pos> box{{0,1},{1,1}}; //箱2 個
20
+
21
+ ```
22
+
23
+ ②#include<algorithm>を追加し、wall, box, goal が「vectorの要素に含まれているかどうかを判定する」ようにする。
24
+
25
+ ③completed 関数を「順番に関係なくgoalの全ての要素がboxの全ての要素と一致しているかを判定する」ものにする。
26
+
27
+ ④box の移動時に、他のbox に重なるかどうかの判定を追加し、重なっていない場合のみ移動するように変更する。
4
28
 
5
29
 
6
30
 

1

コンパイルは{}を直したため成功したのですが,正しく動いていないという内容に変えました。

2021/07/01 15:42

投稿

wagashi_157
wagashi_157

スコア51

test CHANGED
File without changes
test CHANGED
@@ -1,16 +1,126 @@
1
- #実行したいこと問題
1
+ #実行したいこと発生している問題
2
-
2
+
3
- C++で壁や箱,ゴールの数がどのような設定でも動く倉庫番を作成しているのですが,構造体のvectorが上手くいっていないからか,エラーが出てしまいます。詳しい原因が分からないので教えていただきたいです。print()関数,completed()関数,move()関数を特に確認してほしいです。
3
+ C++で壁や箱,ゴールの数がどのような設定でも動く倉庫番を作成しているのですが,コンパイルは上手くいったものの,く動きせん。詳しい原因が分からないので教えていただきたいです。print()関数,completed()関数,move()関数を特に確認してほしいです。また,algorithmを利用したいのですが,どのalgorithmを利用すれば良いか分からないので教えてください。
4
+
5
+
6
+
7
+ **結果**
4
8
 
5
9
  ```C++
6
10
 
11
+ XXXXX
12
+
7
- report2A.cpp:126:1: エラー: expected ‘}’ at end of input
13
+ X+ $ X
14
+
8
-
15
+ X $ X
16
+
17
+ X@ X
18
+
19
+ XXXXX
20
+
21
+
22
+
9
- }
23
+ r
24
+
10
-
25
+ XXXXX
26
+
27
+ X+ $ X
28
+
29
+ X $ X
30
+
31
+ X @ X
32
+
33
+ XXXXX
34
+
35
+
36
+
11
- ^
37
+ r
38
+
12
-
39
+ XXXXX
40
+
41
+ X+ $ X
42
+
43
+ X $ X
44
+
45
+ X @ X
46
+
47
+ XXXXX
48
+
49
+
50
+
51
+ r
52
+
53
+ XXXXX
54
+
55
+ X+ $ X
56
+
57
+ X $ X
58
+
59
+ X @ X
60
+
61
+ XXXXX
62
+
63
+
64
+
65
+ u
66
+
67
+ XXXXX
68
+
69
+ X+ $ X
70
+
71
+ X $ @ X
72
+
73
+ X X
74
+
75
+ XXXXX
76
+
77
+
78
+
79
+ u
80
+
81
+ XXXXX
82
+
83
+ X+ $ @ X
84
+
85
+ X $ X
86
+
87
+ X X
88
+
89
+ XXXXX
90
+
91
+
92
+
93
+ u
94
+
95
+ XXXXX
96
+
97
+ X+ $ @ X
98
+
99
+ X $ X
100
+
101
+ X X
102
+
103
+ XXXXX
104
+
105
+
106
+
107
+ l
108
+
109
+ XXXXX
110
+
111
+ XO@ X
112
+
113
+ X $ X
114
+
115
+ X X
116
+
117
+ XXXXX
118
+
119
+
120
+
13
- report2A.cpp:126:1: エラー: expected unqualified-id at end of input
121
+ The work is completed!!
122
+
123
+
14
124
 
15
125
  ```
16
126
 
@@ -64,8 +174,6 @@
64
174
 
65
175
  public:
66
176
 
67
-
68
-
69
177
  //フィールドを端末上に表示
70
178
 
71
179
  void print(){
@@ -98,17 +206,19 @@
98
206
 
99
207
  //それ以外は空白' 'を表示
100
208
 
209
+ else {
210
+
101
- else if(p == player) {std::cout << '@';}
211
+ if(p == player) {std::cout << '@';}
102
-
103
- else if(p == wall[i]) {std::cout << 'X';}
212
+
104
-
105
- else if(p == goal[i] && p != box[i]) {std::cout << '+';}
213
+ if(p == goal[i] && p != box[i]) {std::cout << '+';}
106
-
214
+
107
- else if(p == box[i] && p != goal[i]) {std::cout << '$';}
215
+ if(p == box[i] && p != goal[i]) {std::cout << '$';}
108
-
216
+
109
- else if(p == goal[i] && p == box[i]) {std::cout << 'O';}
217
+ if(p == goal[i] && p == box[i]) {std::cout << 'O';}
110
-
218
+
111
- else {std::cout<<' ';}
219
+ else {std::cout << ' ';}
220
+
221
+ }
112
222
 
113
223
  }
114
224
 
@@ -116,6 +226,8 @@
116
226
 
117
227
  }
118
228
 
229
+ std::cout << '\n';
230
+
119
231
  }
120
232
 
121
233
 
@@ -124,7 +236,7 @@
124
236
 
125
237
  bool completed(){
126
238
 
127
- for (int a = 0; a < box.size() || a < goal.size(); a++) {
239
+ for (int a = 0; a < goal.size(); a++) {
128
240
 
129
241
  if(goal[a] == box[a])
130
242
 
@@ -172,11 +284,11 @@
172
284
 
173
285
  auto can_move = [=](Pos p){
174
286
 
175
- for (int a = 0; a < box.size() || a < wall.size(); a++) {
287
+ for (int a=0; a < box.size()-1; a++) {
176
-
288
+
177
- return (0 <= p.i && p.i <= row-1) && (0 <= p.j && p.j <= column-1) && p != box[a] && p != wall[a];
289
+ return (0 <= p.i && p.i <= row-1) && (0 <= p.j && p.j <= column-1) && box[a+1] != box[a];
178
-
290
+
179
- }
291
+ }
180
292
 
181
293
  };
182
294
 
@@ -190,7 +302,7 @@
190
302
 
191
303
  for (int a = 0; a < box.size(); a++) {
192
304
 
193
- if(pnext != box[a]){
305
+ if(pnext != box[a]) {
194
306
 
195
307
  player = pnext;
196
308
 
@@ -198,26 +310,26 @@
198
310
 
199
311
  //プレイヤーが箱に重なる場合は箱の移動判定が必要
200
312
 
201
- else{
313
+ else {
202
314
 
203
315
  Pos bnext = next(box[a]);//箱の次の位置を計算
204
316
 
205
317
  //箱が移動可能な場合はプレイヤーと箱を移動
206
318
 
207
- if(can_move(bnext)){
319
+ if(can_move(bnext))
208
320
 
209
321
  player = pnext;
210
322
 
211
323
  box[a] = bnext;
212
324
 
213
- }
214
-
215
325
  }
216
326
 
217
327
  }
218
328
 
219
329
  }
220
330
 
331
+ }
332
+
221
333
  };
222
334
 
223
335
 
@@ -274,7 +386,7 @@
274
386
 
275
387
  ##試したこと
276
388
 
277
- 構造体のvectorを扱うため,それぞれの箱やゴール,壁が条件を満たすかを判定できるためにfor文を使って作成しました。大半をコメントアウトしてprint()関数だけを動かしたら,コンパイルはできたもののXXXXXのみが出力されSegmentation faultが出てしまいました。
389
+ 構造体のvectorを扱うため,それぞれの箱やゴール,壁が条件を満たすかを判定できるためにfor文を使って作成しました。
278
390
 
279
391
  ##補足
280
392