SlideShare a Scribd company logo
1 of 54
論理思考とプログラミング #09 N. Shimizu chiko@sfc.keio.ac.jp 2010.12.2 論理思考とプログラミング  N.Shimizu <chiko@sfc.keio.ac.jp> 1
繰り返しの繰り返し まず横1列を描く 正方形を一つ描く 正方形の1辺の長さに1を足した分だけ右に移動したところで正方形を描く これを繰り返す それを繰り返す 2010.11.25 論理試行とプログラミング N.Shimizu <chiko at sfc.keio.ac.jp> 2
if文:条件分岐 if(条件式){ 条件が成り立っている場合の処理 } 2010.12.2 論理思考とプログラミング  N.Shimizu <chiko@sfc.keio.ac.jp> 3
else if  if(A){    B }else if(D){    E }else {    C } AならばB それ以外のとき DならばE それ以外ならばC 2010.12.2 論理思考とプログラミング  N.Shimizu <chiko@sfc.keio.ac.jp> 4
問題その1 黒地に緑の円を描く 円の直径は30から40の間でランダムに決まる 円の中心とその隣の円の中心は85離れている 透明度は32から256の間でランダムに決まる 2010.12.2 論理思考とプログラミング  N.Shimizu <chiko@sfc.keio.ac.jp> 5
TIPS: アンチエイリアスをかける background(0); ellipse(30, 48, 36,36); smooth(); ellipse(70, 48, 36, 36); 2010.12.2 論理思考とプログラミング  N.Shimizu <chiko@sfc.keio.ac.jp> 6
TIPS: 描いた画像を保存しよう save(“ファイル名”); 実行された時点の画面が保存されます プログラムがあるフォルダに保存されます 保存できる形式 tiff, TARGA, jpg, png ファイル名の拡張子で決まる aaa.png / aaa.jpg / aaa.tif 2010.12.2 論理思考とプログラミング  N.Shimizu <chiko@sfc.keio.ac.jp> 7
問題その2 黒地に円400個を描く 塗りはなし 上3分の1は赤の円 次の3分の1は緑の円 最後の3分の1は青の円 円の位置はランダム 大きさは20から40の間でランダム 2010.12.2 論理思考とプログラミング  N.Shimizu <chiko@sfc.keio.ac.jp> 8
問題その3 黒地に円を書く 塗りはなし 円の大きさ、位置はランダム 画面を9分割し、その位置に応じて色を違えること 2010.12.2 論理思考とプログラミング  N.Shimizu <chiko@sfc.keio.ac.jp> 9
ある確率でXXをしてほしい 2010.12.2 論理思考とプログラミング  N.Shimizu <chiko@sfc.keio.ac.jp> 10 randomが その数を返す確率 randomの返り値
ある確率でXXをしてほしい 2010.12.2 論理思考とプログラミング  N.Shimizu <chiko@sfc.keio.ac.jp> 11 randomが その数を返す確率 返り値がこの範囲ならXXをする randomの返り値
問題その4 ランダムに図形を描く 正方形もしくは円 50%の確率 大きさ:20×20 ウィンドウサイズは400×400 色はランダムに決まる 2010.12.2 論理思考とプログラミング  N.Shimizu <chiko@sfc.keio.ac.jp> 12
インタラクションを加えてみよう 2010.11.25 論理試行とプログラミング N.Shimizu <chiko at sfc.keio.ac.jp> 13
インタラクション 二つのものがお互いに影響しあうこと 相互作用 interaction 人間とコンピュータプログラム 人間の操作がプログラムの動きを変える プログラムが人間の操作を変える 2010.11.25 論理試行とプログラミング N.Shimizu <chiko at sfc.keio.ac.jp> 14
プログラミングのモデルが変わります 今まで: 上から順番に実行される フロー駆動型 (flow driven) これから イベントに対応した部分のみ実行される イベント駆動型 (event driven) 2010.11.25 論理試行とプログラミング N.Shimizu <chiko at sfc.keio.ac.jp> 15
イベント マウスのボタンが押される マウスのボタンが離される キーボードのキーが押される キーボードのキーが離される 一定期間が過ぎる 2010.11.25 論理試行とプログラミング N.Shimizu <chiko at sfc.keio.ac.jp> 16
Processingのテンプレート void setup(){ } void draw(){ } 2010.11.25 論理試行とプログラミング N.Shimizu <chiko at sfc.keio.ac.jp> 17
Processingのテンプレート void setup(){ } void draw(){ } 2010.11.25 論理試行とプログラミング N.Shimizu <chiko at sfc.keio.ac.jp> 18 プログラム起動時に実行してほしいことを書く
Processingのテンプレート void setup(){ } void draw(){ } 2010.11.25 論理試行とプログラミング N.Shimizu <chiko at sfc.keio.ac.jp> 19 一定間隔で実行して欲しいことを書く
プログラムの例 float x, y; void setup(){   size(400, 400);   background(0, 0, 0);   noStroke();   x = 0;   y = 0; } void draw(){ x = x + 0.5;   y = y + 0.5;   fill(255, 0, 0);   ellipse(x, y, 20, 20); } 2010.11.25 論理試行とプログラミング N.Shimizu <chiko at sfc.keio.ac.jp> 20
メソッド プログラムの一部分につけられた名前 メソッドの宣言:名前をつけること 部分の指定:{}で囲む 引数と返り値を持つ 引数:パラメーター 返り値:仕事をした結果 2010.11.25 論理試行とプログラミング N.Shimizu <chiko at sfc.keio.ac.jp> 21
メソッドに対してできること 宣言する プログラムの一部分に名前をつけること 名前をつけるだけで、実行されない 引数や返り値の型を決める 呼び出す 名前をつけた部分を実行する 引数を指定してパラメータを変えられる 2010.11.25 論理試行とプログラミング N.Shimizu <chiko at sfc.keio.ac.jp> 22
さっきのプログラムでは void setup(){   size(400, 400); background(0, 0, 0, 100);   noStroke();   x = 0;   y = 0; } 2010.11.25 論理試行とプログラミング N.Shimizu <chiko at sfc.keio.ac.jp> 23 この範囲に対してsetupという名前をつけた
void setup() 2010.11.25 論理試行とプログラミング N.Shimizu <chiko at sfc.keio.ac.jp> 24 返り値の型 名前
void setup() 2010.11.25 論理試行とプログラミング N.Shimizu <chiko at sfc.keio.ac.jp> 25 このメソッドは返り値を返さない
draw: 一定間隔で実行される部分 void draw(){ x = x + 0.5;   y = y + 0.5;   fill(100, 0, 0, 100);   ellipse(x, y, 20, 20); } 2010.11.25 論理試行とプログラミング N.Shimizu <chiko at sfc.keio.ac.jp> 26
どうなるかやってみよう void draw(){   background(0, 0, 0, 100);   x = x + 0.5;   y = y + 0.5;   fill(100, 0, 0, 100);   ellipse(x, y, 20, 20); } 2010.11.25 論理試行とプログラミング N.Shimizu <chiko at sfc.keio.ac.jp> 27 backgroundを足す
フレームレート drawメソッドを呼び出す間隔 正確には画面の描画回数 FPS (Frame Per Second) frameRate(<フレームレート>) <フレームレート>には正の実数を書く E.g. frameRate(30); と書くと秒間30回実行する 2010.11.25 論理試行とプログラミング N.Shimizu <chiko at sfc.keio.ac.jp> 28
問題その5  ウィンドウサイズは400x400 背景は黒 2000本の線がランダムに引かれている 線の色はランダム drawが呼び出される度に描き直すようにしてください 2010.11.25 論理試行とプログラミング N.Shimizu <chiko at sfc.keio.ac.jp> 29
自作メソッドを宣言しよう まとめる仕事を決める 名前 引数 返り値 2010.11.25 論理試行とプログラミング N.Shimizu <chiko at sfc.keio.ac.jp> 30
どこをまとめられるか 線の色を決める ランダムな線を引く 2010.11.25 論理試行とプログラミング N.Shimizu <chiko at sfc.keio.ac.jp> 31
名前を決めよう やる仕事が想像できる名前が良い 動詞+目的語 例:drawLineRandomly 単語の区切りは大文字に 2010.11.25 論理試行とプログラミング N.Shimizu <chiko at sfc.keio.ac.jp> 32
引数を決めよう 変えたいパラメータがあるか? ある->引数にする ない->引数無し 今回はなし 2010.11.25 論理試行とプログラミング N.Shimizu <chiko at sfc.keio.ac.jp> 33
返り値を決めよう 結果がそれ以降の処理に必要か? 何か値を作るような仕事 成否で条件分岐したいとき などなど 必要なら返り値をきめる 必要ないなら返り値無し 2010.11.25 論理試行とプログラミング N.Shimizu <chiko at sfc.keio.ac.jp> 34
メソッドにまとめる部分をコピー 2010.11.25 論理試行とプログラミング N.Shimizu <chiko at sfc.keio.ac.jp> 35 コピー
コピーした部分をdrawの外へ貼付け 2010.11.25 論理試行とプログラミング N.Shimizu <chiko at sfc.keio.ac.jp> 36
貼付けた部分を{と}で囲む 2010.11.25 論理試行とプログラミング N.Shimizu <chiko at sfc.keio.ac.jp> 37
名前をつける 2010.11.25 論理試行とプログラミング N.Shimizu <chiko at sfc.keio.ac.jp> 38
名前の後に()をつけよう 2010.11.25 論理試行とプログラミング N.Shimizu <chiko at sfc.keio.ac.jp> 39
引数のリストを()の中に書こう 2010.11.25 論理試行とプログラミング N.Shimizu <chiko at sfc.keio.ac.jp> 40
返り値の型を名前の前に書こう 2010.11.25 論理試行とプログラミング N.Shimizu <chiko at sfc.keio.ac.jp> 41
宣言したメソッドを呼び出そう 2010.11.25 論理試行とプログラミング N.Shimizu <chiko at sfc.keio.ac.jp> 42
なぜメソッドにするのか プログラムの見通しが良くなる 理解がしやすくなる 修正がしやすくなる 同じプログラムをコピペしなくても済む 2010.11.25 論理試行とプログラミング N.Shimizu <chiko at sfc.keio.ac.jp> 43
問題その6 問題その5をメソッドを使って書き直してみよう drawメソッドとsetupメソッドも追加しよう 自分で作ったメソッドをdrawメソッド内で呼び出そう 2010.11.25 論理試行とプログラミング N.Shimizu <chiko at sfc.keio.ac.jp> 44
クリックした所に円を描こう 2010.12.2 論理思考とプログラミング  N.Shimizu <chiko@sfc.keio.ac.jp> 45 クリック
このプログラムで描ける void setup(){   size(400, 400);   background(0, 0, 0);   smooth(); noStroke();   fill(255, 255, 255); }  void draw(){ } void mouseClicked(){ ellipse(mouseX, mouseY, 20, 20); } 2010.12.2 論理思考とプログラミング  N.Shimizu <chiko@sfc.keio.ac.jp> 46
マウスクリック時に呼ばれるメソッド void mouseClicked(){ ellipse(mouseX, mouseY, 20, 20); } 2010.12.2 論理思考とプログラミング  N.Shimizu <chiko@sfc.keio.ac.jp> 47 マウスのX座標 マウスのY座標
マウスドラッグ時に呼ばれるメソッド void mouseDragged(){ ellipse(mouseX, mouseY, 20, 20); } 2010.12.2 論理思考とプログラミング  N.Shimizu <chiko@sfc.keio.ac.jp> 48
問題その7 マウスがドラッグされたとき、マウスがある場所に白い円を描くプログラムを書いてください 背景は黒 画面のサイズは400x400 2010.12.2 論理思考とプログラミング  N.Shimizu <chiko@sfc.keio.ac.jp> 49
キーが押された時に呼ばれるメソッド void keyPressed(){     background(0, 0, 0); } 2010.12.2 論理思考とプログラミング  N.Shimizu <chiko@sfc.keio.ac.jp> 50
問題その8 問題その7で作成したプログラムに次の機能を付けてください 作成する機能 キーボードが押されたら、これまで描かれたものを全て消してください 2010.12.2 論理思考とプログラミング  N.Shimizu <chiko@sfc.keio.ac.jp> 51
押されたキーによって条件分岐したい void keyPressed(){ if(key == ‘b’){      background(0, 0, 255);   }else{      background(0, 0, 0);   } } 2010.12.2 論理思考とプログラミング  N.Shimizu <chiko@sfc.keio.ac.jp> 52 keyに押されたキーが文字として入っている
文字同士の比較 key == ‘a’ keyの値がaと等しいかどうか 等しいならtrue, そうでないならfalse key != ‘a’ keyの値がaと等しくないかどうか 等しくないならtrue, 等しいならfalse 文字はシングルクオートで囲もう 2010.12.2 論理思考とプログラミング  N.Shimizu <chiko@sfc.keio.ac.jp> 53
問題その9 問題その8で作成したプログラムを変更し、次の機能をつけてください 作成する機能 +キーが押されたら、描かれる円の大きさを大きくしてください -キーが押されたら、描かれる円の大きさを小さくしてください 2010.12.2 論理思考とプログラミング  N.Shimizu <chiko@sfc.keio.ac.jp> 54

