roy > naoya > 基礎プログラミングII > (12)自由課題実施期間[2]
現時点でのグループの確定状況について示す。間違いがある場合は報告すること。
自由課題で作成したプログラムを聞き手が試してみたい場合、そのプログラムを自分でも作成する必要がある。
sample.rb
#!/usr/koeki/bin/ruby うんたらかんたら
というようにWebページ中に記載した場合、聞き手はemacsでファイルを新規作成してWebページに記載されたプログラムをコピーして貼り付けて保存する必要がある(これまで授業で行ってきた方式)。
これは実は面倒な方法である。
このようにハイパーリンクにしておけば、聞き手は右クリックをしてファイルを保存するだけで即座に実行できる。この方法について確認しておこう。
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コマンドを使ってkadaiディレクトリの中にあるファイルをまとめて圧縮し1つのファイルにしよう。圧縮しても元のディレクトリはなくならない。
%pan{c10xxxx} gtar vzcf kadai.tar.gz kadai[Return]
基本構造は以下の通り。
%pan{c10xxxx} gtar オプション 圧縮後のファイル名 圧縮するディレクトリ名[Return]
オプションはそれぞれ以下の意味を持つ。必ずつけると覚えよう。
生成された圧縮ファイルの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用のディレクトリに保存し、実行してみよう。
なお、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点。授業終了時までに提出する。提出要領は下記の通り。
Tips:emacsでの日本語入力のオンオフはCtrl-oです
Tips:Mewによるメールの送り方はMewコマンドを参照