コンピュータ基礎と プログラミング...

45
コンピュータ基礎と プログラミング (第九回) 雅智 [email protected] 2010秋学期 1 1 2010123日金曜日

Transcript of コンピュータ基礎と プログラミング...

Page 1: コンピュータ基礎と プログラミング (第九回)morimori/compro10f/class09-implementation.pdf · コンピュータ基礎と プログラミング (第九回)

コンピュータ基礎とプログラミング(第九回)

森 雅智[email protected]

2010年 秋学期

1

12010年12月3日金曜日

Page 2: コンピュータ基礎と プログラミング (第九回)morimori/compro10f/class09-implementation.pdf · コンピュータ基礎と プログラミング (第九回)

前回の復習&課題回答

2

22010年12月3日金曜日

Page 3: コンピュータ基礎と プログラミング (第九回)morimori/compro10f/class09-implementation.pdf · コンピュータ基礎と プログラミング (第九回)

配列の宣言と初期化を同時に行う

• 通常の変数と同じように,配列も宣言と初期化を同時に行うことができる.

配列の要素数が増えてくると便利

3

32010年12月3日金曜日

Page 4: コンピュータ基礎と プログラミング (第九回)morimori/compro10f/class09-implementation.pdf · コンピュータ基礎と プログラミング (第九回)

二次元配列• 二次元配列とは,**を要素として持つ配列のこと(**の配列)

• 配列も変数だったことを思い出す

int[3] int[3] int[3] int[3] int[3]array2d

[0] [1] [2] [3] [4]

**の中に配列が入っている4

42010年12月3日金曜日

Page 5: コンピュータ基礎と プログラミング (第九回)morimori/compro10f/class09-implementation.pdf · コンピュータ基礎と プログラミング (第九回)

二次元配列• 二次元配列とは,配列を要素として持つ配列のこと(配列の配列)

• 配列も変数だったことを思い出す

int[3] int[3] int[3] int[3] int[3]array2d

[0] [1] [2] [3] [4]

配列の中に配列が入っている5

52010年12月3日金曜日

Page 6: コンピュータ基礎と プログラミング (第九回)morimori/compro10f/class09-implementation.pdf · コンピュータ基礎と プログラミング (第九回)

二次元配列の注意• 全ての要素は***である必要がある

• 特定の行や列だけ別の型にすることはできない

平均は***なので,全てのデータを同じ二次元配列に入れることはできない

6

62010年12月3日金曜日

Page 7: コンピュータ基礎と プログラミング (第九回)morimori/compro10f/class09-implementation.pdf · コンピュータ基礎と プログラミング (第九回)

二次元配列の注意• 全ての要素は同じ型である必要がある

• 特定の行や列だけ別の型にすることはできない

平均は小数型なので,全てのデータを同じ二次元配列に入れることはできない

7

72010年12月3日金曜日

Page 8: コンピュータ基礎と プログラミング (第九回)morimori/compro10f/class09-implementation.pdf · コンピュータ基礎と プログラミング (第九回)

二次元配列の宣言と初期化を同時に行う

• 二次元配列も配列と同様に初期化できる

8

82010年12月3日金曜日

Page 9: コンピュータ基礎と プログラミング (第九回)morimori/compro10f/class09-implementation.pdf · コンピュータ基礎と プログラミング (第九回)

二次元配列でドット絵をデータとして表現する• SFCLibで扱うドットの位置は(x, y)で表現できる

• 各点は色(カラーコード)を持っている

二次元配列に全ての点のデータを格納することができる

9

92010年12月3日金曜日

Page 10: コンピュータ基礎と プログラミング (第九回)morimori/compro10f/class09-implementation.pdf · コンピュータ基礎と プログラミング (第九回)

色を数値化

21 24 73 5 106

41 70 2 06 153

2 37 0610 5 74

3 70 66 4 517 2

0 655 2 476 31

25 74 4 56 10 3

6 1 427 34 053

542 1 27 0 363

5 24 632 7 101

1076543210

参考:第五回授業資料

10

102010年12月3日金曜日

Page 11: コンピュータ基礎と プログラミング (第九回)morimori/compro10f/class09-implementation.pdf · コンピュータ基礎と プログラミング (第九回)

canvasデータを二次元配列で持つ利点

• lib.sfcPoint()では,指定した位置のドットを描画することはできたが,指定した位置のドットの色は分からなかった

• 二次元配列canvasに一度データを格納することで,指定した位置のドットの色を取得することができるようになる

プログラムプログラム

before after

参照書き込み

