, поэтому я пишу приложение, которое просит пользователя идентифицировать различные ноты, которые им воспроизводятся.я представляю, что это можно сделать, проиграв одну случайную ноту из набора заметок, затем подождав, пока пользователь нажмет кнопку с соответствующей заметкой, сообщив пользователю, правильно ли они вставили ноту, и, после небольшой задержки, запуститевсе по-новому.
Теперь моя проблема в части с "ожиданием нажатия кнопки пользователем".
Вот что я сделал до сих пор:
У меня есть 12 кнопок, по одной на каждую ноту хроматической шкалы, каждая с соответствующим onClickListener, похожим на это
dobutton.setOnClickListener {
var mediaPlayer: MediaPlayer? = MediaPlayer.create(this, R.raw.cping)
mediaPlayer?.start()
givenAnswer = 4 // etc. for all the other notes.
Затем я ввожу некоторые переменные:
var score = 0
var index = 0
var setAnswer = 0
var givenAnswer = 0
Затем у меня есть цикл while, который заканчивается после нескольких сыгранных раундов и включает, во-первых, этот раздел, который случайным образом выбирает одну из нот для воспроизведения и устанавливает правильный ответ,с соответствующими файлами для воспроизведения и значениями для setAnswer для каждой ноты хроматической шкалы ...
while (index != 11) {
val randomGenerator = Random()
val randomInt = randomGenerator.nextInt(11)
when (randomInt) {
0 ->{
var mediaPlayer: MediaPlayer? = MediaPlayer.create(this, R.raw.abping)
mediaPlayer?.start()
println(pingsArray[0])
setAnswer = 0
}
1 -> {
var mediaPlayer: MediaPlayer? = MediaPlayer.create(this, R.raw.aping)
mediaPlayer?.start()
println(pingsArray[1])
setAnswer = 1
} // etc. for all the other notes...
... а затем этот блок, который сравнивает правильный ответ с заданным и соответственно увеличивает значения.
run {
if (setAnswer == givenAnswer) {
index = index + 1
score = score + 1
}
else {
index = index + 1
}
}
}
После этого цикл while должен начаться заново.Тогда все это дает оценку.
Теперь моя проблема в том, что весь цикл while выполняется за один раз, не давая пользователю времени на что-либо ответить.Потратив целый день на поиски в Интернете и не найдя ничего полезного, я наконец решил спросить здесь.В случае, если это показывает слишком много: я только начал кодировать несколько дней назад, поэтому, пожалуйста, помилуйте, если мои вопросы немного глупы, и мой код не соответствует стандартам.Это просто куча сложных вещей, когда вы новичок в этом ...
Спасибо!