質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

Q&A

解決済

1回答

1374閲覧

ランダムに配置させた図形の色を変える方法

beginner_rice

総合スコア1

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

1グッド

0クリップ

投稿2022/07/28 17:07

実現したいこと

Processingを使っています

ランダムで表示させた10個の円をクリックしたら色が変わるようにしたいのですが、どのようなコードを書けばよいでしょうか。
また、全ての円をクリックしたら文字が出るようにするためにはどうすればよいでしょうか。

試したこと

様々なサイトで調べましたが、自分の調べた範囲ではランダムな配置の円に対応するコードは見当たりませんでした。

TN8001👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

thkana

2022/07/28 23:27

プログラムを書く/作る、というのは、「同じことをやっているプログラムを探してきて丸写しする」ということではないのですが... > 自分の調べた範囲ではランダムな配置の円に対応するコードは見当たりませんでした では、ランダムでなく整列していればできるですね? そのコードを示してください。
dodox86

2022/07/29 01:45

仕様をちゃんと決める限り経験者にとっては簡単な問題ですが、コードを書く手間は厳然としてあるので、今の質問内容で回答が付くことはほとんど無いと思います。
beginner_rice

2022/07/29 13:23

自分の考えが浅はか過ぎました。申し訳ございません。 以後、質問を上げる際には自分の試した事や入力したコードも掲載します。わざわざ追記を書いていただいてありがとうございました。
guest

回答1

0

ベストアンサー

ランダムで表示させた10個の円をクリックしたら色が変わるようにしたいのですが、どのようなコードを書けばよいでしょうか。
また、全ての円をクリックしたら文字が出るようにするためにはどうすればよいでしょうか。

もし1文字も書けないということであれば、あなたにとって難しすぎるということです。
もっと簡単なことからやってみましょう。例えば円が1つだけならできますか?

Processing

1float x, y, r; 2boolean isClicked; 3 4void setup() { 5 size(400, 300); 6 ellipseMode(RADIUS); 7 textAlign(CENTER, CENTER); 8 textSize(50); 9 10 x = random(width); 11 y = random(height); 12 r = random(50, 100); 13} 14 15void draw() { 16 background(255); 17 18 if (isClicked) { 19 fill(255, 0, 0); 20 circle(x, y, r); 21 22 fill(0); 23 text("Congratulations", 0, 0, width, height); 24 } else { 25 fill(255); 26 circle(x, y, r); 27 } 28} 29 30void mouseClicked() { 31 if (dist(x, y, mouseX, mouseY) < r) { 32 isClicked = true; 33 } 34}

ellipseMode() / Reference / Processing.org
textAlign() / Reference / Processing.org
dist() / Reference / Processing.org


「そのくらいはできる」って?じゃあ円を2つにできますか?

Processing

1float x1, y1, r1; 2boolean isClicked1; 3 4float x2, y2, r2; 5boolean isClicked2; 6 7void setup() { 8 size(400, 300); 9 ellipseMode(RADIUS); 10 textAlign(CENTER, CENTER); 11 textSize(50); 12 13 x1 = random(width); 14 y1 = random(height); 15 r1 = random(50, 100); 16 17 x2 = random(width); 18 y2 = random(height); 19 r2 = random(50, 100); 20} 21 22void draw() { 23 background(255); 24 25 if (isClicked1) { 26 fill(255, 0, 0); 27 } else { 28 fill(255); 29 } 30 circle(x1, y1, r1); 31 32 if (isClicked2) { 33 fill(255, 0, 0); 34 } else { 35 fill(255); 36 } 37 circle(x2, y2, r2); 38 39 if (isClicked1 && isClicked2) { 40 fill(0); 41 text("Congratulations", 0, 0, width, height); 42 } 43} 44 45void mouseClicked() { 46 if (dist(x2, y2, mouseX, mouseY) < r2) { 47 isClicked2 = true; 48 } else if (dist(x1, y1, mouseX, mouseY) < r1) { 49 isClicked1 = true; 50 } 51}

変数を2セットずつ用意しました。これで理論上はいくつでも増やせることになります。


とはいえ10セットもあると、さすがにうんざりします。
こういうときは配列を使用します。

Processing

1final int NUM = 5; 2float[] x, y, r; 3boolean[] isClicked; 4 5void setup() { 6 size(400, 300); 7 ellipseMode(RADIUS); 8 textAlign(CENTER, CENTER); 9 textSize(50); 10 11 x = new float[NUM]; 12 y = new float[NUM]; 13 r = new float[NUM]; 14 isClicked = new boolean[NUM]; 15 16 for (int i = 0; i < NUM; i++) { 17 x[i] = random(width); 18 y[i] = random(height); 19 r[i] = random(50, 100); 20 } 21 22 // (小さい順に)ソートして逆順にする(=大きい順にソート) 何のためにやっているか考えてみよう 23 r = reverse(sort(r)); 24} 25 26void draw() { 27 background(255); 28 29 boolean allClicked = true; 30 for (int i = 0; i < NUM; i++) { 31 if (isClicked[i]) { 32 fill(255, 0, 0); 33 } else { 34 fill(255); 35 allClicked = false; 36 } 37 circle(x[i], y[i], r[i]); 38 } 39 40 if (allClicked) { 41 fill(0); 42 text("Congratulations", 0, 0, width, height); 43 } 44} 45 46void mouseClicked() { 47 // 逆順に回しているが、何のためにやっているか考えてみよう 48 for (int i = NUM - 1; 0 <= i; i--) { 49 if (dist(x[i], y[i], mouseX, mouseY) < r[i]) { 50 isClicked[i] = true; 51 break; 52 } 53 } 54}

Array / Reference / Processing.org
reverse() / Reference / Processing.org
sort() / Reference / Processing.org
アプリ動画

どうですか?急に難しくなりましたか?
しかしよく見ると(x1x2のかわりにx[i]になったりしてますが)共通点も多いことに気が付きます。
配列とfor文の組み合わせは頻出ですし、使えるか使えないかで大きな差が出ます。
Arrays / Processing.org

難しいと思ったならば、最初は10セット書いてもいいのです。
rだけソート済みの配列から取得する(r1 = r[0];のような)とか、部分的にでも利用してみてください。
色々なコードを見たり書いたりしているうちに、いつの間にか使えるようになっているはずです^^

投稿2022/07/29 10:03

編集2023/08/16 05:04
TN8001

総合スコア9326

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TN8001

2022/07/29 10:04

Processingはアーティストのための言語ということなので、通常「丸投げ」と判断するような内容でも大甘で回答しています^^; とはいえ質問の放置や追記修正依頼の無視など、「質問以前の問題」が多く辟易しています(beginner_riceさんのことではありません)
beginner_rice

2022/07/29 13:13

こんなにも大雑把な質問に回答していただいてありがとうございます。 想像していたものとほぼ同じだったので助かります。 頂いたコメントも参考にさせて頂きます。本当にありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問