More Related Content

What's hot

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

What's hot (20)

プログラミング技法特論第8回
プログラミング技法特論第8回プログラミング技法特論第8回
プログラミング技法特論第8回
 
CG2013 05
CG2013 05CG2013 05
CG2013 05
 
Tokyo.R #19 発表資料 「Rで色々やってみました」
Tokyo.R #19 発表資料 「Rで色々やってみました」Tokyo.R #19 発表資料 「Rで色々やってみました」
Tokyo.R #19 発表資料 「Rで色々やってみました」
 
会津合宿2015Day3:D問題
会津合宿2015Day3:D問題会津合宿2015Day3:D問題
会津合宿2015Day3:D問題
 
P5utda day3
P5utda day3P5utda day3
P5utda day3
 
20150725 オープンキャンパス資料
20150725 オープンキャンパス資料20150725 オープンキャンパス資料
20150725 オープンキャンパス資料
 
AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説
 
岡山県立大学オープンキャンパス資料
岡山県立大学オープンキャンパス資料岡山県立大学オープンキャンパス資料
岡山県立大学オープンキャンパス資料
 
WebGL入門LT大会資料
WebGL入門LT大会資料WebGL入門LT大会資料
WebGL入門LT大会資料
 
VRボドゲ実装の話
VRボドゲ実装の話VRボドゲ実装の話
VRボドゲ実装の話
 
