#usr/bin/env ruby
# -*- coding: utf-8 -*-
require 'csv'
require 'io/console'
require 'io/console/size'
require 'timeout'

puts("虫見分けゲーム!")
puts("虫の写真が表示されます。")
puts("その虫が外来種か絶滅危惧種か固有種か見分けて、その箱に入れてください")
puts("正しい箱に入れられたら+1ptです。")
puts("実行するウィンドウはmltermで、なるべく大きくしておこう")
puts("準備はいい?(Enter)")
print(">>")
gets
def byouga(y,box,r_mushi,a,tate,yoko)
  system("clear")
  print("\e[1;1H")
  printf("\e[30;47m%s[%s]\n\e[m",r_mushi["和名"],r_mushi["学名"])
  (tate/64*49-1).times{print(("|"+" "*a)*3,"|\n")}
  print("\e[#{tate/64*49};1H")
  (tate/64*16-2).times{print(("@"+" "*a)*3,"@\n")}
  puts("@"*(3*a+4))
  print("\e[#{tate/64*65-2};#{a*0+2}H\e[30;47m外来種\e[#{tate/64*65-2};#{a*1+3}H絶滅危惧種\e[#{tate/64*65-2};#{a*2+4}H固有種\e[m")#tate/64*49-1+tate/64*16-2+1=tate/64*65-2
  print("\e[#{tate/64*65-1};1H<説明>\n",r_mushi["説明"])
  print("\e[#{y*1+2};#{box*a+2+box}H")
  system("img2sixel #{r_mushi["写真"]}")
end
def kekka(box,seikai,a,r_mushi,point)
  system("clear")
  print("\e[1;1H<結果発表!!>\n")
  sleep(1)
  printf("\e[47m%s\e[m\n",box==seikai ? "\e[31m正解!" : "\e[34m不正解…" )
  system("img2sixel #{box==seikai ? "mark_maru.png" : "mark_batsu.png" }")
  print("\e[2;46H#{r_mushi["和名"]}[#{r_mushi["学名"]}]は#{r_mushi["状態"]}でした。\e[3;46H")
  system("img2sixel #{r_mushi["写真"]}")
  puts("\e[38;1H<説明>\n#{r_mushi["説明"]}")
  puts("<分布地域画像>")
  system("img2sixel #{r_mushi["分布地域画像"]}")
  puts("灰色…絶滅\n赤色…絶滅危惧I類\nオレンジ…絶滅危惧II類\n黄色…準絶滅危惧種\n水色…情報不足") if r_mushi["状態番号"]=="1"
  print("説明文は#{r_mushi["説明出典"]}\n画像は#{r_mushi["画像出典"]}(横のpxが300になるようにアスペクト比を変えずに拡大・縮小しました。)")
  puts("\n現在のポイント:#{point}pt")
  return (box==seikai ? 1 : 0 )
end
mushi=CSV.read("虫データ.csv",:headers => true)
mushi_num=Array.new(mushi.length){|n| n }
tate,yoko=IO::console_size
a=(yoko-1)/4-1
point=0
while mushi_num.length>0
  r=rand(mushi_num.length)
  #r=20
  r_mushi=mushi[mushi_num[r]]
  y=0
  box=0 #0:外来種,1:絶滅危惧種,2:固有種
  byouga(y,box,r_mushi,a,tate,yoko)
  while true
    byouga(y,box,r_mushi,a,tate,yoko)
    break if y==tate/64*65-2-r_mushi["写真サイズ"].to_i-2
    begin
      Timeout.timeout(0.5){
        key=STDIN.getch
        if key=="\e"&&STDIN.getch=="["
          key=STDIN.getch
          if key=="B" #↓
            break if y==tate/64*65-2-r_mushi["写真サイズ"].to_i-2
            y+=1
          elsif key=="C" #→
            if box==2
            else
              box+=1
            end
          elsif key=="D" #←
            if box==0
            else
              box-=1
            end
          end
        elsif key=="\C-c"
          exit
        end
      }
    rescue Timeout::Error
      y+=1
    end
  end
  sleep(0.5)
  mushi_num.delete_at(r)
  point+=kekka(box,r_mushi["状態番号"].to_i,a,r_mushi,point)
  print("次の問題に行く?(yes:Enter no(中断):Ctrl+c)\n>>")
  gets
end
