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

回答編集履歴

1

見直しキャンペーン中

2023/07/22 08:51

投稿

TN8001
TN8001

スコア10180

answer CHANGED
@@ -1,314 +1,313 @@
1
- どちらも残したいので回答を分けさせていただきます。
2
-
3
- # とにかく動けばいい場合
4
- ```Processing
5
- import ddf.minim.*;
6
-
7
- Minim minim;
8
- AudioPlayer player;
9
- PFont font;
10
-
11
- Opening opening;
12
- Question question;
13
- Correct correct;
14
- Incorrect incorrect;
15
-
16
- int x1 = 30;
17
- int y1 = 500;
18
- int x2 = 250;
19
- int y2 = 500;
20
- int w = 170;
21
- int h = 170;
22
-
23
- int mode; // 0:タイトル 1:問題 2:判定
24
-
25
- void setup() {
26
- size(460, 800);
27
- //minim = new Minim(this);
28
- //player = minim.loadFile("QuizKnockのメインテーマ.mp3");
29
- //player.play();
30
- font = createFont("游明朝 Demibold", 24);
31
- textFont(font);
32
-
33
- opening = new Opening();
34
- correct = new Correct();
35
- incorrect = new Incorrect();
36
- question = new Question();
37
- opening.display();
38
- }
39
-
40
- void draw() {
41
- }
42
-
43
- void mouseClicked() {
44
- switch (mode) {
45
- case 0:
46
- mode = 1;
47
- question.display();
48
- break;
49
- case 1:
50
- if (x1 < mouseX && mouseX < x1 + w && y1 < mouseY && mouseY < y1 + h) {
51
- mode = 2;
52
- correct.display();
53
- }
54
- if (x2 < mouseX && mouseX < x2 + w && y2 < mouseY && mouseY < y2 + h) {
55
- mode = 2;
56
- incorrect.display();
57
- }
58
- break;
59
- case 2:
60
- mode = 0;
61
- opening.display();
62
- break;
63
- }
64
- }
65
-
66
-
67
- class Opening {
68
- void display() {
69
- background(0, 255, 255);
70
- textAlign(CENTER);
71
- fill(0);
72
- textSize(25);
73
- text("ルイザ・グロス・ホロウィッツ賞", width / 2, 250);
74
- text("日本人受賞者を覚えよう!", width / 2, 285);
75
- textSize(18);
76
- text("ルイザ・グロス・ホロウィッツ賞", width / 2, 500);
77
- text("日本人受賞者を全員答えられたらクリアだよ", width / 2, 530);
78
- }
79
- }
80
-
81
- class Question {
82
- void display() {
83
- background(245, 100, 170);
84
- textAlign(CENTER);
85
- fill(0);
86
- textSize(25);
87
- text("生物学や生化学の研究者に贈られる", width / 2, 250);
88
- text("ルイザ・グロス・ホロウィッツ賞を", width / 2, 285);
89
- text("現在、日本人で唯一受賞したのは誰?", width / 2, 320);
90
- fill(255);
91
- noStroke();
92
- rect(x1, y1, w, h);
93
- fill(0);
94
- textAlign(CENTER);
95
- textSize(30);
96
- text("利根川進", 115, 600);
97
- fill(255);
98
- rect(x2, y2, w, h);
99
- fill(0);
100
- text("木村資生", 335, 600);
101
- }
102
- }
103
-
104
- class Correct {
105
- void display() {
106
- background(255, 255, 0);
107
- textAlign(CENTER);
108
- textSize(80);
109
- text("クリア", width / 2, 300);
110
- textSize(25);
111
- text("1不可説不可説転点", width / 2, 500);
112
- text("獲得", width / 2, 535);
113
- }
114
- }
115
-
116
- class Incorrect {
117
- void display() {
118
- background(255, 255, 0);
119
- textAlign(CENTER);
120
- textSize(80);
121
- text("残念", width / 2, 300);
122
- textSize(20);
123
- text("あなたはルイザ・グロス・ホロウィッツ賞の", width / 2, 500);
124
- text("日本人受賞者を1人も覚えていません", width / 2, 535);
125
- }
126
- }
127
- ```
128
-
129
- しかしこれでは「クラスを定義し,オブジェクトを生成」はしましたが、とても「オブジェクトを活用」しているとは言えません。
130
- クラスの`display()`を`openingDisplay()`等で関数にしたのと大差ありません。
131
-
132
-
133
- ###### オブジェクトを活用した場合
134
- ```Processing
135
- import ddf.minim.*;
136
-
137
- Minim minim;
138
- AudioPlayer player;
139
- PFont font;
140
-
141
- Scene current; // 今の画像?を保持する変数
142
-
143
- void setup() {
144
- size(460, 800);
145
- //minim = new Minim(this);
146
- //player = minim.loadFile("QuizKnockのメインテーマ.mp3");
147
- //player.play();
148
- font = createFont("游明朝 Demibold", 24);
149
- textFont(font);
150
-
151
- Opening opening = new Opening(); // *1でsetNextしたいのでOpening型変数に入れる
152
- //Scene opening = new Opening(); // としたいところだがScene型にはsetNextがない
153
- Scene correct = new Correct(opening); // CorrectはScene型に入れられる
154
- Scene incorrect = new Incorrect(opening);
155
- Scene question = new Question(correct, incorrect);
156
-
157
- opening.setNext(question); // *1
158
- current = opening; // 初めの画像?の設定
159
- }
160
-
161
- void draw() {
162
- current.display(); // 今の画像?を表示
163
- }
164
-
165
- void mouseClicked() {
166
- Scene next = current.getNext(mouseX, mouseY); // 今の画像?に次の画像?を要求する
167
- current = next; // 今の画像?変数の中身を次の画像?に入れ替える
168
- }
169
-
170
-
171
- interface Scene { // それぞれの画像?が共通して持っているべき機能
172
- void display(); // きっと何か表示するのかな?
173
- Scene getNext(int x, int y); // 座標を引数にSceneをかえす ふーむ?
174
- }
175
- // インターフェースからは実際の動作はわかりません クラスで「実装」して初めて意味を持ちます
176
- // 長くなるので各自で調べてください^^;
177
-
178
-
179
- class Opening implements Scene { // Openingは「Sceneのメソッドを必ず持っています」という約束(実装)
180
- Scene next; // 次の画像?
181
-
182
- void setNext(Scene next) { // 次の画像?設定(他と同じようにコンストラクタで渡したいが、循環してるのでどれかはこうするよりない)
183
- this.next = next;
184
- }
185
-
186
- void display() {
187
- background(0, 255, 255);
188
- textAlign(CENTER);
189
- fill(0);
190
- textSize(25);
191
- text("ルイザ・グロス・ホロウィッツ賞", width / 2, 250);
192
- text("日本人受賞者を覚えよう!", width / 2, 285);
193
- textSize(18);
194
- text("ルイザ・グロス・ホロウィッツ賞", width / 2, 500);
195
- text("日本人受賞者を全員答えられたらクリアだよ", width / 2, 530);
196
- }
197
-
198
- Scene getNext(int x, int y) {
199
- return next; // 次の画像?(question)を無条件でかえす
200
- }
201
- }
202
-
203
- class Question implements Scene {
204
- final Scene next1; // finalをつけると変更不可になる(初期化も強制される)
205
- final Scene next2;
206
- final int x1 = 30; // この辺の変数はほかで使わないのでクラスのメンバーに
207
- final int y1 = 500;
208
- final int x2 = 250;
209
- final int y2 = 500;
210
- final int w = 170;
211
- final int h = 170;
212
-
213
- Question(Scene next1, Scene next2) { // 分岐があるので2つもらう
214
- this.next1 = next1;
215
- this.next2 = next2;
216
- }
217
-
218
- void display() {
219
- background(245, 100, 170);
220
- textAlign(CENTER);
221
- fill(0);
222
- textSize(25);
223
- text("生物学や生化学の研究者に贈られる", width / 2, 250);
224
- text("ルイザ・グロス・ホロウィッツ賞を", width / 2, 285);
225
- text("現在、日本人で唯一受賞したのは誰?", width / 2, 320);
226
- fill(255);
227
- noStroke();
228
- rect(x1, y1, w, h);
229
- fill(0);
230
- textAlign(CENTER);
231
- textSize(30);
232
- text("利根川進", 115, 600);
233
- fill(255);
234
- rect(x2, y2, w, h);
235
- fill(0);
236
- text("木村資生", 335, 600);
237
- }
238
-
239
- Scene getNext(int x, int y) {
240
- if (x1 < x && x < x1 + w && y1 < y && y < y1 + h) {
241
- return next1; // もし左の四角内ならcorrectをかえす
242
- }
243
- if (x2 < x && x < x2 + w && y2 < y && y < y2 + h) {
244
- return next2; // もし右の四角内ならincorrectをかえす
245
- }
246
-
247
- return this; // どちらでもなければ自身(question)をかえす(無駄というか意味のない動作だが、そういう設計にしたので仕方がない^^;
248
- }
249
- }
250
-
251
- class Correct implements Scene {
252
- final Scene next;
253
-
254
- Correct(Scene next) {
255
- this.next = next;
256
- }
257
-
258
- void display() {
259
- background(255, 255, 0);
260
- textAlign(CENTER);
261
- textSize(80);
262
- text("クリア", width / 2, 300);
263
- textSize(25);
264
- text("1不可説不可説転点", width / 2, 500);
265
- text("獲得", width / 2, 535);
266
- }
267
-
268
- Scene getNext(int x, int y) {
269
- return next;
270
- }
271
- }
272
-
273
- class Incorrect implements Scene {
274
- final Scene next;
275
-
276
- Incorrect(Scene next) {
277
- this.next = next;
278
- }
279
-
280
- void display() {
281
- background(255, 255, 0);
282
- textAlign(CENTER);
283
- textSize(80);
284
- text("残念", width / 2, 300);
285
- textSize(20);
286
- text("あなたはルイザ・グロス・ホロウィッツ賞の", width / 2, 500);
287
- text("日本人受賞者を1人も覚えていません", width / 2, 535);
288
- }
289
-
290
- Scene getNext(int x, int y) {
291
- return next;
292
- }
293
- }
294
- ```
295
-
296
- 元のテイストをできるだけ残したので不自然なところもありますが、それなりに「オブジェクトを活用」できたかなと思います。
297
- もちろんこれが「答え」というものではありません。人それぞれいろいろな作りが考えられます。
298
- その辺が面白いところでもあり、難しいところでもありますね。
299
-
300
- ---
301
-
302
- 乗りかかった船なので回答しましたが、
303
-
304
- > processingのオブジェクトの考え方
305
-
306
- とタイトルにある以上、
307
- * 難しすぎて全くわからない
308
- * 理解するのに時間が欲しい
309
- * 実行できない
310
- * ここの意味がよくわからない
311
- * 参考になった
312
-
313
- 等、回答について何かしらのアクションを期待しているのですが、これでは単なる**作業依頼**です。
314
- もちろん「そういうつもりではなかった。」というのはわかっていますが。
1
+ どちらも残したいので回答を分けさせていただきます。
2
+
3
+ # とにかく動けばいい場合
4
+ ```Processing
5
+ import ddf.minim.*;
6
+
7
+ Minim minim;
8
+ AudioPlayer player;
9
+ PFont font;
10
+
11
+ Opening opening;
12
+ Question question;
13
+ Correct correct;
14
+ Incorrect incorrect;
15
+
16
+ int x1 = 30;
17
+ int y1 = 500;
18
+ int x2 = 250;
19
+ int y2 = 500;
20
+ int w = 170;
21
+ int h = 170;
22
+
23
+ int mode; // 0:タイトル 1:問題 2:判定
24
+
25
+ void setup() {
26
+ size(460, 800);
27
+ //minim = new Minim(this);
28
+ //player = minim.loadFile("QuizKnockのメインテーマ.mp3");
29
+ //player.play();
30
+ font = createFont("游明朝 Demibold", 24);
31
+ textFont(font);
32
+
33
+ opening = new Opening();
34
+ correct = new Correct();
35
+ incorrect = new Incorrect();
36
+ question = new Question();
37
+ opening.display();
38
+ }
39
+
40
+ void draw() {
41
+ }
42
+
43
+ void mouseClicked() {
44
+ switch (mode) {
45
+ case 0:
46
+ mode = 1;
47
+ question.display();
48
+ break;
49
+ case 1:
50
+ if (x1 < mouseX && mouseX < x1 + w && y1 < mouseY && mouseY < y1 + h) {
51
+ mode = 2;
52
+ correct.display();
53
+ }
54
+ if (x2 < mouseX && mouseX < x2 + w && y2 < mouseY && mouseY < y2 + h) {
55
+ mode = 2;
56
+ incorrect.display();
57
+ }
58
+ break;
59
+ case 2:
60
+ mode = 0;
61
+ opening.display();
62
+ break;
63
+ }
64
+ }
65
+
66
+
67
+ class Opening {
68
+ void display() {
69
+ background(0, 255, 255);
70
+ textAlign(CENTER);
71
+ fill(0);
72
+ textSize(25);
73
+ text("ルイザ・グロス・ホロウィッツ賞", width / 2, 250);
74
+ text("日本人受賞者を覚えよう!", width / 2, 285);
75
+ textSize(18);
76
+ text("ルイザ・グロス・ホロウィッツ賞", width / 2, 500);
77
+ text("日本人受賞者を全員答えられたらクリアだよ", width / 2, 530);
78
+ }
79
+ }
80
+
81
+ class Question {
82
+ void display() {
83
+ background(245, 100, 170);
84
+ textAlign(CENTER);
85
+ fill(0);
86
+ textSize(25);
87
+ text("生物学や生化学の研究者に贈られる", width / 2, 250);
88
+ text("ルイザ・グロス・ホロウィッツ賞を", width / 2, 285);
89
+ text("現在、日本人で唯一受賞したのは誰?", width / 2, 320);
90
+ fill(255);
91
+ noStroke();
92
+ rect(x1, y1, w, h);
93
+ fill(0);
94
+ textAlign(CENTER);
95
+ textSize(30);
96
+ text("利根川進", 115, 600);
97
+ fill(255);
98
+ rect(x2, y2, w, h);
99
+ fill(0);
100
+ text("木村資生", 335, 600);
101
+ }
102
+ }
103
+
104
+ class Correct {
105
+ void display() {
106
+ background(255, 255, 0);
107
+ textAlign(CENTER);
108
+ textSize(80);
109
+ text("クリア", width / 2, 300);
110
+ textSize(25);
111
+ text("1不可説不可説転点", width / 2, 500);
112
+ text("獲得", width / 2, 535);
113
+ }
114
+ }
115
+
116
+ class Incorrect {
117
+ void display() {
118
+ background(255, 255, 0);
119
+ textAlign(CENTER);
120
+ textSize(80);
121
+ text("残念", width / 2, 300);
122
+ textSize(20);
123
+ text("あなたはルイザ・グロス・ホロウィッツ賞の", width / 2, 500);
124
+ text("日本人受賞者を1人も覚えていません", width / 2, 535);
125
+ }
126
+ }
127
+ ```
128
+
129
+ しかしこれでは「クラスを定義し,オブジェクトを生成」はしましたが、とても「オブジェクトを活用」しているとは言えません。
130
+ クラスの`display()`を`openingDisplay()`等で関数にしたのと大差ありません。
131
+
132
+
133
+ ###### オブジェクトを活用した場合
134
+ ```Processing
135
+ import ddf.minim.*;
136
+
137
+ Minim minim;
138
+ AudioPlayer player;
139
+ PFont font;
140
+
141
+ Scene current; // 今の画像?を保持する変数
142
+
143
+ void setup() {
144
+ size(460, 800);
145
+ //minim = new Minim(this);
146
+ //player = minim.loadFile("QuizKnockのメインテーマ.mp3");
147
+ //player.play();
148
+ font = createFont("游明朝 Demibold", 24);
149
+ textFont(font);
150
+
151
+ Opening opening = new Opening(); // *1でsetNextしたいのでOpening型変数に入れる
152
+ //Scene opening = new Opening(); // としたいところだがScene型にはsetNextがない
153
+ Scene correct = new Correct(opening); // CorrectはScene型に入れられる
154
+ Scene incorrect = new Incorrect(opening);
155
+ Scene question = new Question(correct, incorrect);
156
+
157
+ opening.setNext(question); // *1
158
+ current = opening; // 初めの画像?の設定
159
+ }
160
+
161
+ void draw() {
162
+ current.display(); // 今の画像?を表示
163
+ }
164
+
165
+ void mouseClicked() {
166
+ Scene next = current.getNext(mouseX, mouseY); // 今の画像?に次の画像?を要求する
167
+ current = next; // 今の画像?変数の中身を次の画像?に入れ替える
168
+ }
169
+
170
+
171
+ interface Scene { // それぞれの画像?が共通して持っているべき機能
172
+ void display(); // きっと何か表示するのかな?
173
+ Scene getNext(int x, int y); // 座標を引数にSceneをかえす ふーむ?
174
+ }
175
+ // インターフェースからは実際の動作はわかりません クラスで「実装」して初めて意味を持ちます
176
+ // 長くなるので各自で調べてください^^;
177
+
178
+
179
+ class Opening implements Scene { // Openingは「Sceneのメソッドを必ず持っています」という約束(実装)
180
+ Scene next; // 次の画像?
181
+
182
+ void setNext(Scene next) { // 次の画像?設定(他と同じようにコンストラクタで渡したいが、循環してるのでどれかはこうするよりない)
183
+ this.next = next;
184
+ }
185
+
186
+ void display() {
187
+ background(0, 255, 255);
188
+ textAlign(CENTER);
189
+ fill(0);
190
+ textSize(25);
191
+ text("ルイザ・グロス・ホロウィッツ賞", width / 2, 250);
192
+ text("日本人受賞者を覚えよう!", width / 2, 285);
193
+ textSize(18);
194
+ text("ルイザ・グロス・ホロウィッツ賞", width / 2, 500);
195
+ text("日本人受賞者を全員答えられたらクリアだよ", width / 2, 530);
196
+ }
197
+
198
+ Scene getNext(int x, int y) {
199
+ return next; // 次の画像?(question)を無条件でかえす
200
+ }
201
+ }
202
+
203
+ class Question implements Scene {
204
+ final Scene next1; // finalをつけると変更不可になる(初期化も強制される)
205
+ final Scene next2;
206
+ final int x1 = 30; // この辺の変数はほかで使わないのでクラスのメンバーに
207
+ final int y1 = 500;
208
+ final int x2 = 250;
209
+ final int y2 = 500;
210
+ final int w = 170;
211
+ final int h = 170;
212
+
213
+ Question(Scene next1, Scene next2) { // 分岐があるので2つもらう
214
+ this.next1 = next1;
215
+ this.next2 = next2;
216
+ }
217
+
218
+ void display() {
219
+ background(245, 100, 170);
220
+ textAlign(CENTER);
221
+ fill(0);
222
+ textSize(25);
223
+ text("生物学や生化学の研究者に贈られる", width / 2, 250);
224
+ text("ルイザ・グロス・ホロウィッツ賞を", width / 2, 285);
225
+ text("現在、日本人で唯一受賞したのは誰?", width / 2, 320);
226
+ fill(255);
227
+ noStroke();
228
+ rect(x1, y1, w, h);
229
+ fill(0);
230
+ textAlign(CENTER);
231
+ textSize(30);
232
+ text("利根川進", 115, 600);
233
+ fill(255);
234
+ rect(x2, y2, w, h);
235
+ fill(0);
236
+ text("木村資生", 335, 600);
237
+ }
238
+
239
+ Scene getNext(int x, int y) {
240
+ if (x1 < x && x < x1 + w && y1 < y && y < y1 + h) {
241
+ return next1; // もし左の四角内ならcorrectをかえす
242
+ }
243
+ if (x2 < x && x < x2 + w && y2 < y && y < y2 + h) {
244
+ return next2; // もし右の四角内ならincorrectをかえす
245
+ }
246
+
247
+ return this; // どちらでもなければ自身(question)をかえす(無駄というか意味のない動作だが、そういう設計にしたので仕方がない^^;
248
+ }
249
+ }
250
+
251
+ class Correct implements Scene {
252
+ final Scene next;
253
+
254
+ Correct(Scene next) {
255
+ this.next = next;
256
+ }
257
+
258
+ void display() {
259
+ background(255, 255, 0);
260
+ textAlign(CENTER);
261
+ textSize(80);
262
+ text("クリア", width / 2, 300);
263
+ textSize(25);
264
+ text("1不可説不可説転点", width / 2, 500);
265
+ text("獲得", width / 2, 535);
266
+ }
267
+
268
+ Scene getNext(int x, int y) {
269
+ return next;
270
+ }
271
+ }
272
+
273
+ class Incorrect implements Scene {
274
+ final Scene next;
275
+
276
+ Incorrect(Scene next) {
277
+ this.next = next;
278
+ }
279
+
280
+ void display() {
281
+ background(255, 255, 0);
282
+ textAlign(CENTER);
283
+ textSize(80);
284
+ text("残念", width / 2, 300);
285
+ textSize(20);
286
+ text("あなたはルイザ・グロス・ホロウィッツ賞の", width / 2, 500);
287
+ text("日本人受賞者を1人も覚えていません", width / 2, 535);
288
+ }
289
+
290
+ Scene getNext(int x, int y) {
291
+ return next;
292
+ }
293
+ }
294
+ ```
295
+
296
+ 元のテイストをできるだけ残したので不自然なところもありますが、それなりに「オブジェクトを活用」できたかなと思います。
297
+ もちろんこれが「答え」というものではありません。人それぞれいろいろな作りが考えられます。
298
+ その辺が面白いところでもあり、難しいところでもありますね。
299
+
300
+ ---
301
+
302
+ 乗りかかった船なので回答しましたが、
303
+
304
+ > processingのオブジェクトの考え方
305
+
306
+ とタイトルにある以上、
307
+ * 難しすぎて全くわからない
308
+ * 理解するのに時間が欲しい
309
+ * 実行できない
310
+ * ここの意味がよくわからない
311
+ * 参考になった
312
+
313
+ 等、回答について何かしらのアクションを期待しているのですが、これでは単なる**作業依頼**です。