roy > naoya > 基礎プログラミングII・情報表現[月1] > (11)自由課題実施期間[1]&trr

(11) 12/17の授業内容:自由課題実施期間[1]&trr

trr

授業開始直後より20分間trrの試験を行う。150点で1点。以降25点ごとに1点加点で、最大5点まで。つまり250点以上は何点でも5点となる。

出席、レポート、trrの合計得点により試験免除者を決定する。発表は1月に入ってからであり、出席は免除者発表の直前までの状況を全て加味する。未提出のレポートがある場合は早めに提出すること。また、採点結果が戻ってきていない課題がある場合は今年中に申し出ること。

20分経過後、念のためこの間にマークした最高得点をメールで報告してください。

  • 提出先:naoya@e.koeki-u.ac.jp
  • メールのSubject:trr
  • 本文の構成:1行目で学籍番号、氏名を記載する。2行目に得点を記載する。

自由製作課題について

これまでは一人で限られた時間の中でプログラムを作成してきたため、規模の大きなものを作成することが難しかった。1年間続いたRubyの授業もそろそろ終わりを迎えようとしている。そこで、これまで学んだ技術を駆使して、グループで長めのプログラムを作ってみよう。

作成条件は以下の通りとする。

  1. プログラムを作成し、Webページに掲載する。
  2. 発表会では、Webもしくはプレゼンテーションソフトを用いてプログラムの概要を説明し、デモも実施する。
  3. 発表時間は10分とする(グループ数が確定した段階で正式に定める)。

参考までに過去の自由製作課題の例を示す。

2007年度(前期)自由製作課題

2006年度(後期)自由製作課題

2005年度(後期)自由製作課題

今後の予定

本日の後半より自由製作課題を実施する。5〜6人のグループで規模の大きなプログラムを作成する。以降の予定は以下の通りである。

  • 12月17日
    • 楽しいプログラムを作るためのテクニック
    • 自由課題グループ分け
    • グループ名の決定
    • 役割分担の決定
    • 作成するプログラム(案)の検討
  • 1月21日
    • 作成するプログラムの決定
    • Webページの構成の決定
    • プログラムおよびWebページの作成を開始
  • 補講期間
    • プログラムの完成
    • Webページの完成
    • 発表方法の検討
    • 発表練習
  • 1/28
    • 自由課題発表会

本日の作業内容

役割分担を決める。その上で何をいつまでにやるのかを相談する。役割としては例えば以下がある。

  • プログラム作成
  • Webページ作成
  • プレゼンファイル作成
  • Webページ素材(図やロゴ)作成
  • 当日の発表役

「応援」や「遊軍」、「パシリ」などの実質的に仕事のない役割は定めず、各人が何かしらグループ活動に貢献できるように分担を考えること。

役割分担が決まったら、作成するプログラムやWebページのイメージ、作成する画像などについて相談し、早速作成に取り掛かること。

ドロー系ソフトTgifを使ってみよう

本日取り上げるTgifはドロー系のソフトである。前回のGIMPはペイント系ソフトと呼ばれる。GIMPは筆を使って塗る要領で、画像を加工するのに対して、ドロー系ソフトのTgifは線や四角、円などの図形を組み合わせて図形描画を行う。パワーポイントで図形を描画するのと同じ要領である。

起動と終了

ktermで

irsv{c10xxxx}% tgif &[Return]

終了はtgif画面でCtrl-qまたは、メニューバーのFileからQuit

メニュー

  • 左ボタン → オブジェクトの選択
  • 中ボタン → 編集機能全般メニュー(上に並ぶメニューの統合版)
  • 右ボタン → 作図メニュー(tgifウィンドウ左のものと同じ)
  • グリッド (Alt-d, Alt-i)
  • カット・コピー (C-x, C-v)
  • グループ・アングループ (C-g, C-u)
  • プリントアウト (C-p)
  • 保存 (C-s)

tgifのメニュー構成

もっと詳しい使い方は、Googleで「tgif 使い方」で検索して調べてみよう。

日本語を入力する方法

左側の作図ツールでT(Text)を選び、ドローエリア内の文字を配置したい場所をクリックする(後で移動できるので適当な位置でよい)。その後Ctrl-SPCを押すと、knput2(日本語入力窓)が起動する。アルファベットを先に入力してしまうと英語フォントに切り替わってしまい、Ctrl-SPCを押してもkinput2が起動しない。うまくいかない場合は、Fontメニューで日本語フォントであるRyuminかGothicを選択してからCtrl-SPCを押す。なお、Fontメニューはドローエリア内でマウスの中ボタンをクリックすると出現する。

日本語入力のOFFは、SHIFT+SPC

Ctrl+SPCを押したときに

There is no Selection Owner of _JAPANESE_CONVERSION_

というエラーが出るときは、kinput2が落ちている。ktermから

irsv{C10xxxx}% kinput2 &[Return]

とすると、kinput2が使えるようになる。

tgifで作った画像をWebページに掲載する

