回答編集履歴

1

見直しキャンペーン中

2023/07/18 21:22

投稿

TN8001
TN8001

スコア9341

test CHANGED
@@ -1,251 +1,128 @@
1
1
  当たり判定のコードらしきものがあったのでそれを尊重しました。
2
-
3
- どう乗せるかを考えましたが、見た目のキレイさとコードの簡便さのため吸い込む(うまく表現できない^^;)ようにしました。
2
+ どう乗せるかを考えましたが、見た目のキレイさとコードの簡便さのため吸い込むようにしました(うまく表現できない^^;
4
-
5
-
6
3
 
7
4
  ガタガタに乗せるなら乗った位置をリスト等で覚えておく必要があるのと、どんどん右に積み重なったりした場合にどうするのかが悩ましいです。
8
5
 
9
-
10
-
11
6
  変更点
12
-
13
7
  * パンケーキを複数描く必要があるため関数に分けました
14
-
15
8
  * パンケーキに合わせ机とお皿も関数に分けました
16
-
17
9
  * 関数の引数と紛らわしいので変数名をわかりやすく長めの名前に変えました
18
-
19
- * drawが少し長く感じたので位置の更新と描画を別の関数に分けました
10
+ * `draw`が少し長く感じたので位置の更新と描画を別の関数に分けました
20
-
21
-
22
11
 
23
12
  ```Processing
24
-
25
13
  int plateX; // お皿の中心X
26
-
27
14
  final int plateY = 400; // お皿の中心Y
28
-
29
15
  final int moveSpeed = 10; // お皿の移動スピード
30
-
31
-
32
16
 
33
17
  int hitY = plateY; // 当たり判定Y 最初はお皿の中心Y ケーキが乗っていくにしたがって上に上がる(値は減る)
34
18
 
35
-
36
-
37
19
  int pancakeX; // ケーキの中心X
38
-
39
20
  int pancakeY; // ケーキの中心Y
40
-
41
21
  int dropSpeed; // ケーキの落下スピード
42
-
43
-
44
22
 
45
23
  int kaisu = 0; // 乗ったケーキの数
46
24
 
25
+ void initPos() {
26
+ pancakeX = int(random(width));
27
+ dropSpeed = int(random(3, 4));
28
+ pancakeY = -10;
29
+ }
47
30
 
31
+ void setup() {
32
+ size(500, 500);
33
+ textFont(createFont("MS Gothic", 48), 48);
34
+ textSize(15);
35
+ initPos();
36
+ plateX = width / 2;
37
+ }
48
38
 
39
+ ///////位置の更新/////////
49
- void initPos() {
40
+ void update() {
41
+ ///////ケーキの落下/////////
42
+ pancakeY += dropSpeed;
50
43
 
44
+ ///////お皿の移動/////////
51
- pancakeX = int(random(width));
45
+ // plateX = mouseX;
46
+ if (keyPressed) {
47
+ if (keyCode == RIGHT) plateX += moveSpeed;
48
+ if (keyCode == LEFT) plateX -= moveSpeed;
49
+ }
52
50
 
51
+ ///////お皿の移動範囲制限////////
53
- dropSpeed = int(random(3, 4));
52
+ if (plateX < 120 - 20) plateX = 120 - 20;
53
+ if (plateX > 420 - 20) plateX = 420 - 20;
54
54
 
55
+ ///////当たり判定////////
56
+ if (dist(plateX, hitY, pancakeX, pancakeY) < 45) { // キャッチ成功
57
+ initPos();
58
+ kaisu++;
55
- pancakeY = -10;
59
+ hitY -= 20;
60
+ } else if (pancakeY - 20 > 360) { // キャッチ失敗
61
+ initPos();
62
+ }
63
+ }
56
64
 
65
+ ///////描画/////////
66
+ void draw() {
67
+ update();
68
+
69
+ background(#D7F3FA);
70
+ drawDesk();
71
+ drawPlate(plateX, plateY);
72
+ for (int i = 0; i < kaisu; i++) {
73
+ drawPancake(plateX, plateY - (i * 20) - 20);
74
+ }
75
+ drawPancake(pancakeX, pancakeY);
76
+ //////カウント////////
77
+ fill(#A56920);
78
+ text("パンケーキの枚数:" + kaisu, 30, 30);
57
79
  }
58
80
 
59
81
 
60
-
82
+ //////机の描画////////
61
- void setup() {
83
+ void drawDesk() {
62
-
84
+ fill(#A74C0F);
85
+ rect(10, 400, 480, 50);
86
+ fill(#93420C);
63
- size(500, 500);
87
+ rect(20, 450, 50, 50);
64
-
88
+ fill(#93420C);
65
- textFont(createFont("MS Gothic", 48), 48);
89
+ rect(430, 450, 50, 50);
66
-
67
- textSize(15);
90
+ fill(#FFD1F5);
68
-
69
- initPos();
91
+ noStroke();
70
-
71
- plateX = width / 2;
92
+ triangle(100, 400, 400, 400, 250, 480);
72
-
73
93
  }
74
94
 
95
+ ///////お皿の描画///////
96
+ void drawPlate(int x, int y) {
97
+ fill(255);
98
+ ellipse(x, y, 200, 20);
99
+ noFill();
100
+ stroke(74, 252, 200);
101
+ strokeWeight(3);
102
+ ellipse(x, y, 200, 20);
75
103
 
76
-
77
- ///////位置の更新/////////
78
-
79
- void update() {
80
-
81
- ///////ケーキの落下/////////
82
-
83
- pancakeY += dropSpeed;
104
+ //fill(0);
84
-
85
-
86
-
87
- ///////お皿の移動/////////
88
-
89
- // plateX = mouseX;
105
+ //ellipse(x, y, 20, 20);
90
-
91
- if (keyPressed) {
92
-
93
- if (keyCode == RIGHT) plateX += moveSpeed;
94
-
95
- if (keyCode == LEFT) plateX -= moveSpeed;
96
-
97
- }
98
-
99
-
100
-
101
- ///////お皿の移動範囲制限////////
102
-
103
- if (plateX < 120 - 20) plateX = 120 - 20;
104
-
105
- if (plateX > 420 - 20) plateX = 420 - 20;
106
-
107
-
108
-
109
- ///////当たり判定////////
110
-
111
- if (dist(plateX, hitY, pancakeX, pancakeY) < 45) { // キャッチ成功
112
-
113
- initPos();
114
-
115
- kaisu++;
116
-
117
- hitY -= 20;
118
-
119
- } else if (pancakeY - 20 > 360) { // キャッチ失敗
120
-
121
- initPos();
122
-
123
- }
124
-
125
106
  }
126
107
 
127
-
128
-
129
- ///////描画/////////
108
+ /////////パンケーキの描画////////
130
-
131
- void draw() {
132
-
133
- update();
134
-
135
-
136
-
137
- background(#D7F3FA);
138
-
139
- drawDesk();
140
-
141
- drawPlate(plateX, plateY);
142
-
143
- for (int i = 0; i < kaisu; i++) {
144
-
145
- drawPancake(plateX, plateY - (i * 20) - 20);
146
-
147
- }
148
-
149
- drawPancake(pancakeX, pancakeY);
150
-
151
- //////カウント////////
152
-
153
- fill(#A56920);
154
-
155
- text("パンケーキの枚数:" + kaisu, 30, 30);
156
-
157
- }
158
-
159
-
160
-
161
-
162
-
163
- //////机の描画////////
164
-
165
- void drawDesk() {
166
-
167
- fill(#A74C0F);
168
-
169
- rect(10, 400, 480, 50);
170
-
171
- fill(#93420C);
172
-
173
- rect(20, 450, 50, 50);
174
-
175
- fill(#93420C);
176
-
177
- rect(430, 450, 50, 50);
178
-
179
- fill(#FFD1F5);
180
-
181
- noStroke();
182
-
183
- triangle(100, 400, 400, 400, 250, 480);
184
-
185
- }
186
-
187
-
188
-
189
- ///////お皿の描画///////
190
-
191
- void drawPlate(int x, int y) {
109
+ void drawPancake(int x, int y) {
192
-
110
+ stroke(137, 83, 12);
111
+ strokeWeight(0.5);
112
+ fill(252, 219, 110);
113
+ rect(x - 60, y, 120, 20);
114
+ arc(x, y + 20, 120, 40, 0, PI);
115
+ ellipse(x, y, 120, 40);
193
- fill(255);
116
+ fill(#CB6F31);
194
-
195
- ellipse(x, y, 200, 20);
117
+ ellipse(x, y, 100, 30);
196
-
197
- noFill();
198
-
199
- stroke(74, 252, 200);
200
-
201
- strokeWeight(3);
202
-
203
- ellipse(x, y, 200, 20);
204
-
205
-
206
118
 
207
119
  //fill(0);
120
+ //ellipse(x, y, 20, 20);
121
+ }
122
+ ```
123
+ ![アプリ画像](https://ddjkaamml8q8x.cloudfront.net/questions/2023-07-19/fcfeec8c-3707-4a69-b32c-08546d1a8f07.png)
208
124
 
209
- //ellipse(x, y, 20, 20);
210
-
211
- }
212
-
213
-
214
-
215
- /////////パンケーキの描画////////
216
-
217
- void drawPancake(int x, int y) {
218
-
219
- stroke(137, 83, 12);
220
-
221
- strokeWeight(0.5);
222
-
223
- fill(252, 219, 110);
224
-
225
- rect(x - 60, y, 120, 20);
226
-
227
- arc(x, y + 20, 120, 40, 0, PI);
228
-
229
- ellipse(x, y, 120, 40);
230
-
231
- fill(#CB6F31);
232
-
233
- ellipse(x, y, 100, 30);
234
-
235
-
236
-
237
- //fill(0);
238
-
239
- //ellipse(x, y, 20, 20);
240
-
241
- }
242
-
243
- ```
125
+ ---
244
-
245
-
246
-
247
-
248
126
 
249
127
  今回のものに使うのは難しそうですが、テイストが似ていたので何かの参考になるかもしれません。
250
-
251
128
  [[Sample]タピオカショット - Art Programming Basic](https://oua-ap.tumblr.com/post/185785515217/sample%E3%82%BF%E3%83%94%E3%82%AA%E3%82%AB%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88)