roy > naoya > 基礎プログラミングII > (12)自由課題実施期間[2]

(12) 01/19の授業内容:自由課題実施期間[2]

グループの確定状況

現時点でのグループの確定状況について示す。間違いがある場合は報告すること。

1限

  • tosty
    佐藤希美、照井美里、小倉嗣亮、吉田純、高橋理沙
  • 無着アリ
    無着隆司、鹿野徹、中川広大、海藤青葉、鈴木真人、菅原一訓
  • 発汗ガッチャマンズ
    木村伸伍、長谷川寛、阿部芳彦、今井克輔、佐藤遼、新宮誠
  • カンゴール
    相蘓剛宏、蒲生田敬輔、川井理恵、須藤拓、佐藤美智子、伊藤雅國
  • To一屋
    榎本峻、嵯峨隆仁、安田悠、高橋宏聡、今野恵太、鏡祥太
  • 一人っ子(仮)
    工藤禎弥

2限

  • 公益のガリレオ
    斎藤良祐、原周、劉シン、庄司幸平、武田裕斗、四戸佑輔
  • ムツゴロウ
    加藤愛、亀井鈴加、齋藤麻由、真田美穂、松田沙織、丹治恵
  • 食べれません。
    佐藤直也、菅原啓太、渡辺祥央、藤畑康宏、村上淳之介
  • コンビニ
    池田章宏、白幡徳明、木村智也、市川学、大沼雅裕
  • こうちゃん's
    石川展弘、柿崎孝輔、今翔平、中條佑基、前田啓太
  • たわらとプー之丞
    新山奈採、江渡美香、奥泉佳子、加藤さち、鈴木悠花
  • 神田☆parents
    高橋宏市郎、伊東一成、沼澤龍樹、加茂みづ恵、佐藤康平

プログラムのダウンロードについて

自由課題で作成したプログラムを聞き手が試してみたい場合、そのプログラムを自分でも作成する必要がある。

sample.rb

#!/usr/koeki/bin/ruby

うんたらかんたら

というようにWebページ中に記載した場合、聞き手はemacsでファイルを新規作成してWebページに記載されたプログラムをコピーして貼り付けて保存する必要がある(これまで授業で行ってきた方式)。

これは実は面倒な方法である。

sample.rb

このようにハイパーリンクにしておけば、聞き手は右クリックをしてファイルを保存するだけで即座に実行できる。この方法について確認しておこう。

プログラムファイルの移動

Webページとして表示したり、ブラウザからダウンロードできるようにするためには、そのファイルを~/public_htmlというディレクトリの中においておく必要がある。

これまで慣例としてプログラムはrubyディレクトリに保存しておいたので、DLできるようにするためにはpublic_htmlディレクトリに移動(コピー)しておく必要がある。

移動はmvコマンド、コピーはcpコマンドを使用する。ここではpublic_htmlディレクトリにコピーする方法を確認しよう。

%pan{c10xxxx} cp sample.rb ~/public_html[Return]

~/をつけることで絶対パス指定となる。相対パス指定の場合は、元のファイル(sample.rb)が保存されている場所により指定方法が異なる。

ハイパーリンクをつける

ハイパーリンクを書くのはa要素(<a>タグ)である。

<a href="ファイル名">Web上に表示するテキスト</a>

と書けばよい。少し上のほうでDLできるようになっていたsample.rbのハイパーリンクは次のように書かれている。

<a href="sample.rb">sample.rb</a>

複数のファイルをまとめる

プログラムを作成し、Webページ担当者に渡す場合はmewでメールを送る際にファイルを添付すればよいが、ファイルが複数ある場合はいちいち添付するのが面倒な場合がある。

また、Webページからユーザにファイルをダウンロード(DL)してもらう場合、複数ファイルをDLする必要があるならば、いちいち1つずつDLするのは大変である。このような場面を想定し、複数ファイルを圧縮して1ファイルにまとめる方法を確認しておこう。

ディレクトリのファイルをまとめる

1つのディレクトリに圧縮したいファイルをまとめておこう。移動したければmvコマンド、コピーしたければcpコマンドを使用する。いずれの場合もmkdirコマンドで事前にディレクトリを作製しておく必要がある。

ここではkadaiというディレクトリを作り、そのディレクトリの中にファイルをコピーする方法を確認しよう(移動ならcpをmvに変更する)。

%pan{c10xxxx} mkdir kadai[Return]
cp file1 kadai[Return]
cp file2 kadai[Return]
cp file3 kadai[Return]

ファイルを1つずつコピーするかわりに、一度にコピーすることもできる。

%pan{c10xxxx} mkdir kadai[Return]
cp file1 file2 file3 kadai[Return]

gtarコマンドで圧縮する

gtarコマンドを使ってkadaiディレクトリの中にあるファイルをまとめて圧縮し1つのファイルにしよう。圧縮しても元のディレクトリはなくならない。

%pan{c10xxxx} gtar vzcf kadai.tar.gz kadai[Return]

基本構造は以下の通り。

%pan{c10xxxx} gtar オプション 圧縮後のファイル名 圧縮するディレクトリ名[Return]

オプションはそれぞれ以下の意味を持つ。必ずつけると覚えよう。

  • v:作業過程を表示する
  • z:圧縮する
  • c:アーカイブファイルを作る(create)
  • x:アーカイブファイルから取り出す(eXtract)
  • f:次の引数をファイル名とする

生成された圧縮ファイルのkadai.tar.gzを添付ファイルとして送ったり、DLしてもらう。

圧縮ファイルの解凍

圧縮ファイルはそのままでは中のファイルを使えないので、同じくgtarコマンドを使って元の状態に戻す(解凍する)。

この場合はオプションにc(create)の代わりにx(eXtract)をつける。

%pan{c10xxxx} gtar vzxf kadai.tar.gz[Return]

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

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

pan{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]作成するプログラムの概要、[3]自分の 担当と進捗状況、[4]その他質問など、について報告する。

次年度TAをしてくれる人を募集します。推薦したい人、やらせたい人、やってみたい人、やっても良いと思う人、とりあえず話を聞いてみたい人、名乗り出るつもりはないが誘われたらやっても良い人は、出席メールにその旨をあわせて記載してください。

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

  • 提出先:課題提出用メールアドレス
  • メールのSubject:attend12
  • 本文の構成:1行目で学籍番号、氏名を記載する。2行目以降に[1]から[4]まで記載する。

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

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