roy > naoya > 基礎プログラミングI·情報検索 > (10)楽しいプログラムを作ろう

(10) 07/02の授業内容:楽しいプログラムを作ろう

自由製作課題について

前期の授業も終盤に入り、4月当初では想像できないような難しいプログラムを書くことができるようになった。最後に、これまで学んだことを踏まえて自由に題材を選んでプログラムを作成してみよう。一人では負担が大きいので5名程度のグループを作り、アイデアを出し合いながら分担して作業を進めよう。

作成するもの

  1. プログラム
  2. Webページ(プログラムの説明書やプログラム本体を掲載)

今後の予定

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

役割分担について

役割分担を決め、何をいつまでにやるのか相談しよう。役割としては例えば以下があげられる。

  • プログラム作成
  • Webページ作成
  • Webページ素材(図など)作成
  • 当日の発表役

作成するプログラムの例

例えば以下のようなプログラムが考えられる。面白いものや実用的なものを作ってみよう。

  • 4択クイズ
  • ロールプレイングゲーム
  • 対戦型ゲーム
  • 一番安い送料を調べるプログラム

その他のプログラムとして、昨年度までの自由課題で作成されたプログラムを確認してみよう(広瀬先生のページ)。

出席課題

決定したグループのメンバー、グループ名、役割分担、プログラムの案など決まったところまで報告する。

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

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

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

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

プログラムを楽しくするテクニック

乱数の発生

#!/usr/koeki/bin/ruby

hoi = ["上","下","右","左"]

srand
comp=rand(4)

STDERR.print "あっちむいてほい!(0: 上,1: 下,2: 右,3: 左) :"
user = gets.chomp!.to_i

printf ("あなたは %s でした \n", hoi[comp])
printf ("わたしは %s でした。\n", hoi[user])
  • rand(4):4未満の整数(0、1、2、3)からランダムな値を返す
  • srand:乱数発生の種を作る。これがないとrandで毎回同じ値が出てきてしまう

少し間を空ける

#!/usr/koeki/bin/ruby

print "爆弾の解体だ!最後に二本のコードが残された。\n"
print "どちらを切る?\n"
print "0:赤、1:青\n"
bomb = gets.chomp!.to_i
sleep(2)
print "よし!切るぞ!\n"
sleep(1)
print "チョキッ\n"
sleep(1)
srand
target = rand(2)

if bomb == target
  print "解体成功!!\n"
else
  print "ドカーン!!\n"
end
  • sleep(1):次の行に進むまでに1秒間停止する。sleep(2)なら2秒間停止する。

時刻を取得する

#! /usr/koeki/bin/ruby
list = ["赤","黄","青"]

print "あなたの反応時間を計測します。準備は良いですか(y or n)"
junbi = gets.chomp!

if junbi == "y"
  sleep(1)
  print "赤と表示されたら1、黄なら2、青なら3を押してください。\n"
else
  print "そうですかさようなら\n"
  exit(1)
end

sleep(1)

srand
color = rand(3)
print "\n"
printf ("%s\n",list[color])

start = Time.now

choice = gets.chomp.to_i

reaction_time = Time.now - start
printf ("表示されたのは%s、あなたの回答は%s\n",
list[color],list[choice-1])

if color == choice-1
  print "正解です\n"
else
  print "はずれです\n"
end

printf ("反応時間は%s秒でした\n",reaction_time)
  • Time.now:現在時刻を返す。2地点で現在時刻を取得し、差をとると経過時間を調べることができる。このプログラムでは刺激提示直後と反応直後の時刻の差を取って反応時間としている。
  • exit(1):プログラムを強制終了する。

大きな文字を出す

#!/usr/koeki/bin/ruby

print "1〜3の好きな数字を入力してください。\n"
print "コンピュータが選んだ数字と同じならあなたの勝ち。\n"
number = gets.chomp!.to_i

srand
comp = rand(3) + 1

if number == comp
  system 'banner YOU WIN'
else
  system 'banner YOU LOSE'
end

ktermのbannerコマンドは大きな文字を表示させるコマンドである。system 'banner hoge'でhogeを大きく表示する。

irsv{naoya}% ruby banner.rb[Return]
1〜3の好きな数字を入力してください。
コンピュータが選んだ数字と同じならあなたの勝ち。
1[Return]

#     # ####### #     #
 #   #  #     # #     #
  # #   #     # #     #
   #    #     # #     #
   #    #     # #     #
   #    #     # #     #
   #    #######  #####


#     #   ###   #     #
#  #  #    #    ##    #
#  #  #    #    # #   #
#  #  #    #    #  #  #
#  #  #    #    #   # #
#  #  #    #    #    ##
 ## ##    ###   #     #