回答編集履歴

5

追記

2020/10/10 01:16

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -163,3 +163,117 @@
163
163
 
164
164
 
165
165
  最初からリストに直接放り込めば良いのでは?
166
+
167
+
168
+
169
+ 読み易いコードの書き方
170
+
171
+ ---
172
+
173
+ > コメントについてまた質問ですが、どのようなことを書いたらいいんでしょうか?
174
+
175
+
176
+
177
+ WhatとWhyを書くようにします。
178
+
179
+ ただしWhatは命名やモジュールの切り分けで表現できる場合があります。
180
+
181
+
182
+
183
+ ###Whatの例
184
+
185
+
186
+
187
+ 例えば、これ、第三者がいきなり見て意味が分かるでしょうか?
188
+
189
+ ```Python
190
+
191
+ planet = heavenly_body_pygame(10000000,13758000,7.347e+18,{(-1,0):102},"images\e.png")
192
+
193
+ ```
194
+
195
+
196
+
197
+ とりあえず惑星なんだなということしか分からないです。
198
+
199
+ こんなふうに命名すると情報が少し増えます。(火星にしたのは仮です)
200
+
201
+ ```Python
202
+
203
+ mars = heavenly_body_pygame(10000000,13758000,7.347e+18,{(-1,0):102},"images\e.png")
204
+
205
+ ```
206
+
207
+
208
+
209
+ それぞれの引数についても、一度見ただけではわからないです。
210
+
211
+ 幸いPythonにはキーワード引数の機能がありますので、次のように書けます。
212
+
213
+ ```Python
214
+
215
+ mars = heavenly_body_pygame(
216
+
217
+ position_x=10000000, position_y=13758000, mass=7.347e+18,
218
+
219
+ initial_acceleration={(-1,0):102},
220
+
221
+ planet_image_path="images\e.png"
222
+
223
+ )
224
+
225
+ ```
226
+
227
+
228
+
229
+ キーワード引数が使えない場合はコメントで代替します。
230
+
231
+ 引数名だけでは説明が不足する部分をコメントで補足するのも良いアイデアです。
232
+
233
+ ```Python
234
+
235
+ mars = heavenly_body_pygame(
236
+
237
+ 10000000, 13758000, # x座標, y座標
238
+
239
+ 7.347e+18, # 質量(単位はoooo)
240
+
241
+ {(-1,0): 102}, # 加速度初期値
242
+
243
+ "images\e.png" # 惑星画像のパス
244
+
245
+ )
246
+
247
+ ```
248
+
249
+
250
+
251
+ ちょっと話は逸れますが、単位は変数名に入れた方が無難です。
252
+
253
+ mass_kgとかmass_tonnとか。いわゆるアプリケーションハンガリアンですね。
254
+
255
+
256
+
257
+ ###Whyの例
258
+
259
+
260
+
261
+ 例えば、次のコード。この変数がなぜ必要なのか読み取れないです。
262
+
263
+ > ```Python
264
+
265
+ key_pressing = []
266
+
267
+ > ```
268
+
269
+
270
+
271
+ 次のように理由が書いてあるだけでだいぶ印象が変わります。
272
+
273
+ ```Python
274
+
275
+ # 同時押しを判定するために、押されているキーを格納する
276
+
277
+ key_pressing = []
278
+
279
+ ```

4

修正

2020/10/10 01:16

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
  0. マジックナンバーが多い(せめてなぜその数値かは書くべき)
10
10
 
11
- 0. 変数名、特にループ変数が分かり辛い
11
+ 0. 変数名、特にループ変数が分かり辛い
12
12
 
13
13
  0. 命名に一貫性が無い(GREEN/red, planet/planet2)
14
14
 
@@ -46,15 +46,7 @@
46
46
 
47
47
  BLACK = (0,0,0)
48
48
 
49
- WHITE = (255,255,255)
50
-
51
- GLAY = (100,100,100)
52
-
53
- SKYBLUE = (100,200,300)
54
-
55
- BROWN = (100,500,0)
56
-
57
- GREEN = (0,255,0)
49
+ ...
58
50
 
59
51
  red = (255,0,0)
60
52
 
@@ -66,11 +58,7 @@
66
58
 
67
59
  myfont_small_small=pygame.font.Font(None,16)
68
60
 
69
- myfont_small=pygame.font.Font(None,32)
70
-
71
- myfont=pygame.font.Font(None,64)
61
+ ...
72
-
73
- myfont_big=pygame.font.Font(None,100)
74
62
 
75
63
  myfont_big_big=pygame.font.Font(None,200)
76
64
 
@@ -78,7 +66,7 @@
78
66
 
79
67
 
80
68
 
81
- 辞書にしましょう。
69
+ 辞書、あるいは列挙型にしましょう。
82
70
 
83
71
 
84
72
 

3

追記

