• Save
プログラミング技法特論第8回
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

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

  • 850 views
Uploaded on

 

More in: Education
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
850
On Slideshare
821
From Embeds
29
Number of Embeds
2

Actions

Shares
Downloads
0
Comments
0
Likes
0

Embeds 29

http://chikoski.info 27
http://www.slideshare.net 2

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. プログラミング技法特論#08
    N. Shimizu
    chikoski at kaetsu.ac.jp
    2010.6.7
    1
    プログラミング技法特論#08 N.Shimizu <chiko at kaetsu.ac.jp>
  • 2. メソッド
    line(100, 100, 200, 200);
    命令

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