第10回から第12回にかけて、チームで自由に題材を選んでプログラムを開発する。また、プログラムを紹介するWebページも作成する。第13回には、作った作品について発表とデモンストレーションを行い、皆で投票しそれぞれのプログラムを評価する。
(また、必須ではないが発表会ではスライドを使用することも検討してください)
C1222146 C1222057 C1220041 C1222399 C1221649
C1220087 C1222092 C1220555 C1221833 C1220029
C121206A C1221394 C1221282 C1221922 C1222376
C1221744 C1222287 C1221750 C1221520 C1220963
C1221603 C1220064 C1221543 C1221738 C1222301
C1220673 C1221230 C1222293 C1221425 C1221017
(次週まで)
まずは各グループで相談し、下記を参考にチームでの役割分担を決定すること。
プロジェクトのスケジューリングや各自分担部分の進捗管理、連絡の取りまとめ等をおこなう。
プロジェクト内で決定した設計を元に、プログラムを実装する。
プログラムを紹介するWebページを作成する。
発表会の準備を担当する。発表時にWebページに加えてスライドやその他の発表資料を用いると決めた場合はその資料を作成する。
データ作成担当、画像作成担当、等々。
授業以外の時間にもチームが集まって作業を行う必要が生じる可能性が高いし、そうでない場合にもチーム内での情報共有を可能にしなければならないため、メンバーで連絡が取れるようにすること。
たとえば、本講義のS4グループにチーム固有の掲示板を作ることができる。
チーム所有の掲示板の作り方:
「チーム所有」モードにすると「全員通知モード」がチームのメンバー全員になる。
チーム掲示板書込み通知を受け取るアドレスを変えることも可能である:
複数人で協力して一つのRubyプログラムを作成し発表準備を行うという計画(プロジェクト)を納期内に達成するためには、明確な目標とそれを実現するのに必要な作業のスケジュール、そして進捗状況の管理(マネジメント)が必要である。プロジェクトの管理はプロジェクトマネージャーの主な役割になる。プロジェクトマネジメントの流れを簡単にまとめると、以下の通りである。
*スケジュールの作成と管理は全員で共有するガントチャートを用いると効率的になる。
プロジェクトマネジメントについてもっと詳しく:プロジェクトマネジメントについて(山本先生のページ)
作成したプログラムを紹介するWebページを作成し ~/public_html/
内のどこかに置くこと。Webページの書き方についてはWebページ作成の基礎を参考にし、emacsなどを用いて作成する。
内容:
ヒント:他人に作られたページのHTMLを参考にしたい場合はFirefoxでページに右クリックし、「View Page Source」を選ぶ。ページの一部を選んで、その部分のみのHTMLを覗くこともできる(「View Selection Source」)。
プログラム紹介のWebページの例:
架空のプログラム「Five Seconds!!」(神田先生のページ)
架空のプログラム「NumberMagiQ」(広瀬先生のページ)
第13回の授業では完成したプログラムのデモを含めたプレゼンテーションを行なう。プレゼンテーションは全員に見やすいWebページ、もしくは LibreOffice の Impress などで作成したスライドを見せながら行なう。発表資料の作成係も重要な任務の一つとなる。
ゲーム性のあるプログラムを作るためには、プログラムを起動する度に違う値を返すメソッドが不可欠である。計算機では何らかの決まりに沿って見かけ上ランダムな数を順次発生させられる。厳密にはこれを擬似乱数という。
Rubyでは乱数を発生したいときはrand
メソッドを利用できる。
rand(自然数)
とすると、0から「自然数」未満の整数の乱数を発生する。
rand()
とすると0から1未満の実数値で乱数を発生する。
以下はサイコロを振るプログラムである。
練習問題dice.rb
#!/usr/koeki/bin/ruby
# -*- coding: utf-8 -*-
dice = rand(6) + 1
printf("サイコロを振った結果は %d です.\n", dice)
数値以外のデータをランダムに選ぶためには、配列に備わっているsample
メソッドを利用できる。
配列.sample
とすると、「配列」の要素を一個ランダムに選んで返す。
配列.sample(3)
とすると、「配列」の要素を3個ランダムに選んで配列として返す。
以下のプログラムは、じゃんけんのグーチョキパーをランダムに出すものである。
練習問題rockpaper.rb
#!/usr/koeki/bin/ruby
# -*- coding: utf-8 -*-
rockpaper = ["グー", "チョキ", "パー"]
hand = rockpaper.sample
printf("私の手は %s です.\n", hand)
Rubyプログラムが動いているときの現在時刻はTime
クラスのnow
メソッドを利用して取得する。
例:
練習問題% irb
irb(main):001:0> now = Time.now
=> 2021-06-30 16:42:20.52425611 +0900
年・曜日などを知りたいときは、返されたオブジェクトのメソッドを使って取得する。
練習問題irb(main):002:0> now.year
=> 2021
irb(main):003:0> now.month
=> 6
irb(main):004:0> now.day
=> 30
irb(main):005:0> now.hour
=> 16
irb(main):006:0> now.min
=> 42
irb(main):007:0> now.sec
=> 20
irb(main):008:0> now.wday # 曜日を0(日曜日)から6(土曜日)までの整数として返す。
=> 3
また、二つのTimeクラスのオブジェクトで引き算を行うと、時刻の差が秒単位で返される。たとえば、10秒以内になにかの処理をやらせる場合は以下のようにする。
練習問題countdown.rb
#!/usr/koeki/bin/ruby
# -*- coding: utf-8 -*-
start = Time.now
while true
puts "まだ時間があります"
if Time.now - start > 10
puts "時間切れです"
break
end
end
解説:まずは Time.now
でプログラムの動作が開始した時の時刻を取得して start
に記憶させる。それから、無限ループで「まだ時間があります」というメッセージを表示し、start
と現在時刻の差が10秒を超えたか確認するという処理を繰り返す。10秒が経ったら「時間切れです」と表示されて break
でループから抜け出す。
プログラムを一時停止したいときにはsleep
メソッドを使う。指定した秒数だけプログラムの実行を停止するメソッドである。
例:
練習問題nap.rb
#!/usr/koeki/bin/ruby
# -*- coding: utf-8 -*-
puts("おやすみ!")
sleep(10) # 10秒間停止する
puts("おはようございます!")