10/14:
居然有人來看,解釋一下這是什麼鬼好了。
基本上這是一個跟音樂/樂理有關的超簡陋小程式,
大家都知道的DoReMiFa...Si就是C D E F G A B,
那C的向上完全五度是G,向下完全五度是F(因為F -> G -> A -> B -C)
那B的向上完全五度是什麼? 正確答案是F#
(如果不懂的話看一下鋼琴鍵盤,完全五度是7個半音
所以B#的上完全五度就是F##)
這個程式會隨機出題,要你回答某個音的向上完全五度是什麼這樣。
(當然你也可以選完全四度的考題,不過我還懶得去寫混合考題的功能)
要連續答對一定的題數就會結束程式了。
不過有下面這段程式碼也沒辦法直接執行,因為它是用Ruby寫的。
過些日子想辦法把轉好的程式丟上來吧。就醬。
update:
1. 增加了Perfect 4th的功能
2. 把沒意義的元素修掉一點了
bug:
1. 問題數&問題類形 這兩題答錯就會跳出程式
future function:
1. 先GUI化吧
2.把bug修掉
3. 其它音程(大小三度next)
#interval testing program v.0.3.1
#written by juls
# 00 01 02 03 04 05 06 07 08 09 10
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.downcase
if role == 'a'
rolenum = 5
elsif role == 'b'
rolenum = 12
elsif role == 'c'
rolenum = 24
#else
end
intervalArray = ['Major and minor 2nd','Major & minor 3rd',
'Perfect 4th','Prefect 5th','Major and minor 6th',
'Major and minor 7th']
puts "Perfect 5th & Perfect 4th test is Available now."
puts "Which interval test would you like to do?"
puts "(please input number 5 or 4)"
interval = gets.chomp.to_i
intervalName = intervalArray[(interval-2)]
while rightAns < rolenum and answer.upcase != 'Q'
keyRandNum = rand(21)
keyRand = keys[keyRandNum]
udArray = ['above','below']
udRandNum = rand(2)
udRand = udArray[udRandNum]
if interval == 5
soundNumClac = ((21*udRandNum - (interval-1)*3).abs + keyRandNum)
puts ''
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
elsif interval == 4
soundNumClac = ((21*udRandNum - (interval-1)*3).abs + keyRandNum)
puts ''
if udRandNum == 0 and keyRandNum == 12
keys = extraKeys
soundNum = 22
elsif udRandNum == 0 and keyRandNum == 13
soundNum = (soundNumClac - 1)%21
elsif udRandNum == 0 and keyRandNum == 14
soundNum = (soundNumClac - 1)%21
elsif udRandNum == 1 and keyRandNum == 0
soundNum = (soundNumClac + 1)%21
elsif udRandNum == 1 and keyRandNum == 1
soundNum = (soundNumClac + 1)%21
elsif udRandNum == 1 and keyRandNum == 2
keys = extraKeys
soundNum = 21
else
soundNum = soundNumClac%21
end
correctNote = keys [soundNum]
puts ''
puts ''
puts 'What is the ' + intervalName + ' ' + udRand + ' the key ' + keyRand + ' ?'
puts '(Enter [Q] to quit the test.)'
answer = gets.chomp
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
end
if rightAns == rolenum
puts 'Congradulation! You have pass the test!! ^___^'
end
居然有人來看,解釋一下這是什麼鬼好了。
基本上這是一個跟音樂/樂理有關的超簡陋小程式,
大家都知道的DoReMiFa...Si就是C D E F G A B,
那C的向上完全五度是G,向下完全五度是F(因為F -> G -> A -> B -C)
那B的向上完全五度是什麼? 正確答案是F#
(如果不懂的話看一下鋼琴鍵盤,完全五度是7個半音
所以B#的上完全五度就是F##)
這個程式會隨機出題,要你回答某個音的向上完全五度是什麼這樣。
(當然你也可以選完全四度的考題,不過我還懶得去寫混合考題的功能)
要連續答對一定的題數就會結束程式了。
不過有下面這段程式碼也沒辦法直接執行,因為它是用Ruby寫的。
過些日子想辦法把轉好的程式丟上來吧。就醬。
update:
1. 增加了Perfect 4th的功能
2. 把沒意義的元素修掉一點了
bug:
1. 問題數&問題類形 這兩題答錯就會跳出程式
future function:
1. 先GUI化吧
2.把bug修掉
3. 其它音程(大小三度next)
#interval testing program v.0.3.1
#written by juls
# 00 01 02 03 04 05 06 07 08 09 10
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.downcase
if role == 'a'
rolenum = 5
elsif role == 'b'
rolenum = 12
elsif role == 'c'
rolenum = 24
#else
end
intervalArray = ['Major and minor 2nd','Major & minor 3rd',
'Perfect 4th','Prefect 5th','Major and minor 6th',
'Major and minor 7th']
puts "Perfect 5th & Perfect 4th test is Available now."
puts "Which interval test would you like to do?"
puts "(please input number 5 or 4)"
interval = gets.chomp.to_i
intervalName = intervalArray[(interval-2)]
while rightAns < rolenum and answer.upcase != 'Q'
keyRandNum = rand(21)
keyRand = keys[keyRandNum]
udArray = ['above','below']
udRandNum = rand(2)
udRand = udArray[udRandNum]
if interval == 5
soundNumClac = ((21*udRandNum - (interval-1)*3).abs + keyRandNum)
puts ''
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
elsif interval == 4
soundNumClac = ((21*udRandNum - (interval-1)*3).abs + keyRandNum)
puts ''
if udRandNum == 0 and keyRandNum == 12
keys = extraKeys
soundNum = 22
elsif udRandNum == 0 and keyRandNum == 13
soundNum = (soundNumClac - 1)%21
elsif udRandNum == 0 and keyRandNum == 14
soundNum = (soundNumClac - 1)%21
elsif udRandNum == 1 and keyRandNum == 0
soundNum = (soundNumClac + 1)%21
elsif udRandNum == 1 and keyRandNum == 1
soundNum = (soundNumClac + 1)%21
elsif udRandNum == 1 and keyRandNum == 2
keys = extraKeys
soundNum = 21
else
soundNum = soundNumClac%21
end
correctNote = keys [soundNum]
puts ''
puts ''
puts 'What is the ' + intervalName + ' ' + udRand + ' the key ' + keyRand + ' ?'
puts '(Enter [Q] to quit the test.)'
answer = gets.chomp
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
end
if rightAns == rolenum
puts 'Congradulation! You have pass the test!! ^___^'
end
全站熱搜
留言列表