プログラミング技法特論第8回

808
-1

Published on

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
808
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

プログラミング技法特論第8回

  1. 1. プログラミング技法特論#08<br />N. Shimizu<br />chikoski at kaetsu.ac.jp<br />2010.6.7<br />1<br />プログラミング技法特論#08 N.Shimizu <chiko at kaetsu.ac.jp><br />
  2. 2. メソッド<br />line(100, 100, 200, 200);<br />命令<br />;<br />引数<br />2010.6.7<br />2<br />プログラミング技法特論#08 N.Shimizu <chiko at kaetsu.ac.jp><br />
  3. 3. Javaの基本的な型<br />2010.6.7<br />3<br />プログラミング技法特論#08 N.Shimizu <chiko at kaetsu.ac.jp><br />
  4. 4. メソッド<br />void setup(){<br /> size(400, 400);<br /> colorMode(RGB, 100, 100, 100, 100);<br /> background(0, 0, 0, 100);<br /> noStroke();<br /> x = 0;<br /> y = 0;<br />}<br />2010.6.7<br />プログラミング技法特論#08 N.Shimizu <chiko at kaetsu.ac.jp><br />4<br />この範囲に対してsetupという名前をつけた<br />
  5. 5. 壁にぶつかったことを見つけよう<br />float x, y, r, dx, dy;<br />void setup(){<br /> size(400, 400);<br />noStroke();<br /> fill(255, 0, 0, 255);<br />x = width / 2;<br />y = height / 2;<br />r = 20;<br />dx = 0.5;<br />dy = 0.5;<br />}<br />void draw(){<br /> background(0, 0, 0);<br />ellipse(x, y, r, r);<br />x = x + dx;<br />y = y + dy;<br />}<br />2010.6.7<br />5<br />プログラミング技法特論#08 N.Shimizu <chiko at kaetsu.ac.jp><br />
  6. 6. まず普通に書いてみる<br />void draw(){<br /> background(0, 0, 0);<br />ellipse(x, y, r, r);<br />x = x + dx;<br />y = y + dy;<br />if(x <= r / 2 || width – r / 2 <= x){<br />dx = dx * -1;<br /> }<br />if(y <= r / 2 || height– y / 2 <= x){<br />dy = dy * -1;<br /> }<br />}<br />2010.6.7<br />6<br />プログラミング技法特論#08 N.Shimizu <chiko at kaetsu.ac.jp><br />
  7. 7. メソッドに分けよう<br />void draw(){<br /> background(0, 0, 0);<br />ellipse(x, y, r, r);<br />x = x + dx;<br />y = y + dy;<br />reflectByWall();<br />}<br />void reflectByWall(){<br />if(x <= r / 2 || width – r / 2 <= x){<br />dx = dx * -1;<br /> }<br />if(y <= r / 2 || height– r / 2 <= y){<br />dy = dy * -1;<br /> }<br />}<br />2010.6.7<br />7<br />プログラミング技法特論#08 N.Shimizu <chiko at kaetsu.ac.jp><br />
  8. 8. 返り値<br />メソッドが仕事をした結果<br />意味はさまざま<br />作成物<br />計算した結果<br />成功 / 失敗 / ステータスコード<br />などなど<br />2010.6.7<br />8<br />プログラミング技法特論#08 N.Shimizu <chiko at kaetsu.ac.jp><br />
  9. 9. 値をある範囲内に収める<br />void draw(){<br /> background(0, 0, 0); <br />ellipse(x, y, r, r);<br />x = constrain(x + dx, r / 2, width – r / 2);<br />y = constrain(y + dy, r / 2, height – r /2);<br />reflectByWall();<br />}<br />2010.6.7<br />9<br />プログラミング技法特論#08 N.Shimizu <chiko at kaetsu.ac.jp><br />
  10. 10. 返り値のあるメソッドを作ろう<br />float dx(){<br /> float ret = (mouseX – x) * 0.01;<br /> return ret;<br />}<br />float dy(){<br /> float ret = (mouseY – y) * 0.01;<br /> return ret;<br />}<br />2010.6.7<br />10<br />プログラミング技法特論#08 N.Shimizu <chiko at kaetsu.ac.jp><br />
  11. 11. 作ったメソッドを使おう<br />void draw(){<br />ellipse(x, y, r, r);<br />if(mousePressed){<br />dx = dx();<br />dy = dy();<br /> }<br />x = constrain(x + dx, r / 2, width – r / 2);<br />y = constrain(y + dy, r / 2, height – r /2);<br />reflectByWall();<br />}<br />2010.6.7<br />11<br />プログラミング技法特論#08 N.Shimizu <chiko at kaetsu.ac.jp><br />
  12. 12. マウスクリック時に呼ばれるメソッド<br />void mousePressed(){<br />dx = dx();<br />dy = dy();<br />}<br />2010.6.7<br />12<br />プログラミング技法特論#08 N.Shimizu <chiko at kaetsu.ac.jp><br />
  13. 13. この時のdraw<br />void draw(){<br />ellipse(x, y, r, r);<br />x = constrain(x + dx, r / 2, width – r / 2);<br />y = constrain(y + dy, r / 2, height – r /2);<br />reflectByWall();<br />}<br />2010.6.7<br />13<br />プログラミング技法特論#08 N.Shimizu <chiko at kaetsu.ac.jp><br />
  14. 14. 今日の課題<br />これまであげてきたメソッドを組み合わせて、クリックした方への動きを実現しよう<br />2010.6.7<br />プログラミング技法特論#08 N.Shimizu <chiko at kaetsu.ac.jp><br />14<br />
  15. 15. 円と円との重なり<br />2010.6.7<br />15<br />プログラミング技法特論#08 N.Shimizu <chiko at kaetsu.ac.jp><br />
  16. 16. 円と円との重なり<br />中心(x2, y2)<br />直径r2<br />中心(x1, y1),<br />直径r1<br />2010.6.7<br />16<br />プログラミング技法特論#08 N.Shimizu <chiko at kaetsu.ac.jp><br />
  17. 17. 円と円との重なり<br />中心(x2, y2)<br />直径r2<br />中心(x1, y1),<br />直径r1<br /> dist(x1, y1, x2, y2);<br />2010.6.7<br />17<br />プログラミング技法特論#08 N.Shimizu <chiko at kaetsu.ac.jp><br />
  18. 18. 円と円との重なり<br />中心(x2, y2)<br />直径r2<br />中心(x1, y1),<br />直径r1<br /> dist(x1, y1, x2, y2); <= (r2 + r1) / 2<br />2010.6.7<br />18<br />プログラミング技法特論#08 N.Shimizu <chiko at kaetsu.ac.jp><br />
  19. 19. 反射させてみよう<br />これまでのプログラムを改良しよう<br />直径80の円を画面のどこかに置く<br />この円に動いている円が重なったとき、円を反射させる<br />dxとdy両方に-1をかける<br />2010.6.7<br />19<br />プログラミング技法特論#08 N.Shimizu <chiko at kaetsu.ac.jp><br />
  20. 20. メソッドにまとめて見よう<br />void draw(){<br /> background(0, 0, 0);<br /> fill(255, 0, 0, 255); <br /> ellipse(x, y, r, r);<br /> fill(255, 255, 255, 255);<br /> ellipse(x1, y1, r1, r1); <br /> x = constrain(x + dx, r / 2, width - r/2);<br /> y = constrain(y + dy, r / 2, height - r/2);<br /> reflectByWall();<br /> reflectByBall();<br />}<br />これを実装しよう<br />2010.6.7<br />20<br />プログラミング技法特論#08 N.Shimizu <chiko at kaetsu.ac.jp><br />

×