描画描画

参照はできない11

112010年12月3日金曜日

Page 12: コンピュータ基礎と プログラミング (第九回)morimori/compro10f/class09-implementation.pdf · コンピュータ基礎と プログラミング (第九回)

先週の課題1

• キー入力のレスポンスを保ちつつドットを適度な速度で動かすにはどうすればよいか,考察せよ

• 考察した通りに実際にドットを動かすプログラムを改変し,プログラムを提出せよ

12

122010年12月3日金曜日

Page 13: コンピュータ基礎と プログラミング (第九回)morimori/compro10f/class09-implementation.pdf · コンピュータ基礎と プログラミング (第九回)

考察• フレームレートを下げると,移動速度は遅くなるが,レスポンスは悪くなる

• 毎フレーム移動させているのが原因

フレームレートは高いまま,数フレームに一回だけ移動させれば良さそう

13

132010年12月3日金曜日

Page 14: コンピュータ基礎と プログラミング (第九回)morimori/compro10f/class09-implementation.pdf · コンピュータ基礎と プログラミング (第九回)

イメージ

高フレームレート

低フレームレート

改良版

時間

キーON キーOFF14回移動

2回移動

2回移動

※ 10回に1回だけ移動させる

高レスポンス

低レスポンス

高レスポンス

14

142010年12月3日金曜日

Page 15: コンピュータ基礎と プログラミング (第九回)morimori/compro10f/class09-implementation.pdf · コンピュータ基礎と プログラミング (第九回)

戦略• フレームレート自体は下げない• 下げるとレスポンスが落ちる為• 毎フレーム移動する代わりに,一度移動したら数フレームは移動しないようにカウンタを設ける

• カウンタが0の時のみ移動でき,一度移動したらカウンタの値を更新(更新する値で速度が決まる)

• カウンタが1以上の時,毎フレームカウンタを引いていく

15

152010年12月3日金曜日

Page 16: コンピュータ基礎と プログラミング (第九回)morimori/compro10f/class09-implementation.pdf · コンピュータ基礎と プログラミング (第九回)

改造元(毎フレーム移動する)

60FPS

16

162010年12月3日金曜日

Page 17: コンピュータ基礎と プログラミング (第九回)morimori/compro10f/class09-implementation.pdf · コンピュータ基礎と プログラミング (第九回)

改良版

ballCounterを使って移動して良いかの判定を行う

17

172010年12月3日金曜日

Page 18: コンピュータ基礎と プログラミング (第九回)morimori/compro10f/class09-implementation.pdf · コンピュータ基礎と プログラミング (第九回)

先週の課題2

• クリックしたドットを塗るプログラムを改造し,0~7のキーを押すと塗りつぶす色を変えられるお絵かきプログラムを作成せよ

• e.g. 1キーを押してからクリックすると青で塗ることができる

18

182010年12月3日金曜日

Page 19: コンピュータ基礎と プログラミング (第九回)morimori/compro10f/class09-implementation.pdf · コンピュータ基礎と プログラミング (第九回)

戦略• 既にクリックした場所を黒で塗りつぶすプログラムはある

• 塗りつぶす色を変更できるようにすれば良い

• 色は数字キーで変更できるようにする

19

192010年12月3日金曜日

Page 20: コンピュータ基礎と プログラミング (第九回)morimori/compro10f/class09-implementation.pdf · コンピュータ基礎と プログラミング (第九回)

元にするプログラム

クリックした部分を黒で塗るプログラム

20

202010年12月3日金曜日

Page 21: コンピュータ基礎と プログラミング (第九回)morimori/compro10f/class09-implementation.pdf · コンピュータ基礎と プログラミング (第九回)

変更する点• 塗りつぶす色を可変に

• 塗りつぶす色を変数にする

• 数字キーで色を変更可能に

• 数字キーが押されたら色の変数を変更

21

212010年12月3日金曜日

Page 22: コンピュータ基礎と プログラミング (第九回)morimori/compro10f/class09-implementation.pdf · コンピュータ基礎と プログラミング (第九回)

変更差分塗りつぶす色を変数に

数字キーでdrawColorを変更22

222010年12月3日金曜日

Page 23: コンピュータ基礎と プログラミング (第九回)morimori/compro10f/class09-implementation.pdf · コンピュータ基礎と プログラミング (第九回)

今日の内容

23

232010年12月3日金曜日

Page 24: コンピュータ基礎と プログラミング (第九回)morimori/compro10f/class09-implementation.pdf · コンピュータ基礎と プログラミング (第九回)

