課題
授業で学習したトピックを網羅する必要はありません. タートルグラフィクスを利用したプログラム,利用しないプログラム, GUIを備えたプログラム,そうでないプログラム,いずれでも構いません. また授業で扱っていないトピックを含んでいても構いません.
目次
作成するプログラムの説明
次の項目を含んだ説明文を必要事項とともにプログラムの先頭に入れて下さい.
- プログラムの概要(何をするプログラムか)
- プログラムの使い方,操作法
- プログラムを作成した動機,発想のきっかけなど
- プログラムのアピールポイント.工夫した点(技術面,内容面)など
- プログラムの自己評価
- 改良したい点(さらに時間があればどうしたいか)
この説明文は次のように=begin...=endの間に必要事項に続いて記述して下さい.
=begin
所属:
氏名:
学生番号:
概要:
操作法:
動機:
アピールポイント:
自己評価:
改良すべき点:
=end
技術情報
以下では自由制作で使う可能性のある技術要素をいくつか紹介します.
Rubyの公式マニュアルも示しておきます.
- Ruby公式マニュアル(3.0)
ハッシュ
ハッシュ(Hash)は,「キー」と「値」を対応させた構造をもっていて, キーによって,それに対応させた値を参照することができます. ハッシュは整数以外の値を添字とする配列のように使えます.
# ハッシュの定義
ccode = { :black=>0,:white=>1 }
# ハッシュの要素の参照
ccode[:black] # ==> 0
ccode[:white] # ==> 1
# 要素の追加
ccode[:red] = 2
ccode[:red] # ==> 2
# 値が存在しないキーに対してはnilが得られる
# (別の値が得られるように設定することも可能)
ccode[:blue] # ==> nil
ccode.each_pair do |key,val| # 各要素についてのイテレータ(each_pairでなくてeachでも同じ)
puts "#{key} #{val}\n"
end
# ==>
# black 0
# white 1
# red 2
詳細についてはRuby公式マニュアルの「Hash」を参照してください.
メソッドのさまざまな引数定義
Rubyのメソッドの引数はさまざまなスタイルで定義できます. 以下では例を紹介します. 他にもキーワード引数,ブロック引数なども定義できますが,ここでは省略します. 詳細は Ruby公式マニュアルの「クラス/メソッド定義」を参照して下さい.
可変個の引数をとるメソッドの定義
可変個の引数をとるメソッドを定義できます. (基本的な定義の方法として)最後の引数に*をつけると,残りの引数を全てまとめて一つの配列として受け取ります.
# 1個以上の引数をとる def foo(x,*y) s = 0 y.each do |v| s = s + v end s*x end foo(2,1,5,3) # ==> x=2,y=[1,5,3], (1+5+3)*2 ==> 18
メソッドの引数のデフォルト値の定義
メソッドの引数に対して, デフォルト値(指定を省略したときの値)を予め定義しておくことができます.
def bar(x,y=2) # yのデフォルト値=2 x**y end def baz(x,y=3,z=4) # yのデフォルト値=3,zのデフォルト値=4 (x**y) % z end def ban(a=nil) (a == nil) end bar(2,3) # ==> 8 (x=2,y=3) bar(4) # ==> 16 (x=4,y=2) baz(3,5,7) # ==> 5 (x=3,y=5,z=7) baz(3,5) # ==> 3 (x=3,y=5,z=4) baz(5) # ==> 1 (x=5,y=3,z=4) ban() # ==> true (a=nil) ban(true) # ==> false (a=true)
デフォルト値付きの引数は(可変個引数の指定を除いて)最後にまとめて指定するのが基本です.
配列の展開
メソッドの引数などで配列を要素の列に展開して利用することができます.
def add(x,y) x+y end s = [3,5] a = add(*s) # a = add(3,5) == 8 t = [1,*s] # t == [1, 3, 5]
乱数
プログラムにランダム性を取り入れるにはrandメソッドを利用します.
# rand(n) nが正の整数のとき,0〜n-1のいずれかの整数をランダムに返す.
# rand(0) 0以上1未満の小数点数をランダムに返す.
b = rand(2) # b ∈ {0,1}
x = rand(0) # 0≦x<1
# rand(a..b) a,bが正の整数でa≦bのとき,a以上b以下の整数をランダムに返す.
m = rand(1..3) # m ∈ {1,2,3}
GUIライブラリ(Gtk2)
この授業のタートルグラフィクス,ReversiのGUIを構築するのに利用しているGUIライブラリがGtk2です.
サンプルプログラムを用意しています.