• 締切済み

processingのプログラムの書き方について。

課題で、どこからマウスをプレスしても20個もの四角を(0,0)まで数珠つなぎみたいにするプログラムをかいているんですが全然わかりません。 そのため大きさなどは瞬時に計算をするからmouse x, mouse yをつかいます だからrect(mouseX,mouseY,mouseX,mouseY)になると思うんですが。。 とにかく全部わかりません。教えてください。 自分が書いたのはこんなのですが、全然違います。 forループ、mouseX, mouseYを使うのはわかります int s = 600; int n = 20; int i = mouseX; void setup() { size(s,s); background(255); noStroke(); rectMode(CENTER); } void draw() { if(mousePressed) { for(int i=0; i<s; i++); { fill(255,0,0); rect(mouseX,mouseY,mouseX,mouseY); } } }

みんなの回答

  • hyakuson
  • ベストアンサー率0% (0/0)
回答No.2

年明けてしまっているのですでに締切でしょうか? 課題でProcessingやらせてくれるなら自分で考えて楽しんだ方がよいかと思いますが、どうやるか考えてみたら楽しかったのでついでまでに。 void setup(){ size(200,200); } void draw(){ int x_space,y_space; background(0); if(mousePressed){ x_space = mouseX/20; y_space = mouseY/20; for(int i=0; i<20; i++){ noFill(); stroke(255); rectMode(CENTER); rect(i*x_space,i*y_space,10,10); } } } こういう感じでしょうかね?

  • salsberry
  • ベストアンサー率69% (495/711)
回答No.1

Processingというのはhttp://ja.wikipedia.org/wiki/Processingのことのようですね。 「どこからマウスをプレスしても20個もの四角を(0,0)まで数珠つなぎみたいにするプログラム」というのが具体的に何をしたいのか文面から読み取れません。添付の画像のような感じで合ってますか? それとも、20個の四角は全て同じ大きさですか? (mouseX,mouseY)がたとえば(15,10)という値だったら、そこから(0,0)までの間にどうやって20個の四角を数珠つなぎにしたいですか? 四角の幅や高さが1未満になってしまいそうです。

