roy > naoya > 基礎プログラミングI·情報検索 > (11)楽しいプログラムを作ろう > 補足
ここでは、楽しいプログラムや実用的なプログラムを作成する上で役に立つメソッドや構文を確認する。
#!/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])
#!/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
#! /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("反応時間は%3.2f秒でした\n",reaction_time)
#!/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
irsv{c10xxxx}% ruby banner.rb[Return] 1〜3の好きな数字を入力してください。 コンピュータが選んだ数字と同じならあなたの勝ち。 1[Return] # # ####### # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ####### ##### # # ### # # # # # # ## # # # # # # # # # # # # # # # # # # # # # # # # # # # ## ## ## ### # #
ktermで画像ファイルを表示させるコマンドであるdisplayコマンドをsystemコマンドと組み合わせて使用することで、プログラム実行中に画像を表示させることができる。
あらかじめ画像を作成しておき(以下のプログラムではimage001.png)、プログラムと同じディレクトリに保存しておく。実行すると、ktermとは別に新規のウィンドウがポップアップで出現し、画像が表示される。表示されたまま消えないので、消したい場合にはpkillコマンドを使用する。
#!/usr/koeki/bin/ruby print"1〜3の好きな数字を選んでください" number = gets.chomp!.to_i if number == 1 system 'display image001.png&' print"おめでとう\n" else print"残念\n" end sleep(3) system 'pkill display -U `whoami`'
ESCの後ろに決まった文字列を出力すると、画面制御や文字色の変更を行うことが出来る。これをエスケープシーケンスという。ESCはプログラム中では\eで表現できるので\eと組み合わせることになる。
ESC [XmのXの部分に以下の数字を指定することで、対応する色やスタイルが適用される。
Xの値 |
意味 |
Xの値 |
意味 |
---|---|---|---|
0 |
標準状態に戻す |
1 |
太字にする |
4 |
下線を引く |
7 |
反転文字にする |
30 |
文字色を黒に |
31 |
文字色を赤に |
32 |
文字色を緑に |
33 |
文字色を黄色に |
34 |
文字色を青に |
35 |
文字色を紫に |
36 |
文字色を水色に |
37 |
文字色を白に |
40 |
背景色を黒に |
41 |
背景色を赤に |
42 |
背景色を緑に |
43 |
背景色を黄色に |
44 |
背景色を青に |
45 |
背景色を紫に |
46 |
背景色を水色に |
47 |
背景色を白に |
文字色や背景色を同時に指定する場合は数字をセミコロンで区切ってつなげて指定する。
例:文字色を黄色(33)にする
printf("Hello \e[33mRuby\n")
例:背景色を水色(46)にしてアンダーライン(4)を引く
printf("Hello \e[4;46mRuby\n")
これらの設定をすると次の行以降も全部同じ色になるのでESC [ m を出力して文字の属性を元に戻す。
printf("\e[m\n")
画面消去やカーソルを移動するエスケープシーケンスについて示す。
並び |
意味 |
例 |
---|---|---|
ESC[2J |
画面消去 |
printf("\e[2J") |
ESC[y;xH |
y行x桁目に移動 |
printf("\e[%d;%dH", y, x) |
ESC[nA |
n行上移動 |
printf("\e[%dA", n) |
ESC[nB |
n行下移動 |
printf("\e[%dB", n) |
ESC[nC |
n桁右に移動 |
printf("\e[%dC", n) |
ESC[nD |
n桁左に移動 |
printf("\e[%dD", n) |