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

回答編集履歴

1

1

2017/05/04 17:32

投稿

takasima20
takasima20

スコア7468

answer CHANGED
@@ -4,4 +4,59 @@
4
4
 
5
5
  あたりでしょか。
6
6
  このあたりのさじ加減はなかなか難しいので
7
- よそのソースを参考にするなど…
7
+ よそのソースを参考にするなど…
8
+ --- 追記 ---
9
+ オブジェクトの利用に関しては他の方の回答をみていただくとして…
10
+
11
+ そのクラスが「何を扱うか」を常に意識しておかないと
12
+ ごちゃごちゃで分かりにくくて使いにくいものになります。
13
+ 例えばこんな感じのはどうでしょう
14
+ ```Python
15
+ class Gamen:
16
+ def __init__(self, w, h):
17
+ self.width = w
18
+ self.height = h
19
+ def loop_point(self, p):
20
+ # 位置を補正
21
+ # Pointオブジェクトを返す
22
+
23
+ class Point:
24
+ def __init__(self, x, y):
25
+ self.x = x
26
+ self.y = y
27
+ def up(self, d):
28
+ self.y = self.y + d
29
+ def down(self, d):
30
+ self.y = self.y - d
31
+ def right(self, d):
32
+ self.x = self.x + d
33
+ def left(self, d):
34
+ self.x = self.x - d
35
+
36
+ class Sousa:
37
+ def __init__(self, s, d):
38
+ self.dir = s
39
+ self.distance = d
40
+
41
+ def change_point(g, p, s):
42
+ if s.dir == "UP":
43
+ p.up(s.distance)
44
+ if s.dir == "DOWN":
45
+ p.down(s.distance)
46
+ if s.dir == "RIGHT":
47
+ p.right(s.distance)
48
+ if s.dir == "LEFT":
49
+ p.left(s.distance)
50
+ r = g.loop_point(p)
51
+ return r
52
+
53
+ if __name__ == '__main__':
54
+ width, height, x, y = [int(x) for x in input().split()]
55
+ Dir, Distance = input().split()
56
+ Distance = int(Distance)
57
+ g = Gamen(width, height)
58
+ p = Point(x, y)
59
+ s = Sousa(Dir, Distance)
60
+ p = change_point(g, p, s)
61
+ print(p.x, p.y)
62
+ ```