roy > naoya > 基礎プログラミングI·情報検索 > (11)楽しいプログラムを作ろう

(11) 06/29の授業内容:楽しいプログラムを作ろう

[1] 自由製作課題について

前期の授業も終盤に入り、4月当初では想像できないような難しいプログラムを書くことができるようになった。最後に、これまで学んだことを踏まえて自由に題材を選んでプログラムを作成してみよう。一人では負担が大きいので5名程度のグループを作り、アイデアを出し合いながら分担して作業を進めよう。

作成するもの

  1. プログラム(大きなもの1つ・もしくは中程度のもの2つ)
  2. Webページ(プログラムの説明書やプログラム本体を掲載)
  3. プレゼンテーションファイル(発表時に使用)

自由課題のグループ(2限)

これまでに獲得をした得点に基づき、各グループの戦力が同じになるように調整しています。

1234567
c108024 c108048 c108056 c108109 c108116 c108151 c108166 c108058 c108073 c108084 c108088 c108089 c108130 c108180 c108012 c108014 c108017 c108042 c108076 c108098 c108103 c108030 c108051 c108059 c108065 c108066 c108135 c108160 c108011 c108015 c108043 c108068 c108070 c108080 c108149 c108006 c108033 c108049 c108078 c108085 c108107 c108110 c108001 c108010 c108062 c108094 c108102 c108155 c108163

[2] 今後の予定

  • 6月29日
    • 楽しいプログラムを作るためのテクニック
    • 自由課題グループ分け
    • グループ名の決定
    • 役割分担の決定
    • 作成するプログラム案を考える
  • 7月6日
    • trr
    • 作成するプログラムの決定
    • Webページの構成の決定
    • プログラムおよびWebページの作成を開始
  • 7月13日
    • プログラムの完成
    • Webページの完成
    • 発表方法の検討
    • 発表練習
  • 7月16日
    • 自由課題発表会

[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)

>>More

[8] 少し間を空ける(sleep)

>>More

[9] 時刻を取得する(Time.now)

>>More

[10] 大きな文字を出す(systemを用いたbannerコマンド)

>>More

[11] ポップアップで画像を表示(systemを用いたdisplayコマンド)

>>More

[12] 文字色変更・画面操作(\e[Xm)

>>More

[13] 配列に関するTips

>>More

[14] プログレスバーを作る

>>More

[15] 出席課題

決定したグループのメンバー、グループ名、役割分担、プログラムの案など決まったところまで報告する。

授業終了時までに提出。出席点は2点。提出要領は下記の通り。

  • 提出先:課題提出用メールアドレス
  • メールのSubject:ruby11
  • 本文の構成:1行目で学籍番号、氏名を記載する。2行目以降でメンバーの学籍番号と氏名を記載する。

グループ課題で作成するWebページから、各メンバーの個人ページへのハイパーリンクを設置するため、1年生の時に作成したページの情報を更新し、見られても恥ずかしくない情報にしておこう。