質問編集履歴

4

2019/05/20 05:35

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -32,9 +32,9 @@
32
32
 
33
33
  up = abs(e.x - p.x) + abs(e.y - p.y - 1);
34
34
 
35
- max = right;
36
35
 
37
36
 
37
+ max = right;
38
38
 
39
39
  if (down > max) max = down;
40
40
 

3

2019/05/20 05:35

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -22,6 +22,8 @@
22
22
 
23
23
  int right, down, left, up, max;
24
24
 
25
+
26
+
25
27
  right = abs(e.x - p.x + 1) + abs(e.y - p.y);
26
28
 
27
29
  down = abs(e.x - p.x) + abs(e.y + 1 - p.y);
@@ -32,27 +34,31 @@
32
34
 
33
35
  max = right;
34
36
 
37
+
38
+
35
39
  if (down > max) max = down;
36
40
 
37
41
  if (left > max) max = left;
38
42
 
39
43
  if (up > max) max = up;
40
44
 
41
- if (max = right && map[p.y][p.x + 1] == 1 && !(e.y == p.y && e.x == p.x + 1)) { return RIGHT; }
42
45
 
43
- else if (max = down && map[p.y + 1][p.x] == 1 && !(e.y == p.y + 1 && e.x == p.x)) { return DOWN; }
44
46
 
45
- else if (max = left && map[p.y][p.x - 1] == 1 && !(e.y == p.y && e.x == p.x - 1)) { return LEFT; }
47
+ if (max == right && map[p.y][p.x + 1] == 1 && !(e.y == p.y && e.x == p.x + 1)) { return RIGHT; }
46
48
 
47
- else if (max = up && map[p.y - 1][p.x] == 1 && !(e.y == p.y - 1 && e.x == p.x)) { return UP; }
49
+ else if (max == down && map[p.y + 1][p.x] == 1 && !(e.y == p.y + 1 && e.x == p.x)) { return DOWN; }
48
50
 
49
- else if (max = right && map[p.y][p.x + 1] == 0 && !(e.y == p.y && e.x == p.x + 1)) { return RIGHT; }
51
+ else if (max == left && map[p.y][p.x - 1] == 1 && !(e.y == p.y && e.x == p.x - 1)) { return LEFT; }
50
52
 
51
- else if (max = down && map[p.y + 1][p.x] == 0 && !(e.y == p.y + 1 && e.x == p.x)) { return DOWN; }
53
+ else if (max == up && map[p.y - 1][p.x] == 1 && !(e.y == p.y - 1 && e.x == p.x)) { return UP; }
52
54
 
53
- else if (max = left && map[p.y][p.x - 1] == 0 && !(e.y == p.y && e.x == p.x - 1)) { return LEFT; }
55
+ else if (max == right && map[p.y][p.x + 1] == 0 && !(e.y == p.y && e.x == p.x + 1)) { return RIGHT; }
54
56
 
57
+ else if (max == down && map[p.y + 1][p.x] == 0 && !(e.y == p.y + 1 && e.x == p.x)) { return DOWN; }
58
+
59
+ else if (max == left && map[p.y][p.x - 1] == 0 && !(e.y == p.y && e.x == p.x - 1)) { return LEFT; }
60
+
55
- else if (max = up && map[p.y - 1][p.x] == 0 && !(e.y == p.y - 1 && e.x == p.x)) { return UP; }
61
+ else if (max == up && map[p.y - 1][p.x] == 0 && !(e.y == p.y - 1 && e.x == p.x)) { return UP; }
56
62
 
57
63
  else if (map[p.y][p.x + 1] == 1 && !(e.y == p.y && e.x == p.x + 1)) { return RIGHT; }
58
64
 

2

2019/05/20 05:35

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,8 @@
1
1
  敵に食べられる前に餌を食べ尽くすために自機を動かすプログラムを作っています。
2
2
 
3
3
 
