Witam! Robię grę w konsoli, przygodówkę/rpg. Przydałby mi się patent… graliście kiedyś w sidescrollery? Gry co bije się stworki i idzie w prawo. No więc na końcu każdej planszy było naliczanie punktów. Dosłownie naliczanie, bardzo szybka animacja pokazująca wzrost wartości punktów. Czy jest coś takiego wykonalne w Rubim, w konsoli?
Teoretycznie dało by się to zrobić z pomocą jakiejś funkcji opóźniającej, ale wtedy dla każdego punkta naliczonego pokazywałby się nowy tekst, chyba, że by czyścić konsolę, ale to mało wydajne.
Albo “wymieniasz” całą linijkę, albo ncurses (jest dobry binding dla rubiego, choć z dość kiepską dokumentacją – ale to praktycznie 1:1 API ncurses dla C)
Jak można by wymienić całą linijkę? Bo znam tylko funkcję system(‘cls / clear’), już pomijając, że jest to funkcja terminala windowsa / linuxa, a nie Rubiego, to czyści całą konsolę, a nie jedną linijkę. Bo na razie staram się nie korzystać z bibliotek.
Okej znalazłem coś takiego
0.step(100, 10) do |i|
printf((i < 100 ? "\rProgress: %02d\%" : "\rProgress: %3d\%"), i)
$stdout.flush
sleep(1)
end
puts
Z tego co widzę generalnie rozchodzi się o printf + \r w stringu a także funkcję sleep, a $stdout.flush dodatkowo odświeża tak, aby było płynne przejście, tak?