プログラミング技法特論第6回
プログラミング技法特論第6回プログラミング技法特論第6回
プログラミング技法特論第6回
 
AtCoder Beginner Contest 033 解説
AtCoder Beginner Contest 033 解説AtCoder Beginner Contest 033 解説
AtCoder Beginner Contest 033 解説
 
私を SKI に連れてって
私を SKI に連れてって私を SKI に連れてって
私を SKI に連れてって
 
AtCoder Regular Contest 026 解説
AtCoder Regular Contest 026 解説AtCoder Regular Contest 026 解説
AtCoder Regular Contest 026 解説
 
CG2013 08
CG2013 08CG2013 08
CG2013 08
 
AtCoder Beginner Contest 034 解説
AtCoder Beginner Contest 034 解説AtCoder Beginner Contest 034 解説
AtCoder Beginner Contest 034 解説
 
はんなりPython#42 20210629
はんなりPython#42 20210629はんなりPython#42 20210629
はんなりPython#42 20210629
 
PCD2019 TOKYO ワークショップ「2時間で!Processingでプログラミング入門」
PCD2019 TOKYO ワークショップ「2時間で!Processingでプログラミング入門」PCD2019 TOKYO ワークショップ「2時間で!Processingでプログラミング入門」
PCD2019 TOKYO ワークショップ「2時間で!Processingでプログラミング入門」
 