関連するQ&A

  • Processing 円と線分の衝突判定について

    最近プログラミングを始めました。 今、画面の中央から落ちてくる円と、マウスボタンを押したときに三角の頂点から真上に表示される線分の2つが、接触したときに円の位置を画面の最上部に移動させ、その後再び下方向に円が移動する様なプログラムを作っています。 それで、それぞれ円と線分を表示させることはができたのですが、どうやれば円と線分が衝突したことになるか分かりません。 プログラムを載せます size(400,400); } void draw(){ background(0); fill(255,0,0); noStroke(); ellipse(200,y,r,r); y = y + 1; noStroke(); fill(10,10,255); triangle(mouseX,mouseY - 20,mouseX - 14,mouseY + 20,mouseX + 14,mouseY + 20); if(mousePressed){  stroke(248,252,3);  line(mouseX,0,mouseX,mouseY-20); } } あとはif命令を書き加えれば良いと思うのですが、どうしても条件式が思いつきません。 GW中ずっと悩んでいて分からなかったので質問しました。

  • processingのマウス操作について

    現在processingを使って、画像のような図を作り、マウスでクリックしたところだけに色がついて、もう一度クリックすると色が消えるというプログラミングを作りたいと思っているのですが、なかなかうまくできません。 以下現在打ち込んでいるものです // Click within the image to change // the value of the rectangle after // after the mouse has been clicked int value = 255; int rect_size = 50; int num = 300 / rect_size; int x; void setup(){ size(300,300); } void draw(){ fill(value); for (int i = #ffffff;i < num;i++){ for (int j = 0;j < num;j++){ if (j%2 == 0){ x = i*rect_size*2; } else { x = i*rect_size*2+rect_size; } rect(x,j*rect_size,rect_size,rect_size); } } } void mouseClicked() { if (value == 255) { value = #aaaaaa; } else { value = 255; } } 使用言語はすべて英語です。 おそらく、drawのところでパターンとしてチェック模様を書いてしまっているのと、1マスだけに限定するという風な命令を書けていないからだと思うのですが、先生に訊いてもよくわかりません。 ご存じの方はご指導ご鞭撻のほどどうぞよろしくお願いします。

  • processingのカーソルと画像の距離

    processingでクリスマスカードを作るのですが、どうしてもカーソルと雪だるまの距離があいてしまいます。この距離をあけないようにするにはどうしたらいいでしょうか?わかる方がいらっしゃいましたらどうぞよろしくお願いします。 void setup() { size(600,600); smooth(); noStroke(); } int flag = 0; void draw() { background(10,50,100); fill(0); rect(0,450,600,280); int x=50,y=30; fill(#006e54); triangle(300,50,400,200,200,200); triangle(300,50+x,420,280,180,280); triangle(300,50+2*x,420+y,280+2*x,180-y,280+2*x); fill(190,103,31); rect(275,280+2*x,50,150); textSize(45); fill(255,0,0); text("Merry X'mas!",170,580); fill(random(255),random(255),random(255)); translate(249,5); beginShape(); vertex(50 , 50 - 20); vertex(50 - 12 , 50 + 15); vertex(50 + 18 , 50 - 8); vertex(50 - 18 , 50 - 8); vertex(50 + 12 , 50 + 15); endShape(CLOSE); fill(random(255),random(255),random(255)); ellipse(20,90,30,30); fill(random(255),random(255),random(255)); ellipse(100,130,30,30); fill(random(255),random(255),random(255)); ellipse(10,170,30,30); fill(random(255),random(255),random(255)); ellipse(55,220,30,30); fill(random(255),random(255),random(255)); ellipse(130,250,30,30); fill(random(255),random(255),random(255)); ellipse(90,350,30,30); fill(random(255),random(255),random(255)); ellipse(30,300,30,30); fill(random(255),random(255),random(255)); ellipse(10,360,30,30); fill(random(255),random(255),random(255)); ellipse(160,320,30,30); fill(random(255),random(255),random(255)); ellipse(-40,330,30,30); if(mousePressed) { flag=1; } else { flag=0; } if(flag==1) { snowman(); } else { textSize(20); fill(255); text("Please press mouse to create a snowman!",-150,20); } } void snowman() { int speed=2; int x=mouseX; int y=mouseY; x+=random(-speed,speed);//let snowman move randomly // x=constrain(x,0,500); y+=random(-speed,speed); y=constrain(y,0,600); fill(255); //make a little snowman ellipse(x,y-50,50,50); ellipse(x,y,100,100); fill(0); ellipse(x-10,y-55,10,10); ellipse(x+10,y-55,10,10); fill(#ff0000); triangle(x-10,y-50,x+10,y-50,x,y-30); }

  • processingについて

    millis 関数を用いてマウスを押している間の経過時間をマウスカーソルの位置に表示するプログラムを作成せよ。 また、その時点での経過時間の最も長い時間をウインドウに左下に表示してある。動作するように、空欄を埋めよ。 また、変数宣言がされていない変数がある。適切な変数宣言を加えよ。この変数宣言のための空欄は用意されていない。という問題の一番最初の変数宣言?でつまずいています。 プログラムはこんな感じです。 PFont font; int maxTime; (a) pressing=false; void setup(){ size(400,400); maxTime = 0; smooth(); (b) textFont(font,24); } void draw(){ background(255); fill(0); if(mousePressed){ if(pressing == (c)){ startTime = millis(); pressing = (d); } interval = (e)-startTime; text(interval,mouseX,mouseY); }else{ pressing = (f); } if((g)> maxTime){ maxTime = (h); } text(maxTime,0,height-textDescent()); } 一番最初の、(a) pressing=false;の(a)に入るものが分かりません。 他のカッコは回答しなくてもよいので、(a)に入るものを教えてください。 そこさえ分かれば自分で解けそうな気がします。

  • プログラミング初心者です

    processingプログラミング作成をしています。 mouseファンクション(mouseClickedとか)やkeyファンクション(keyPressed)などのファンクションをつかったときに、クリックやkeyをたたいたら次々変わっていくみたいなプログラムを作成したいんですが、教えてください。 いまは画面を4等分にし、mouseClickedををつかったらランダムに選ばれたスペースを赤く塗り、もう一回mouseをクリックしたら、その赤く塗られたのは消えて、次のまたランダムに選ばれたスペースへと移動する。。それを何回もやるというプログラミングにしたいです。 sizeは600,600でそれぞれのrectは rect(0,0,300,300) rect(300,0,600,300) rect(0,600,300,300) rect(600,600,300,300) で区切ってます。ずっと時間かけてやってますが、これをどうやってrandomファンクションにし、それをランダムに選ばれたスペースをマウスクリックしたら赤く塗られるようにするかがもっていくかがどうしてもわかりません。 あと、もう一回クリックしたら前にクリックした場所が消えるというのもわかりません。 これが今までに書いたプログラムです。 いまはif elseをつかっています。 よろしくお願いします。 void setup() { size(600,600); strokeWeight(2); background(255); line(0,width/2,600,width/2); line(height/2,0,height/2,600); } void draw() { fill(255,0,0); } void mouseClicked() { if( mouseX <= width/2) { fill(255,0,0); rect(0,0,width/2,height/2); } else { rect(width/2,0,300,300); fill(255,0,0); } if (mouseX > height/2) { rect(0,width/2,height/2,height); fill(255,0,0); } else { rect(width/2,height/2,width,height); fill(255,0,0); } }

  • processingについて

    1)横480ピクセル、縦800ピクセルの実行ウィンドウ上に、その時の時:分:秒が「18:05:01」のように表示されるようにする。 2)時計の背景に、「色」、「画像」、「図形の描画による柄」のいずれかを設定する。 3)if文を使用し、   「マウスの左ボタンがクリックされている時」には、その時の年月日が表示されるように   「マウスの右ボタンがクリックされている時」には、別の何かが起きるようにしよう。   なお、「マウスのボタンが何もクリックされていない時」には、1)のようにデジタル時計が表示されていること。 また、クリックの状態から指を離したら、画面の状態は元に戻るようにすること。 上記の条件でプログラミングしないといけないのですが、何度考えても上手く実行されません。この程度のレベルが出来なくて恥ずかしい限りなのですが、誰か手助けをしていただけないでしょうか? 下記が自分の書いたプログラミングになります。(右クリックの条件を自分は”線を描く”ように設定しました。) PFont font; PImage img; void setup(){ size(480, 800); fill(0); font = loadFont("xxxxxxxxxxx.vlw"); textFont(font); img = loadImage("xxxxxxxxxxxx.jpg"); image(img, 0, 0); } void draw(){ text(nf(hour(), 2 + "/" + nf(minute(), 2) + ":" + nf(second(), 2), 150, 245); if(mousePressed == true){ if(mouseButton == LEFT){ text(month() + "/" + day() + "/" + year(), 150, 270); }else if(mouseButton == RIGHT){ stroke(23, 9, 89); strokeWeight(2); line(mouseX, mouseY, pmouseX, pmouseY); } } }

  • プロセッシングが出来ません。

    プロセッシングをしていて、ずっと「java.lang.NullPointerException」が出ています。 ですが、どこで起きているのかわかりません。 わかる人いたら教えてください。 String sc_data[]; int sc[][] = new int[sc_data.length][4]; void setup() { int dow, i; frameRate(1); size(480,640); sc_data = loadStrings("schedule.txt"); System.out.println(sc_data.length); for(i = 0; i < sc_data.length; i++){ sc[i] =int( sc_data[i].split(",")); println(sc[i]); } } int idx,k; int mo,d,h,m,s; int c_w = 60; float b_c,he,y; void set_color(int idx){ switch(idx){ case 1: fill(77,166,255,100); break; case 2: fill(128,255,0,100); break; case 3: fill(245,112,112,100); break; case 4: fill(117,125,198); break; case 5: fill(151,247,242); break; case 6: fill(255,214,70); break; case 7: fill(147,38,255); break; case 8: fill(2,214,70); break; case 9: fill(253,198,230); break; } } void make_sc(float y, int s[][], float t,int o){ int l; fill(255,255,255,100); rect(0,70,c_w,height); y = s[o][0]*25 + s[o][1]*5/12; t = s[o][2]*5/12; println(t); l = s[o][3] + 3; set_color(l); rect(0, y, c_w,t); } void barclock(float b){ b = h*25+m*5/12; //println(b); noStroke(); if ((b >= 0)&&(b < 150)){ set_color(1); } else if ((b >= 150)&&(b < 225)){ set_color(2); } else if ((b >= 225)&&(b < 450)){ set_color(3); } else { set_color(4); } rect(0,0,width,b); fill(0); textSize(15); text(+mo+" / "+d+" "+h+":"+m+":"+s,5,49); } void draw() { mo= month(); d = day(); h = hour(); m = minute(); s = second(); background(255); strokeWeight(1); barclock(b_c); for(int i = 0; i < sc_data.length; i++){ make_sc(y, sc, he,i); } }

  • processingでパックマンを反転させたい。

    【processingでパックマンを反転させたい。】 現在、パックマンが壁にぶつかると跳ね返りはするのですが、そのまま右向きで口をパクパクとしてしまいます。 なんとか左向きにしたいとarcを色々いじったりして試行錯誤しているのですが、どのようにすればわかりません。 壁にぶつかったとき左向きにするためにはどのようにプログラミングすればよいのでしょうか。 int i=25,j=0; int mflag =1; int rflag =1; void setup(){ size(400,50); smooth(); noStroke(); frameRate(20); } void draw(){ background(255); fill(0,0,0); arc(i,25,50,50,radians(j),radians(360-j)); i+= rflag * 5; j+= mflag * 8; if(j>40||j<0){ mflag = -mflag; } if(i==25||i==375){ rflag = -rflag; } }

  • プログラミングProcessing ピンポンゲーム

    Processingでピンポンゲームを作っています。作成したプログラムは void setup(){ size(400,300); } float x=10; float y=10; float dx=1; float dy=2; int count=0; float r_w=50.0; float a_w=15.0; float a_h=15.0; boolean checkHit(float x,float y){ if(y+a_h<250)return false; if(x+a_w>=mouseX&&x<=mouseX+r_w){ return true; }else{ return false; } } void draw(){ x=x+dx;y=y+dy; if(x+a_w>=400){ dx=-1; }else if(x<0){ dx=1; } if(y+a_w>300){ x=0; y=0; dx=1; dy=2; count=0; }else if(y<0){ dy=2; } background(0,0,128); rect(x,y,a_w,a_w); rect(mouseX,250,r_w,3); text(count,10,300); if(checkHit(x,y)){ dy=-2; count=count+1; } } このプログラムだとどうしてもラケットの下にボールが潜り込んだ時に ボールが跳ね返されてしまうバグが発生してしまいます。 問題はboolean checkHitの部分にあると思うのですが、 どのように調節すればよいか分かりません。 わかる方教えてください<(__)>

  • プログラム

    文字列を逆順にする関数を作ってるのですがうまくできません。 void reverse(char *str, int count=0) { int i; char *s="momonga"; s+=strlen(s); count=strlen(s); for(i=count; i<0; i--, str++, s--){ *str++=*s++; } } int main() { char s1[20]; int c; reverse(s1,c); printf("%momongaを逆順にすると%sで文字数が%dです",s1,c); return 0; } このプログラムの間違ってる所をおしえてください。

専門家に質問してみよう