Metoda pokazująca poziom trudności w miarę zmniejszanego interwału czasowego

0

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?

0

Odejmij sobie od lewej strony 200 tak, żeby zacząć od zera. Dla ułatwienia. I teraz masz: 0 ms = 100%. 600 ms = 0%.

Czyli ilość milisekund mamy od 0 do 600.
I teraz poziom trudności = (600 - ms) / 6

Czyli jeśli masz np. czas na 650 ms, musisz wykonać takie działanie:
x = (600 - (650 - 200)) / 6
W wyniku otrzymasz procent zaawansowania.

Sprawdź to jeszcze. Nie jestem matematykiem, ale po mojemu to tak właśnie działa.

1 użytkowników online, w tym zalogowanych: 0, gości: 1