2021年度秋学期 画像情報処理 第10回 Radon変換と投影定理 (2021. 11. 19)
2021年度秋学期 画像情報処理 第10回 Radon変換と投影定理 (2021. 11. 19)2021年度秋学期 画像情報処理 第10回 Radon変換と投影定理 (2021. 11. 19)
2021年度秋学期 画像情報処理 第10回 Radon変換と投影定理 (2021. 11. 19)
 
AtCoder Regular Contest 045 解説
AtCoder Regular Contest 045 解説AtCoder Regular Contest 045 解説
AtCoder Regular Contest 045 解説
 

Similar to 論理指向とプログラミング2010年度秋学期第9回

プログラミング技法特論第5回
プログラミング技法特論第5回プログラミング技法特論第5回
プログラミング技法特論第5回
guest61bed5f
 
プログラミング技法特論第3回
プログラミング技法特論第3回プログラミング技法特論第3回
プログラミング技法特論第3回
Noritada Shimizu
 
論理思考とプログラミング#08
論理思考とプログラミング#08論理思考とプログラミング#08
論理思考とプログラミング#08
Noritada Shimizu
 
プログラミング技法特論第5回
プログラミング技法特論第5回プログラミング技法特論第5回
プログラミング技法特論第5回
guest61bed5f
 
