close
update:
1. 增加了分數計算模式,可以自訂幾分結束測驗
     但答錯時分數自動歸零
2. 把音程名稱陣列套進去了,但目前還沒用到。
    (光想大三小三和弦的例外就有得搞的了…)
3. 把程式寫的好看一點點了,把def先拿掉了,還是不會用proc.

下版想新增的功能:

1.  其它的音程(依序為完全四度、大小三度………)
     ps:一度八度是放好看的…這種英打功能應該沒人要吧…
 
2. GUI化…吧…

電腦裡沒裝ruby,想要exe檔的,我在想辦法放上來吧。
有什麼需要的新功能或是建議也歡迎多多指教~


#interval testing program v.0.2
#written by juls

keys = ['Bb','B','B#','Cb','C','C#','Db','D','D#','Eb','E',
       'E#','Fb','F','F#','Gb','G','G#','Ab','A','A#']

extraKeys = keys + ['F##','Bbb']

rightAns = 0
answer = 'a'
puts 'How many questions would you like to do? '
puts 'a. 5 questions'
puts 'b. 12 questions'
puts 'c. 24 questions'
role = gets.chomp

if role == 'a'
rolenum = 5
elsif role == 'b'
rolenum = 12
elsif role == 'c'
rolenum = 24
else
puts 'Please enter a valid option'
end
while rightAns < rolenum and answer.upcase != 'Q'

keyRandNum = rand(21)
keyRand = keys[keyRandNum]
udArray = ['above','below']
udRandNum = rand(2)
udRand = udArray[udRandNum]

interval= 5
soundNumClac = ((21*udRandNum - (interval-1)*3).abs + keyRandNum)
puts ''

intervalArray = ['Union & Octave','Major and minor 2nd','Major & minor 3rd',
                 'Perfect 4th','Prefect 5th','Major and minor 6th',
                 'Major and minor 7th']
intervalName = intervalArray[(interval-1)]

puts 'What is the ' + intervalName + ' ' + udRand + ' the key ' + keyRand + ' ?'
puts '(Enter [Q] to quit the test.)'

answer = gets.chomp

    if    udRandNum == 0 and keyRandNum == 0
    soundNum = (soundNumClac + 1)%21
       
    elsif udRandNum == 0 and keyRandNum == 1
    soundNum = (soundNumClac + 1)%21
         
    elsif udRandNum == 0 and keyRandNum == 2
       keys = extraKeys
    soundNum = 21
           
    elsif udRandNum == 1 and keyRandNum == 12
    keys = extraKeys
    soundNum = 22
           
    elsif udRandNum == 1 and keyRandNum == 13
    soundNum = (soundNumClac - 1)%21
   
    elsif udRandNum == 1 and keyRandNum == 14
    soundNum = (soundNumClac - 1)%21

    else
    soundNum = soundNumClac%21
    end
   
correctNote = keys [soundNum]   

if answer.upcase == 'Q'
   STDOUT.flush
   puts 'Goodbye!'
   
else

    if answer.upcase == correctNote.upcase
    rightAns = rightAns + 1
     if rightAns <= 1
     point = 'point'
     else
     point = 'points'
     end
    puts 'Correct! Your got ' + rightAns.to_s + ' ' + point +' now.'
   
    else
    puts ''
    puts 'Nooop, The Correct answer is "' + correctNote + '"'
    puts 'Sorry, your score have back to ZERO. >_<'
    rightAns = 0
    end
end
end

if rightAns == rolenum
puts 'Congradulation! You have pass the test!! ^___^'   
end


arrow
arrow
    全站熱搜

    juls 發表在 痞客邦 留言(0) 人氣()