2020/10/09 14:22

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -19,3 +19,159 @@
19
19
 
20
20
 
21
21
  特に最初の事項は致命的です。
22
+
23
+
24
+
25
+ 細かいこと
26
+
27
+ ---
28
+
29
+ > ```Python
30
+
31
+ import numpy as np
32
+
33
+ import pygame
34
+
35
+ import os
36
+
37
+ > ```
38
+
39
+
40
+
41
+ 標準モジュールを先に読み込んだ方がトラブルが少ないです。
42
+
43
+
44
+
45
+ > ```Python
46
+
47
+ BLACK = (0,0,0)
48
+
49
+ WHITE = (255,255,255)
50
+
51
+ GLAY = (100,100,100)
52
+
53
+ SKYBLUE = (100,200,300)
54
+
55
+ BROWN = (100,500,0)
56
+
57
+ GREEN = (0,255,0)
58
+
59
+ red = (255,0,0)
60
+
61
+ > ```
62
+
63
+
64
+
65
+ > ```Python
66
+
67
+ myfont_small_small=pygame.font.Font(None,16)
68
+
69
+ myfont_small=pygame.font.Font(None,32)
70
+
71
+ myfont=pygame.font.Font(None,64)
72
+
73
+ myfont_big=pygame.font.Font(None,100)
74
+
75
+ myfont_big_big=pygame.font.Font(None,200)
76
+
77
+ > ```
78
+
79
+
80
+
81
+ 辞書にしましょう。
82
+
83
+
84
+
85
+ > ```Python
86
+
87
+ def to_vector(before):
88
+
89
+ aspect = before[0]
90
+
91
+ power = before[1]
92
+
93
+ value = ((power**2)/(aspect[0]**2 + aspect[1]**2))**(1/2)
94
+
95
+ return_val = np.array([aspect[0] * value,aspect[1] * value])
96
+
97
+ del value
98
+
99
+ del power
100
+
101
+ del aspect
102
+
103
+ return return_val
104
+
105
+ > ```
106
+
107
+
108
+
109
+ 逐一delする必要はありません。GCに任せましょう。
110
+
111
+
112
+
113
+ > ```Python
114
+
115
+ self.acceleration_list = {(0,0):0}#the unit is "m/s"
116
+
117
+ self.acceleration_list = {}
118
+
119
+ self.power = {(0,0):0}#the unit is "N"
120
+
121
+ self.power = {}
122
+
123
+ > ```
124
+
125
+
126
+
127
+ 無駄です。
128
+
129
+
130
+
131
+ > ```Python
132
+
133
+ self.distance = ((distance_x ** 2) + (distance_y ** 2)) ** (1/2)
134
+
135
+ > ```
136
+
137
+
138
+
139
+ ユークリッド距離は関数に切り出しても良いかと。
140
+
141
+ どこかのモジュールにありそうな気がします。
142
+
143
+
144
+
145
+ > ```Python
146
+
147
+ star = heavenly_body_pygame(10000000,10000000,5.972e+20,{(0,-1):0},"images\sun.png")
148
+
149
+ planet = heavenly_body_pygame(10000000,13758000,7.347e+18,{(-1,0):102},"images\e.png")
150
+
151
+ planet2 = heavenly_body_pygame(10000000,3000000,7.347e+18,{(-1,0):30},"images\c.png")
152
+
153
+ planet3 = heavenly_body_pygame(10000000, 9000000, 1e+18, {(1,0):130},"images\m.png")
154
+
155
+ planet4 = heavenly_body_pygame(10000000, 20000000, 1e+19, {(-1,0):50},"images\j.png")
156
+
157
+ planet5 = heavenly_body_pygame(10000000, 8000000, 1e+10, {(-1,0):150},"images\s.png")
158
+
159
+ planets = pygame.sprite.Group()
160
+
161
+ planets.add(planet)
162
+
163
+ planets.add(star)
164
+
165
+ planets.add(planet2)
166
+
167
+ planets.add(planet3)
168
+
169
+ planets.add(planet4)
170
+
171
+ planets.add(planet5)
172
+
173
+ > ```
174
+
175
+
176
+
177
+ 最初からリストに直接放り込めば良いのでは?

2

追記

2020/10/09 14:16

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -12,6 +12,8 @@
12
12
 
13
13
  0. 命名に一貫性が無い(GREEN/red, planet/planet2)
14
14
 
15
+ 0. スタイルが統一されていない(=の両側にスペースを入れるか、など)
16
+
15
17
  0. ネストが深い
16
18
 
17
19
 

1

追記

2020/10/09 14:07

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -10,6 +10,8 @@
10
10
 
11
11
  0. 変数名、特にループ変数が分かり辛い
12
12
 
13
+ 0. 命名に一貫性が無い(GREEN/red, planet/planet2)
14
+
13
15
  0. ネストが深い
14
16
 
15
17