作成した画像をWebページに掲載する場合、保存形式に注意する必要がある。単にFileから保存を選ぶとobj形式で保存される(拡張子が.objとなる)。この形式はtgifでしか開くことができず、Webでも表示されない。Webページに掲載する場合は、PNG形式やJPG形式で保存をする必要がある。FileメニューよりPrint/Export Formatを選び、PNGやJPEGを選択する。この後で、印刷(Ctrl-pもしくはFileメニューからPrint)を選ぶとPNG形式やJPEG形式で画像が保存される。保存をするために印刷というメニューを選ぶのがおかしな気がするが、印刷の出力先がプリンタではなくファイルということである。

上記操作を行ったら、ktermでlsし、保存をしたファイルが正しく生成されているか確認しよう。

プログラム内で画像を表示する

ktermでdisplayコマンドを利用すると、作成した画像ファイルをkterm上に表示することができる。

irsv{c10xxxx}% display filename.png&[Return]

Rubyのプログラム中でktermのコマンドを実行するsystemコマンドを利用すると、プログラム実行時に画像を表示させることができる。

Rubyのプログラム中でktermのコマンドを実行するsystemコマンドを利用すると、プログラム実行時に画像を表示させることができる。以下のプログラムでは、ハイパーリンクの3つの画像を表示することができるようになっている。3つの画像及びプログラムを全てruby用のディレクトリに保存し、実行してみよう。

enemy1.png

enemy2.png

enemy3.png

enemy.rb

なお、ktermのbannerコマンドは大きな文字を表示させるコマンドである。このプログラムではbannerコマンドも利用している。自由製作でも活用しよう。

#!/usr/koeki/bin/ruby

def enemy(x)
  if x == 2
    print "ついにラスボスの登場だ!\n"
    system 'display enemy3.png&'
  elsif x == 0
    system 'display enemy1.png&'
  else
    system 'display enemy2.png&'
  end
end

def damage()
  srand
  x = rand(10)+1
  return x
end

def bonus()
  srand
  x = rand(3)
  print "敵は宝箱をおとした\n"
  sleep(1)
  if x == 0
    print "しかし中身は空だった\n\n"
    return 0
  elsif x == 1
    print "薬草をみつけた! HPが20回復した\n\n"  
    return 20
  else
    print "ポーションをみつけた! HPが40回復した\n\n"
    return 40
  end
end

#----設定-------------------------
name = ["ぷよ","くるくる","ぴかぴか"]
option = ["石つぶて","さむいギャグ","バルス",]

attack = {
  "ぷよ" => ["ぷよアタック","ぷよボンバー","ぷよフラッシュ"],
  "くるくる" => ["くるくるビーム","くるくるサンダー","くるくるファイア"],
  "ぴかぴか" => ["ぴかぴかワンダフルボンバー","ぴかぴかオーバードライブ","ぴかぴかインフェルノ"]
}

hp_you = 200
turn = 0
#----------------------------------

print "名前を入力して下さい:"
you = gets.chomp!

sleep(1)

printf ("%sよ。街を救うのじゃ(以下略)!!\n\n",you)

sleep(1)

print ("敵を5匹倒せばあなたの勝ちです\n\n")

sleep(1)

while turn < 5
  srand
  encount = rand(2)
  
  if turn == 4
    encount = 2
  end

  printf ("%sが現れた!\n\n",name[encount])
  enemy(encount)
  
  sleep(2)

  srand
  hp_enemy = rand(20)+10
  
  while true
    0.upto(2) do |j|
      printf (" %d:%s\n",j+1,option[j])
    end
    
    your_choice = gets.chomp!.to_i
    
    sleep(1)

    printf ("よし%sだ!\n\n",option[your_choice-1])

    sleep(1)

    srand
    choice_of_enemy = rand(3)
    
    printf ("%sの攻撃:%s!\n\n",name[encount],attack[name[encount]][choice_of_enemy])
    sleep(1)

    if choice_of_enemy == your_choice - 1
      printf ("%s:いたーい!\n",name[encount])
      hp_enemy -= damage
      printf ("%sのHPは%dになった\n\n",name[encount],hp_enemy)
    else
      printf ("%s:いたーい!\n",you)
      hp_you -= damage
      printf ("%sのHPは%dになった\n\n",you,hp_you)
    end
    
    if hp_enemy <= 0
      system 'banner YOU WIN'
      hp_you += bonus
      sleep(2)
      break
    elsif hp_you <= 0
      print "あなたは負けてしまった\n"
      system 'banner YOU LOSE'
      exit(1)
    end
    sleep(1)
  end
  turn += 1
end

print "\nおめでとう!! これで街の平和は保たれた!\n"

出席課題

問題1(2点満点):グループのメンバー、チーム名、役割分担、作成するプログラムの案について報告する。グループの他のメンバーにお任せにしていないことを確認するため、グループの代表者のみではなく、全員が提出する。

問題2:これまでの累積得点があまり高くないと感じる人は、問題1に加えて、tgifでとっても素敵な絵を描いてpng形式で保存して添付ファイルで送る。提出点として別途3点を追加する。出来栄えにより芸術点をさらに加算することがある。

提出要領は下記の通り。

  • 提出先:naoya@e.koeki-u.ac.jp
  • メールのSubject(問題1):attend11
  • メールのSubject(問題2):課題8
  • 提出期限(問題1):授業終了時まで
  • 提出期限(問題2):1月20日(日)23:59まで

Tips:emacsでの日本語入力のオンオフはCtrl-oです

Tips:Mewによるメールの送り方はMewコマンドを参照