Agenda

• ドキュメントの読み方

• ファイル入出力

• 並べ替え

• 最終課題企画書のチェック

24

242010年12月3日金曜日

Page 25: コンピュータ基礎と プログラミング (第九回)morimori/compro10f/class09-implementation.pdf · コンピュータ基礎と プログラミング (第九回)

ドキュメントの読み方• ProcessingのHPにはたくさんの関数と使い方が載っている

• http://www.processing.org/reference/

• ドキュメントを読めるようになればプログラムの幅が広がる

25

252010年12月3日金曜日

Page 26: コンピュータ基礎と プログラミング (第九回)morimori/compro10f/class09-implementation.pdf · コンピュータ基礎と プログラミング (第九回)

max()のマニュアル

26

262010年12月3日金曜日

Page 27: コンピュータ基礎と プログラミング (第九回)morimori/compro10f/class09-implementation.pdf · コンピュータ基礎と プログラミング (第九回)

最終課題に向けて

• ドキュメントを読んで,やりたいこと,やれることを調べることができる

• 授業で使っていない関数も自由に使って良いので,良いものを作ってください

27

272010年12月3日金曜日

Page 28: コンピュータ基礎と プログラミング (第九回)morimori/compro10f/class09-implementation.pdf · コンピュータ基礎と プログラミング (第九回)

ファイル入出力• ファイル出力• プログラムからファイルにデータを書きこむ

• ファイル入力• ファイルからプログラムにデータを読み込む

プログラム出力

入力28

282010年12月3日金曜日

Page 29: コンピュータ基礎と プログラミング (第九回)morimori/compro10f/class09-implementation.pdf · コンピュータ基礎と プログラミング (第九回)

これまでのプログラム• これまで全ての情報はソースコードの中に記述してきた• プログラムの実行結果は表示するだけで,結果を保存することはできなかった

29

292010年12月3日金曜日

Page 30: コンピュータ基礎と プログラミング (第九回)morimori/compro10f/class09-implementation.pdf · コンピュータ基礎と プログラミング (第九回)

こんな時はどうする?• プログラムの挙動を少しだけ変えたい

• ボールの移動速度を変えたい

• 表示されるドット絵を直したい修正

30

302010年12月3日金曜日

Page 31: コンピュータ基礎と プログラミング (第九回)morimori/compro10f/class09-implementation.pdf · コンピュータ基礎と プログラミング (第九回)

プログラミングの流れ

• プログラマはプログラミング言語でソースコードを記述し,コンパイラがソースコードを実行ファイルに変換し,コンピュータが実行ファイルを実行する

ソースコード(in プログラミング言語)

プログラマ

実行ファイル(in 機械語)

コンパイラ

変換 実行

ソースコードを修正したらコンパイルし直す必要がある31

312010年12月3日金曜日

Page 32: コンピュータ基礎と プログラミング (第九回)morimori/compro10f/class09-implementation.pdf · コンピュータ基礎と プログラミング (第九回)

ファイル出力でできること

• プログラムを終了してもプログラムの結果を残すことができる

• ゲームのハイスコアデータ

• お絵かきソフトの画像データ

• その他

32

322010年12月3日金曜日

Page 33: コンピュータ基礎と プログラミング (第九回)morimori/compro10f/class09-implementation.pdf · コンピュータ基礎と プログラミング (第九回)

ファイル入力でできること

• プログラムをコンパイルし直さなくてもプログラムの挙動を変えることができる

• セーブデータからの復帰

• 既存のファイルの編集

• プログラムの細かい設定パラメータの変更

33

332010年12月3日金曜日

Page 34: コンピュータ基礎と プログラミング (第九回)morimori/compro10f/class09-implementation.pdf · コンピュータ基礎と プログラミング (第九回)

演習:ファイル入力• 適当なテキストファイルを書いてプログラムと同じフォルダに保存

• String[] loadStrings()という関数を使ってファイルの内容を表示してみる

• 戻り値はString(文字列)型の配列

• http://www.processing.org/reference/loadStrings_.html

34

342010年12月3日金曜日

Page 35: コンピュータ基礎と プログラミング (第九回)morimori/compro10f/class09-implementation.pdf · コンピュータ基礎と プログラミング (第九回)

演習:ファイル出力• saveStrings()関数を使ってファイルに文字列を書きこんでみる

• 使い方はドキュメントを読みながらやってみること• http://www.processing.org/reference/saveStrings_.html

35

352010年12月3日金曜日

