roy > naoya > 基礎プログラミングI > (11)楽しいプログラムを作ろう
(11) 07/04の授業内容:楽しいプログラムを作ろう
[1] 自由製作課題について
前期の授業も終盤に入り、4月当初では想像できないような難しいプログラムを書くことができるようになった。最後に、これまで学んだことを踏まえて自由に題材を選んでプログラムを作成してみよう。一人では負担が大きいので5名程度のグループを作り、アイデアを出し合いながら分担して作業を進めよう。
作成するもの
- プログラム(必ず2つ以上作成)
- 理由(1):プログラムが1つだと得意な人が任されることになり、作業量の偏りが生じやすい
- 理由(2):プログラムが1つだとグループ内の得意な人1〜2名の力量により結果が決まってしまう
- 理由(3):プログラムが1つだと複数の案が出た時に却下される案が多くなる
- 理由(4):今年は例年と比べて受講生のレベルが高いので2つくらい作れそう
- Webページ(プログラムの説明書やプログラム本体を掲載)
- プレゼンテーションファイル(発表時に使用)
自由課題のグループ
これまでに獲得をした得点に基づき、各グループの戦力が同じになるように調整しています。
2限
1 | 2 | 3 |
---|---|---|
C1100093 阿部一輝 C110045A 小野保奈美 C1100934 阪野知春 C1100986 佐藤絵里佳 C1101112 色摩佳洋 C1101425 高橋勇貴 C1101477 武田拓也 |
C1100064 安喰恋 C1100348 遠藤佑貴 C1100437 奥山大樹 C1100696 木嶋勇介 C1100897 齋藤雅史 C1101632 中井智史 C1101945 山本恭平 |
C1100101 阿部哲哉 C1100271 伊藤卓哉 C1100302 植木宏伸 C1100408 岡崎晶樹 C1101230 菅原賢 C1101968 結城健太 |
4 | 5 | 6 |
C1100058 朝倉和樹 C1100118 荒木圭介 C1100325 遠田龍 C1100578 金子哲 C110132A 鈴木文華 C1101402 高橋沙織 C1101939 山口翔平 |
C1100236 伊勢村真那 C1100242 板垣貴翔 C110097A 佐藤有沙 C110103A 佐藤隼 C1101365 瀬野裕之 C1101661 成田昌弘 |
C1100331 遠藤元一 C1100590 釜神貴宏 C1100992 佐藤栗美 C1101141 志摩健太郎 C1101359 簾内那穂子 C1101750 福田眞二 C1101891 村上惇希 |
7 | ||
C1100199 石川将平 C1100791 後藤正樹 C1100905 齋藤結衣 C1100928 寒河江俊祐 C1100940 笹川礼未 C1102028 若生和希 |
3限
1 | 2 | 3 |
---|---|---|
C1100650 菊池敬太 C1101253 菅原彩花 C1101299 鈴木智也 C1101342 須藤充司 C1101431 高橋志英 C1101603 時田佳穂 C1101649 中川弘樹 |
C1100130 安藤夏海 C1100377 大熊麻友 C1101081 佐藤裕介 C1101193 進藤江莉亜 C1101796 本間紘司 C110184A 三浦慎平 |
C1100420 小川まどか C1101046 佐藤汰紀 C1101164 下妻匡哉 C1101773 細田洋平 C1101856 見川英駿 C1101885 宮原絵美里 |
4 | 5 | 6 |
C1100644 菊池綾 C1100779 国分祐香 C1100816 小林愛実 C110155A 継枝沙希 C1102005 吉田亘 C1102057 渡辺龍 |
C1100495 鏡登志晃 C1100638 上林千尋 C1100673 菊地瑞紀 C1100851 齋藤慶太 C110190A 森桂太 C1101980 吉住貴則 |
C1100549 加藤恭平 C1101069 佐藤千香 C1101690 羽田圭介 C1101709 畠山貴衣 C1101879 宮城晃司 C1101916 薮田大樹 |
7 | 8 | 9 |
C1100153 五十嵐兼一 C1100839 近藤優悟 C1101276 鈴木椎菜 C1101520 千葉倫之 C1101589 照井さつき C1101833 馬宮巧 |
C1101626 豊田純平 C1101655 夏井知恵子 C1101678 名和大翔 C1101804 松田大輝 C1101974 余語結佳 C1101997 吉田栞 |
C1100265 伊藤桜子 C1100880 齋藤陽香 C1101543 千葉悠佳 C1101715 樋口貴士 C1101721 兵藤理沙 C1101862 水口天地 |
題材設定
グループ課題は諸君の実力を公(おおやけ)にアピールできるよう公開しやすい題材を選ぶ形式とする。以下の各部門から好きなものを選んで課題作成する。
- 地域活性部門
何か地域を盛り上げる助けになるもの
- 福祉部門
不自由を克服する人を支援するものなど
- 役立ち情報部門
知りたい人にとってしっかり役立つ情報を提供するもの
- シミュレーション部門
実世界でのできごとを計算機上で仮想的に実験するもの
- 教育部門
何かを学習する人の強力な助けになるもの
- ビジュアル部門
効果的な視覚情報を多数用意した凝った作りのもの
- エンターテイメント部門
大人から子供まで幅広く楽しめるもの
他チームの作品を評価するときに、その作品がエントリした部門のテーマに則しているかも大きく加味する。
過去の自由製作課題
参考までに過去の自由製作課題の例を示す。
[2] 今後の予定
- 7月4日
- 楽しいプログラムを作るためのテクニック
- 自由課題グループ分け
- グループ名の決定
- 役割分担の決定
- 作成するプログラム案を考える
- 7月11日
- trr
- 作成するプログラムの決定
- Webページの構成の決定
- プログラムおよびWebページの作成を開始
- 7月25日
- プログラムの完成
- Webページの完成
- 発表方法の検討
- 発表練習
- 8月1日
- 自由課題発表会
[3] 役割分担について
役割分担を決め、何をいつまでにやるのか相談しよう。役割としては例えば以下があげられる。準備期間の役割、当日の役割いずれも分担し、何もすることがない人が出てこないようにしよう。
授業以外の時間に集まって作業を行う可能性もあるため、連絡が取り合えるようにしておこう。後で、連絡が取れなくなって困ることがないようにしておくこと。
準備期間の役割(例)
- プログラム作成
- プログラムデータ作成(クイズなどの場合)
- プログラムシナリオ作成(シミュレーションゲームなどの場合)
- Webページ作成
- 素材(Webページ・プログラム)作成(GIMP)
- プレゼンテーションファイル作成
当日の役割(例)
- 発表役
- タイムキーパー
- コンピュータ操作役
[4] 作成するプログラムの例
例えば以下のようなプログラムが考えられる。面白いものや実用的なものを作ってみよう。
- 4択クイズ
- ロールプレイングゲーム
- 30秒あてゲーム
- 対戦型ゲーム
- 一番安い送料を調べるプログラム
- 占い
- 心理テスト
ただし、占いや心理テストはいい加減に作ってしまうと面白みが薄れる一方、診断の根拠を何らかの資料に求めると著作権の問題が発生してしまう。また、構造も単純なため、半年間学んだ集大成のプログラムとしては達成感に欠ける。あくまでも最終手段と考えておこう。
なお、最終的に公開することを考え、以下の点に留意しよう。
- 操作方法をわかりやすくする:ユーザ≠プログラム作成者であるため、初めて実行した人でも操作方法がわかりやすいことが望ましい。例えば、実行直後にprint"好きな数字を入力してください\n"とすると、何をするプログラムであるのか、何のために数字を入力しなければならないのかがわからない。ただし、余りにも細かく説明しすぎると、読むのが煩わしくなってしまう。プログラム作成担当でないグループ内の他のメンバに意見を求めると良い。
- プログラムの構造をわかりやすくする:どこでどのような処理をしているのかについてコメントを残しておくと良い。複数人で協力して作成する場合、他人が書いたプログラムを理解するためには時間がかかることがある。また、よく出来たプログラムの場合、次年度以降の自由課題作成において参考にされる可能性もある。せっかく作ったプログラムであるため、将来的に活用してもらえるよう、構造をわかりやすくしておこう。
- 協力して作成する:例えばクイズを作る場合、一人で問題を考えると20問程度が限界かもしれない。しかし、全員で考えれば100問以上の問題を作ることも出来る。毎回同じ問題が同じ順番で出題されるプログラムは1〜2回しか実行してもらえないが、プールした100問の問題からランダムに10問出題するようなプログラムであれば、何度でも楽しむことができる。せっかく作るのであるから、多くの人に繰り返し実行してもらえるようなものを作ろう。
- 技術レベルの高いプログラムを作成する:これまで学んできたことを活かし、技術的にもレベルの高いものを作成しよう。例えば、恋愛シミュレーションゲームを作る場合、プログラム自体はif文だけで書けてしまうので、後述するポップアップ画像の表示やプログレスバーなどを組み込んで見ると良い。
[5] Webページの構成
作成したプログラムを実施してもらうためには、わかりやすい説明や楽しそうなページ作りが求められる。以下の項目を含めよう(それぞれ別ページにしても良いし、1ページにまとめて書いても良い)。
参考として、架空の自由課題のページを示す。
- メンバー紹介:メンバーの名前や役割分担。各自のページ(1年生のときに作成したもの)へのハイパーリンク
- 説明:プログラム名やプログラムの概要、保存方法、実行方法、遊び方、著作権の表記など
- プログラム:プログラム自体も~/public_html/におき、ダウンロードできるようにする
プログラム名・プログラムの概要
何をするプログラムだかわからないままに実行する人はいない。何ができるのかというのはまさにプログラムの売りになる点である。ゲームであれば難易度が数段階に分かれていることが売りになるかもしれないし、実用的なプログラムでは細かな設定ができる点が売りになるかもしれない。淡々と機能を説明するのが良いのか楽しさを前面に出すのが良いのかは、作成するプログラムによって変わってくる。実際にプログラムを公開しているページを確認し、参考にしてみよう。
保存方法・実行方法
これまで、この授業を受けてきた人であれば詳しく説明しなくてもわかるため、これらは不要と感じるかもしれない。しかし、Webページにプログラムを掲載するということは、(学内のみに制限されているが)誰でも自由に閲覧することができる。プログラムを実行したことのない1年生が、2年生になるとどのようなプログラムを作ることが出来るのかを確認しているかもしれない。こうした点を踏まえ、誰でも保存して実行できるよう詳しく説明しておこう。
遊び方
実行しても、どのように操作をすればよいのかわからないプログラムでは、積極的に使ってみようとは思ってもらえない。プログラムを作成する際にprintメソッドなどで説明を盛り込むことも重要であるが、「遊び方」(取扱説明書)のページを作ることも考えるべきである。プログラム内に表示されるメッセージはその時しか見ることが出来ないが、Webページに記載しておけば、実行しながら随時確認することができる。懇切丁寧な説明は不要だが、最低限知っておいて欲しいことを書いておくとよい。
著作権
プログラムの著作権は作成者に帰属する。プログラムをダウンロードした人は著作権を取得できるわけではない。著作権を保有する作成者は、作成したプログラムについて改変(内容を書き換えること)や再配布(ダウンロードしたプログラムを第三者に配布すること)の可否、免責事項(このプログラムを使用して生じたいかなる損害に対しても作成者は責任を負わないというようなこと)などを定めることができる。現在では、OpenOfficeやFirefoxなど、プログラムのソースを公開し、誰でも改変、再配布が認められたオープンソースが普及してきている。今回作成するプログラムも営利を目的としたものではないため、改変や再配布など厳しく制限しないようにしよう。
ページのデザイン
背景と文字色のコントラストを考え読みづらくならないようにすること、文字を小さくしすぎないようにすること、重要な点を強調することなどに加えてページのデザインにもこだわってみよう。野暮ったいページであれば、読んでみようと思わないかもしれない。プログラムの中味だけでなく、Webページの見栄えでも勝負しよう。
[6] プレゼンテーションファイルの構成
14回目の授業では、作成したプログラムの発表会を行う。プレゼンテーションを上手に行うことは、出来栄えの良いプログラムを作るのと同じくらい重要である。いくら素晴らしいものが出来上がっていても、聞くに堪えない発表であれば、聞き手は話を聞かずに他のことを始めてしまうだろう。発表時間は10分間とするが、聞き手の10分間を無駄にすることがないよう時間を有効に活用しよう。
そのためには、行き当たりばったりで発表するのではなく、発表の流れを決めておく必要がある。また、単に口頭で発表するだけでは重要なところがわかりづらいし、音声情報は時間的に保存ができないので、聞き手がWebページに注意を向けた際に聞き逃してしまう可能性がある。プレゼンテーションソフトでスライドを作成しておくと、発表者は重要な点を言い忘れることなく発表することができ、聞き手は聞き逃してもスライドを確認して内容を把握することができる。
以下が発表内容になるだろうが、これらの項目の順番や内容は各グループで自由に決めてよい。社会に出れば大学卒の皆さんはプレゼンテーションをできることが当然だと思われる。「もう少ししっかり準備していればよかった」とならないよう、この機会を有効に活用しよう。
- チーム名の由来
- メンバー紹介
- プログラムの概要
- プログラム作成理由
- 使い方・遊び方
- セールスポイント
[7] 乱数の発生(rand)
[8] 少し間を空ける(sleep)
[9] 時刻を取得する(Time.now)
[10] 大きな文字を出す(systemを用いたbannerコマンド)
[11] ポップアップで画像を表示(systemを用いたdisplayコマンド)
[12] 文字色変更・画面操作(\e[Xm)
[13] 配列に関するTips
[14] プログレスバーを作る
[15] 文字列操作
[16] 出席課題
決定したグループのメンバー、グループ名、役割分担、プログラムの案など決まったところまで報告する。
授業終了時までに提出。出席点は2点。提出要領は下記の通り。
- 提出先:課題提出用メールアドレス
- メールのSubject:ruby11
- 本文の構成:1行目で学籍番号、氏名を記載する。2行目以降でメンバーの学籍番号と氏名を記載する。