2010年度秋学期論理思考とプログラミング第8回
2010年度秋学期論理思考とプログラミング第8回2010年度秋学期論理思考とプログラミング第8回
2010年度秋学期論理思考とプログラミング第8回
Noritada Shimizu
 
論理思考とプログラミング第10回
論理思考とプログラミング第10回論理思考とプログラミング第10回
論理思考とプログラミング第10回
Noritada Shimizu
 
RでGISハンズオンセッション
RでGISハンズオンセッションRでGISハンズオンセッション
RでGISハンズオンセッション
arctic_tern265
 

Similar to 論理指向とプログラミング2010年度秋学期第9回 (14)

プログラミング技法特論第5回
プログラミング技法特論第5回プログラミング技法特論第5回
プログラミング技法特論第5回
 
プログラミング技法特論第3回
プログラミング技法特論第3回プログラミング技法特論第3回
プログラミング技法特論第3回
 
OpenGLと行列
OpenGLと行列OpenGLと行列
OpenGLと行列
 
論理思考とプログラミング#08
論理思考とプログラミング#08論理思考とプログラミング#08
論理思考とプログラミング#08
 
プログラミング技法特論第5回
プログラミング技法特論第5回プログラミング技法特論第5回
プログラミング技法特論第5回
 
第2回 JavaScriptから始めるプログラミング2016
第2回 JavaScriptから始めるプログラミング2016第2回 JavaScriptから始めるプログラミング2016
第2回 JavaScriptから始めるプログラミング2016
 
2010年度秋学期論理思考とプログラミング第8回
2010年度秋学期論理思考とプログラミング第8回2010年度秋学期論理思考とプログラミング第8回
2010年度秋学期論理思考とプログラミング第8回
 
計算機を用いて数学の問題を解くということ
計算機を用いて数学の問題を解くということ計算機を用いて数学の問題を解くということ
計算機を用いて数学の問題を解くということ
 
20180820 山梨県下小学校教員対象研修
20180820 山梨県下小学校教員対象研修20180820 山梨県下小学校教員対象研修
20180820 山梨県下小学校教員対象研修
 
論理思考とプログラミング第10回
論理思考とプログラミング第10回論理思考とプログラミング第10回
論理思考とプログラミング第10回
 
【Unite Tokyo 2018】誘導ミサイル完全マスター
【Unite Tokyo 2018】誘導ミサイル完全マスター【Unite Tokyo 2018】誘導ミサイル完全マスター
【Unite Tokyo 2018】誘導ミサイル完全マスター
 
RでGISハンズオンセッション
RでGISハンズオンセッションRでGISハンズオンセッション
RでGISハンズオンセッション
 