Page 36: コンピュータ基礎と プログラミング (第九回)morimori/compro10f/class09-implementation.pdf · コンピュータ基礎と プログラミング (第九回)

並べ替え(sort)• プログラムで並べ替えは良く使われる

• 大きい順に並べる

• 小さい順に並べる

• 配列とセットで使われる

8274 7163 9361 6363 6184

6184 6363 7163 8274 9361

Before

After

36

362010年12月3日金曜日

Page 37: コンピュータ基礎と プログラミング (第九回)morimori/compro10f/class09-implementation.pdf · コンピュータ基礎と プログラミング (第九回)

演習:並び替え• int型の要素数5の配列を作成し、以下の値で初期化せよ

8274 7163 9361 6363 6184

•配列の中身を小さい順に並べ替えよ

•完成したら、初期化値を変えても正しく動作するか確かめよ

37

372010年12月3日金曜日

Page 38: コンピュータ基礎と プログラミング (第九回)morimori/compro10f/class09-implementation.pdf · コンピュータ基礎と プログラミング (第九回)

他にも別解はあるので動作していれば問題ない38

382010年12月3日金曜日

Page 39: コンピュータ基礎と プログラミング (第九回)morimori/compro10f/class09-implementation.pdf · コンピュータ基礎と プログラミング (第九回)

最終課題企画書チェック

• 最終課題の企画書を一人ずつチェックします

• 他の人がチェックされている間は次ページ以降の課題をやる

• 課題が終わったら最終課題を進める

39

392010年12月3日金曜日

Page 40: コンピュータ基礎と プログラミング (第九回)morimori/compro10f/class09-implementation.pdf · コンピュータ基礎と プログラミング (第九回)

SFCLibのアップグレード• Processingの環境設定の「Sketchbook location」フォルダ内に「libraries」フォル

ダを作成

• libraries内に以下のURLからダウンロードしたsfclib.zipを解凍する

• http://www.ht.sfc.keio.ac.jp/~morimori/compro10f/sfclib.zip

40

402010年12月3日金曜日

Page 41: コンピュータ基礎と プログラミング (第九回)morimori/compro10f/class09-implementation.pdf · コンピュータ基礎と プログラミング (第九回)

SFCLib 0.4の更新点(1)• char lib.sfcCharAt(String s, int i)

• sのi文字目の文字を返す(0文字目から始まる)

• int lib.sfcStrLength(String s)

• sの文字数を返す

• char[] lib.sfcToCharArray(String s)

• sをchar型の配列に変換する

• int lib.sfcParseInt(String s)

• sの文字列を数値に変換する(“100”という文字列なら100という整数に変換する)

41

412010年12月3日金曜日

Page 42: コンピュータ基礎と プログラミング (第九回)morimori/compro10f/class09-implementation.pdf · コンピュータ基礎と プログラミング (第九回)

SFCLib 0.4の更新点(2)• float lib.sfcParseFloat(String s)

• sの文字列をfloat型に変換する(“10.4”ならfloat型の10.4を返す)

• String[] lib.sfcSplit(String s, String divider)

• sをdividerで分割した配列を返す(s =

“a,bc,cde,def,”, divider=”,”なら,s[0]=”a”, s[1]

=”bc”, s[2]=”cde”, s[3]=”def”のString配列を返す)

42

422010年12月3日金曜日

Page 43: コンピュータ基礎と プログラミング (第九回)morimori/compro10f/class09-implementation.pdf · コンピュータ基礎と プログラミング (第九回)

演習:続並び替え• 以下のデータを名前はStringの配列,点数はint型の二次元配列に格納し,以下の並べ替えを行え

• 数学の点数順に並び替えよ

• 合計点順に並び替えよ

43

432010年12月3日金曜日

Page 44: コンピュータ基礎と プログラミング (第九回)morimori/compro10f/class09-implementation.pdf · コンピュータ基礎と プログラミング (第九回)

演習:お絵かきツールを作る• 課題で作った任意の色のドットを描画するプログラムを改造し「s」キーを押すとデータを保存「l(Lの小文字)」キーを押すと保存したデータを読み込むようにせよ

sキーで保存

lキーで読み込み

44

442010年12月3日金曜日

Page 45: コンピュータ基礎と プログラミング (第九回)morimori/compro10f/class09-implementation.pdf · コンピュータ基礎と プログラミング (第九回)

今週の課題•最終課題を進める

•現時点で作り方が分からない機能を洗い出して,質問があればまとめる

•これまでの内容でよく分からなかった所があれば,同じくまとめる

45

452010年12月3日金曜日