#!usr/bin/env ruby
# -*- coding: utf-8 -*-
require "csv"
require "rmagick"
require "curses"
include Curses
init_screen
def output(word,x,y)
setpos(x,y)
addstr(word)
refresh
end
quiz_key_ary = []
quiz_key_value = []
quiz_choice = []
quiz_choice_all = []
quiz_explanation = []
quiz_picture = []
quiz_csv = CSV.read("quiz.csv",:headers => true)
quiz_csv.each{|row|
quiz_key_ary << row["クイズ"]
quiz_key_value << row["答え"].to_i
quiz_choice << "1:#{row["選択肢 1"]}"
quiz_choice << "2:#{row["選択肢 2"]}"
quiz_choice << "3:#{row["選択肢 3"]}"
quiz_choice_all << quiz_choice
quiz_choice = []
quiz_explanation << row["解説"]
quiz_picture << row["写真"]
}
ary = [quiz_key_ary,quiz_key_value].transpose
quiz_hash = Hash[*ary.flatten]
output("豆知識クイズ",1,5)
sleep(3)
output("いろんな豆知識についてのクイズが出題されるよ。",3,1)
sleep(3)
output("上下キーで操作、左矢印キーで答え合わせ",5,1)
sleep(5)
clear
refresh
correct = 0
quiz_hash.length. times do
order = rand(quiz_hash.length)
srand()
output(quiz_hash.keys[order],1,1)
sleep(2)
x = 10
y = 3
for i in quiz_choice_all[order]
output(i,y,x)
y += 2
sleep(0.5)
end
begin
curs_set(0)
noecho
stdscr.keypad(true)
choice = 1
a = 5
b = 3
refresh
while true
setpos(b,a)
addstr(">>")
refresh
c = getch
setpos(b,a)
addstr(" ")
refresh
case c
when Curses::KEY_UP
if choice > 1
b -= 2
choice -= 1
end
when Curses::KEY_DOWN
if choice < 3
b += 2
choice += 1
end
when Curses::KEY_LEFT
sleep(3)
right_answer = quiz_hash.values[order]
if choice.to_i == right_answer
output("正解",9,1)
correct += 1
else
output("不正解",9,1)
end
sleep(1)
output("解説\n",12,1)
sleep(3)
output(quiz_explanation[order].to_s,14,1)
picture = Magick::ImageList.new(quiz_picture[order])
new_picture = picture.resize(0.25)
new_picture.write("new_picture.png")
picture = spawn "display -geometry +0+0 new_picture.png"
sleep(5)
Process.kill(:INT,picture)
clear
refresh
quiz_hash.delete(quiz_hash.keys[order])
quiz_explanation.delete_at(order)
quiz_choice_all.delete_at(order)
quiz_picture.delete_at(order)
break
end
end
ensure
close_screen
end
end
printf("正答数:%d/12\n",correct)
printf("正答率:%dパーセント",correct * 100 / 12)