Napisałem sobię program do sprawdzania szybkości reakcji (wpisywanie literek). Program działa dopóki obiekt listbox
nie zapełni się literkami (10 sztuk).
Początkowo każda literka pojawia się co 800ms i za każdym dobrym wpisaniem literki interwał na pojawienie się literki zostaje zmniejszony o 30. Minimalny interwał to 200ms.
W czym jest problem? Chcę mieć pasek pokazujący aktualny poziom trudności. Na samym początku, gdy interwał wynosi 800ms wartość value
paska postępu powinna wynosić 0. W momencie gdy interwał osiągnie minimalną wartość 200ms pasek postępu powinien wynosić 100.
Czyli: jeśli interwał spadnie o 5%, to pasek postępu powinien wzrosnąć o 5%.
Napisałem więc taką metodę:
private void DecreaseInterval() {
if (timer1.Interval >= 230) {
timer1.Interval -= 30;
double rateOfTotalInterval = ((double)(timer1.Interval - 200) / 600) * 100;
double progressBarDesiredValue = 100 - rateOfTotalInterval;
difficultyProgressBar.Value = (int)progressBarDesiredValue;
} else {
timer1.Interval = 200;
}
I faktycznie to działa:
800 ms - progressBar.Value
wynosi 0
650 ms - progressBar.Value
wynosi 25
470 ms - progressBar.Value
wynosi 55
300 ms - progressBar.Value
wynosi 83
220 ms - progressBar.Value
wynosi 96
200 ms - progressBar.Value
wynosi 100
Wydaje mi się, że jest to dość topornie napisane. Pamiętam, że w szkole średniej na fizyce liczyliśmy stosunek (gdy x spada to y rośnie) i tam stosowało się ułamki. Ja to rozwiązałem w trochę inny sposób. Jak to powinno być poprawnie napisane?