チームワークの準備


第10回から第12回にかけて、チームで自由に題材を選んでプログラムを開発する。また、プログラムを紹介するWebページも作成する。第13回には、作った作品について発表とデモンストレーションを行い、皆で投票しそれぞれのプログラムを評価する。

発表会までに作成するもの

  1. Rubyプログラム
  2. プログラムを紹介するWebページ

(また、必須ではないが発表会ではスライドを使用することも検討してください)

プログラムのテーマの例


チーム

A(仮)

C1222146
C1222057
C1220041
C1222399
C1221649  

B(仮)

C1220087
C1222092
C1220555
C1221833
C1220029  

C(仮)

C121206A
C1221394
C1221282
C1221922
C1222376  

D(仮)

C1221744
C1222287
C1221750
C1221520
C1220963  

E(仮)

C1221603
C1220064
C1221543
C1221738
C1222301  

F(仮)

C1220673
C1221230
C1222293
C1221425
C1221017   

今後のスケジュール

10回目(本日)

11回目(6/30)

12回目(7/7)

13回目(7/21)

14回目(7/24(月)6限)


役割分担について

まずは各グループで相談し、下記を参考にチームでの役割分担を決定すること。


連絡手段

授業以外の時間にもチームが集まって作業を行う必要が生じる可能性が高いし、そうでない場合にもチーム内での情報共有を可能にしなければならないため、メンバーで連絡が取れるようにすること。

たとえば、本講義のS4グループにチーム固有の掲示板を作ることができる。

チーム所有の掲示板の作り方:

  1. まずはチームを作成しそのメンバーを設定する:
  2. グループのホームページに戻って、「グループの新規話題作成」を選び、分りやすいタイトルと序文で掲示板を作る。
  3. 「修正」画面末尾にある「☐ この話題を以下のチームのものにする」にチェックを入れ、自分のチームを選択し、「確認」をチェックして「移動」ボタンを押す。
  4. グループのホームページに戻って、話題一覧の「team」列で自分のチーム名が表示されていることを確認する。

「チーム所有」モードにすると「全員通知モード」がチームのメンバー全員になる。

チーム掲示板書込み通知を受け取るアドレスを変えることも可能である:

  1. グループのホームページを開き、「自身の参加状態を操作する」を開く。
  2. 「参加する場合のメイルアドレス」に通知先アドレスを記入して「送信」を押す。
  3. 通知メールは @k.koeki-u.ac.jp ドメインから送信されるので必要なら受信許可を出す。

プロジェクトマネジメント

複数人で協力して一つのRubyプログラムを作成し発表準備を行うという計画(プロジェクト)を納期内に達成するためには、明確な目標とそれを実現するのに必要な作業のスケジュール、そして進捗状況の管理(マネジメント)が必要である。プロジェクトの管理はプロジェクトマネージャーの主な役割になる。プロジェクトマネジメントの流れを簡単にまとめると、以下の通りである。

  1. 目標設定
  2. 必要な作業の特定と分解
  3. 作業スケジュールの作成*
  4. 進捗状況の管理*

*スケジュールの作成と管理は全員で共有するガントチャートを用いると効率的になる。

プロジェクトマネジメントについてもっと詳しく:プロジェクトマネジメントについて(山本先生のページ)


Webページについて

作成したプログラムを紹介するWebページを作成し ~/public_html/ 内のどこかに置くこと。Webページの書き方についてはWebページ作成の基礎を参考にし、emacsなどを用いて作成する。

内容:

ヒント:他人に作られたページのHTMLを参考にしたい場合はFirefoxでページに右クリックし、「View Page Source」を選ぶ。ページの一部を選んで、その部分のみのHTMLを覗くこともできる(「View Selection Source」)。

プログラム紹介のWebページの例:

架空のプログラム「Five Seconds!!」(神田先生のページ)

架空のプログラム「NumberMagiQ」(広瀬先生のページ)

「Battle Game」(先輩達の作品)

「PKゲーム」(先輩達の作品)

「漢字検定」(先輩達の作品)


作品のプレゼンテーション

第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("おはようございます!")

本日の課題


目次