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

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

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

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

Q&A

解決済

2回答

1113閲覧

四角の中央に丸を配置する方法 「オセロ」

keyakizakarrisa

総合スコア1

Processing

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

0グッド

0クリップ

投稿2021/12/03 16:51

Processingでオセロを作ろうとしています。
初心者なのであまり難しい関数はわかりません。
四角の中央に丸を配置したいのですがやり方がわかりません。
分かる方教えてもらえると幸いです。

現状はこんな感じです。
void setup(){
size(400,400);
background(0,150,0);
}

void draw(){
for(int i=0; i<=8; i++){
for(int j=0; j<=8; j++){
stroke(0);
line(i50,0,i50,400);
line(0,j50,400,j50);
}
}
}

void mousePressed(){
noStroke();
if(mouseButton==LEFT){
fill(255);
ellipse(mouseX,mouseY,35,35);
}else if(mouseButton==RIGHT){
fill(0);
ellipse(mouseX,mouseY,35,35);
}
}

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

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

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

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

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

guest

回答2

0

ベストアンサー

やってることは結局map()と一緒ですけど、関数が嫌いなら。

Processing

1void mousePressed() { 2 int x=mouseX/(width/8)*(width/8)+(width/8/2); 3 int y=mouseY/(height/8)*(height/8)+(height/8/2); 4 noStroke(); 5 if (mouseButton==LEFT) { 6 fill(255); 7 } else if (mouseButton==RIGHT) { 8 fill(0); 9 } 10 ellipse(x, y, 35, 35);//同じ処理は一箇所に書こう 11}

int同士の計算はintで閉じている(小数点以下は切り捨てになる)ことに注意。
切り捨ての分があるので、mouseX/(width/8)*(width/8)の結果は必ずしもmouseXにならない(なる場合もある)
mouseX/(width/8)で0~width-1(widthは画面幅を取得する変数。この場合は400)を0~7の整数にマッピングしていることになる。
(width/8とかheight/8をあちこちで使うから予め計算して変数にとっておいてもいいですね)

投稿2021/12/03 23:40

thkana

総合スコア7659

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

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

keyakizakarrisa

2021/12/04 04:47

ありがとうございます 参考にします
guest

0

こんな感じでどうでしょうか?

processing

1void mousePressed() { 2 noStroke(); 3 // マウス座標の 0~400 を 1~8 に変換 4 int x_pos = (int)map(mouseX, 0, 400, 1, 8); 5 int y_pos = (int)map(mouseY, 0, 400, 1, 8); 6 // 1マスのサイズを計算 7 int x_size = 400 / 8; 8 int y_size = 400 / 8; 9 // 配置位置を計算 10 int x = x_pos * x_size - x_size / 2; 11 int y = y_pos * y_size - y_size / 2; 12 if (mouseButton == LEFT) { 13 fill(255); 14 ellipse(x, y, 35, 35); 15 } else if (mouseButton == RIGHT) { 16 fill(0); 17 ellipse(x, y, 35, 35); 18 } 19}

■ 実行結果
実行結果

<参考>
■ Processing: map関数を使おう
https://scrapbox.io/ZawaBlogs/Processing:_map%E9%96%A2%E6%95%B0%E3%82%92%E4%BD%BF%E3%81%8A%E3%81%86

投稿2021/12/03 18:36

編集2021/12/03 18:40
cx20

総合スコア4633

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

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

keyakizakarrisa

2021/12/04 04:47

ありがとうございます 参考にします
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問