Newer
Older
Ruby / eigo.rb
@SATO Kenjiro SATO Kenjiro on 18 Jan 2023 3 KB 2023-01-18 18:43:05
# coding: utf-8

#このプログラムのテーマは英語が苦手な人のための英単語を覚えるプログラムです。
#このプログラムを作るきっかけは友達が英単語を覚えるのが苦手と言っていたのと、自分も英単語を覚えるのが苦手なので、そんな人でも英単語を覚えられるプログラムがあれば便利だと思ったからです。
#このプログラムには英和辞典、和英辞典、確認テスト、メモ帳の4つの機能があります。英和辞典、和英辞典では一文字でもマッチするものを表示できます。確認テストではランダムで10問の問題が出るので、順番で英単語を覚える、ということもありません。メモ帳は自分の苦手な英単語をメモするなど、自分だけのメモ帳を作れるので、特に苦手な部分を絞ることができます。
#このプログラムを使ったら、かなり英単語を覚えることができました。
#このプログラムだと確認テストの範囲が広いのでメモ帳でメモした英単語をピンポイントでクイズとして出せないので、その点はまだ改良の余地があると思っています。
#他のプログラムの案として、cursesを使って写真や画像を出力すればカーナビのようなものが作れるのかなと思いました。

require'curses'
include Curses

require 'csv'
words = CSV.read("new2.csv", headers:true)
note = CSV.read("memo.csv", headers:true)

init_screen
cbreak

begin
    setpos(0,0)
addstr(sprintf(<<~home)
メニュー
1.英和辞典  2.和英辞典 3.確認テスト 4.メモ帳 
home
      )
menu = getstr
if menu == "1"
   setpos(3,0)
   addstr(sprintf("検索(一部でもOK)"))
   ptn = Regexp.new(getstr)
     words.each do |row|
       if ptn =~ row["en"]
       addstr(sprintf("[%s]の意味は[%s]です。\n",row["en"],row["jp"]))
     refresh
       end
     end
elsif menu == "2"
  setpos(3,0)
   addstr(sprintf("検索(一部でもOK)"))
   ptn = Regexp.new(getstr)
     words.each do |row|
       if ptn =~ row["jp"]
       addstr(sprintf("[%s]の単語は[%s]です。\n",row["jp"],row["en"]))
     refresh
       end
     end
 elsif menu == "3"
   n = 0
   while n <= 10
     x = rand(words.length)
     setpos(6,0)
     addstr(sprintf("確認テストをします。英語の綴りを正しく入れてください。"))
     setpos(7,0)
   addstr(sprintf("%s=>\n",words[x]["jp"]))
          refresh
          l = getstr
          setpos(8,0)
          addstr(sprintf("%sといれました。正解は[%s]\n",l,words[x]["en"]))
          refresh
          n+=1
   end
 elsif menu == "4"
   addstr(sprintf(<<~memo)
メモ帳を開きます。
何をしますか?
1.メモを確認 2.メモを追加
memo
         )
memo = getch
   if memo == "1"
     setpos(3,0)
     addstr(sprintf("メモを表示します"))
     refresh
     note.each do |row|
       addstr(sprintf("%s=>%s\n",row["en"],row["jp"]))
       refresh
     end
     elsif memo == "2"
       setpos(7,0)
       addstr(sprintf("足したい英単語:"))
       refresh
       eng = getstr
       addstr(sprintf("意味:"))
       refresh
       jpn = getstr

       CSV.open("memo.csv","a") do |c|
         c << [eng,jpn]
       end
     end
end
      close_screen
end