4
+
5
+ ```
4
6
 
5
7
  プレイヤーのソースコード
6
8
 
@@ -72,6 +74,8 @@
72
74
 
73
75
  }
74
76
 
77
+ ```
78
+
75
79
 
76
80
 
77
81
  マンハッタン距離の最大値を求めて最大値の方向に進むプログラムを組んでいるのですが、同じ場所をぐるぐる逃げ回りループしてしまいます。
@@ -94,7 +98,7 @@
94
98
 
95
99
   ・返り値としてMOVEMENT型の値を返します。
96
100
 
97
-  ・引数として以下の変数が与えられます
101
+  ・引数として以下の変数が与えられ
98
102
 
99
103
     map(MAPDATA型):マップの情報(通路・エさ・壁の位置)
100
104
 
@@ -110,9 +114,9 @@
110
114
 
111
115
  *MOVEMENT型
112
116
 
113
-  プレイヤーやモンスターの移動方向を示す型です
117
+  プレイヤーやモンスターの移動方向を示す型。
114
118
 
115
-  STAY,UP,LEFT,RIGHT,DOWNの5種類の値があります
119
+  STAY,UP,LEFT,RIGHT,DOWNの5種類の値があ
116
120
 
117
121
  *MAPDATA型
118
122
 
@@ -128,9 +132,9 @@
128
132
 
129
133
  *POSITION型
130
134
 
131
-  プレイヤーやモンスターの位置情報を示す型です
135
+  プレイヤーやモンスターの位置情報を示す型。
132
136
 
133
-  x座標とy座標を取り出すことが出来ます
137
+  x座標とy座標を取り出すことが出来
134
138
 
135
139
    (例)プレイヤーのx座標:p.x,モンスターのy座標:e.y
136
140
 

1

2019/05/20 05:26

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -77,3 +77,65 @@
77
77
  マンハッタン距離の最大値を求めて最大値の方向に進むプログラムを組んでいるのですが、同じ場所をぐるぐる逃げ回りループしてしまいます。
78
78
 
79
79
  ループを改善するにはどのようにすれば良いかアドバイスいただきたいです。
80
+
81
+
82
+
83
+ モンスターはプレイヤーに向かって最短距離で移動しようとします。
84
+
85
+ いずれかの条件を満たすまでゲームが継続します。
86
+
87
+ ・プレイヤーがエサをすべて食べる
88
+
89
+ ・プレイヤーがモンスターに接触する
90
+
91
+ ・1000ターン経過する
92
+
93
+
94
+
95
+  ・返り値としてMOVEMENT型の値を返します。
96
+
97
+  ・引数として以下の変数が与えられます。
98
+
99
+    map(MAPDATA型):マップの情報(通路・エさ・壁の位置)
100
+
101
+    p(POSITION型):プレイヤーの位置情報
102
+
103
+    e(POSITION型):モンスターの位置情報
104
+
105
+    turn(int型):現在のターン数(最初は0)
106
+
107
+ ランダムを使う場合はrand関数のみ使用し,srand関数は使わないでください。
108
+
109
+
110
+
111
+ *MOVEMENT型
112
+
113
+  プレイヤーやモンスターの移動方向を示す型です。
114
+
115
+  STAY,UP,LEFT,RIGHT,DOWNの5種類の値があります。
116
+
117
+ *MAPDATA型
118
+
119
+  マップ上の通路・エサ・壁の位置の情報を示す型です。
120
+
121
+  0~255の値を持つ,22×19の二次元配列として扱うことができます。
122
+
123
+   0:通路
124
+
125
+   1:エサ
126
+
127
+   2:壁
128
+
129
+ *POSITION型
130
+
131
+  プレイヤーやモンスターの位置情報を示す型です。
132
+
133
+  x座標とy座標を取り出すことが出来ます。
134
+
135
+   (例)プレイヤーのx座標:p.x,モンスターのy座標:e.y
136
+
137
+ また,以下の値が定義されています。
138
+
139
+  MAP_WIDTH:マップの横幅 (19)
140
+
141
+  MAP_HEIGHT:マップの縦幅 (22)