[Basic 1] ブロックチェーンと計算機科学 / ブール代数 / 情報理論
[Basic 1] ブロックチェーンと計算機科学 / ブール代数 / 情報理論[Basic 1] ブロックチェーンと計算機科学 / ブール代数 / 情報理論
[Basic 1] ブロックチェーンと計算機科学 / ブール代数 / 情報理論
 
【Unity道場スペシャル 2017京都】乱数完全マスター 京都編
【Unity道場スペシャル 2017京都】乱数完全マスター 京都編【Unity道場スペシャル 2017京都】乱数完全マスター 京都編
【Unity道場スペシャル 2017京都】乱数完全マスター 京都編
 

More from Noritada Shimizu

More from Noritada Shimizu (20)

20160803 devrel
20160803 devrel20160803 devrel
20160803 devrel
 
20160713 webvr
20160713 webvr20160713 webvr
20160713 webvr
 
20160601 devtools
20160601 devtools20160601 devtools
20160601 devtools
 
20150512 webgl-off-the-main-thread
20150512 webgl-off-the-main-thread20150512 webgl-off-the-main-thread
20150512 webgl-off-the-main-thread
 
20160428 html5jwebplat
20160428 html5jwebplat20160428 html5jwebplat
20160428 html5jwebplat
 
asm.js x emscripten: The foundation of the next level Web games
asm.js x emscripten: The foundation of the next level Web gamesasm.js x emscripten: The foundation of the next level Web games
asm.js x emscripten: The foundation of the next level Web games
 
Mozilla とブラウザゲーム
Mozilla とブラウザゲームMozilla とブラウザゲーム
Mozilla とブラウザゲーム
 
2016 gunma.web games-and-asm.js
2016 gunma.web games-and-asm.js2016 gunma.web games-and-asm.js
2016 gunma.web games-and-asm.js
 
20151224-games
20151224-games20151224-games
20151224-games
 
20151128 firefoxos-handson
20151128 firefoxos-handson20151128 firefoxos-handson
20151128 firefoxos-handson
 
20151117 devtools
20151117 devtools20151117 devtools
20151117 devtools
 
Inspection & Tweak: Firefox を使ったフロント開発
Inspection & Tweak: Firefox を使ったフロント開発Inspection & Tweak: Firefox を使ったフロント開発
Inspection & Tweak: Firefox を使ったフロント開発
 
20150822 osc-shimane
20150822 osc-shimane20150822 osc-shimane
20150822 osc-shimane
 
20150829 firefox-os-handson
20150829 firefox-os-handson20150829 firefox-os-handson
20150829 firefox-os-handson
 
20150829 firefox-os
20150829 firefox-os20150829 firefox-os
20150829 firefox-os
 
20150727 Development tools for Firefox OS apps
20150727 Development tools for Firefox OS apps20150727 Development tools for Firefox OS apps
20150727 Development tools for Firefox OS apps
 
Firefox OS でアプリを作るときに気をつけたい N 個のこと
Firefox OS  でアプリを作るときに気をつけたい N 個のことFirefox OS  でアプリを作るときに気をつけたい N 個のこと
Firefox OS でアプリを作るときに気をつけたい N 個のこと
 
Firefox OSアプリ開発ハンズオン(Hello World編)
Firefox OSアプリ開発ハンズオン(Hello World編)Firefox OSアプリ開発ハンズオン(Hello World編)
Firefox OSアプリ開発ハンズオン(Hello World編)
 
WebVR(html5j TV部、WebVRとかVRのUIとか勉強会)
WebVR(html5j TV部、WebVRとかVRのUIとか勉強会)WebVR(html5j TV部、WebVRとかVRのUIとか勉強会)
WebVR(html5j TV部、WebVRとかVRのUIとか勉強会)
 
Application submission, management and manetization in Firefox Marketplace
Application submission, management and manetization in Firefox MarketplaceApplication submission, management and manetization in Firefox Marketplace
Application submission, management and manetization in Firefox Marketplace
 

論理指向とプログラミング2010年度秋学期第9回