Descrição do Desafio
Você tem que mostrar uma simulação de chuva no terminal.
No exemplo abaixo, ele adiciona 100 gotas de chuva aleatoriamente (use a função aleatória padrão oferecida pelo seu idioma) coordenadas, aguardando 0,2 segundos e redesenhando novamente até o tempo determinado expirar. Qualquer caractere pode ser usado para representar a gota de chuva.
Parâmetros
- Tempo de espera entre o redesenho em segundos.
- Hora em que a chuva será visível. Este é apenas um número inteiro que representa o número de iterações. [Então, o tempo líquido pelo qual a chuva ficará visível é esse número inteiro multiplicado pelo tempo de espera]
- Mensagem a ser exibida quando a chuva terminar. (Isso deve ser centralizado)
- Número de gotas de chuva a serem exibidas na tela.
Regras
- Um único byte deve ser usado para representar uma gota de chuva e pode ser qualquer coisa, até mesmo cães e gatos.
- Ele não precisa responder ao tamanho do terminal, o que significa que você não precisa lidar com o bug para tamanhos variados de terminais. Você pode especificar a largura e a altura do terminal por conta própria.
- Aplicam-se regras padrão de golfe.
Amostra de código e saída
Esta é uma versão não-escrita escrita em python 2.7 usando ncurses.
import curses
import random
import time
myscreen = curses.initscr()
curses.curs_set(0) # no cursor please
HEIGHT, WIDTH = myscreen.getmaxyx()
RAIN = '/' # this is what my rain drop looks like
TIME = 10
def make_it_rain(window, tot_time, msg, wait_time, num_drops):
"""
window :: curses window
time :: Total time for which it rains
msg :: Message displayed when it stops raining
wait_time :: Time between redrawing scene
num_drops :: Number of rain drops in the scene
"""
for _ in range(tot_time):
for i in range(num_drops):
x,y=random.randint(1, HEIGHT-2),random.randint(1,WIDTH-2)
window.addstr(x,y,RAIN)
window.refresh()
time.sleep(wait_time)
window.erase()
window.refresh()
window.addstr(HEIGHT/2, int(WIDTH/2.7), msg)
if __name__ == '__main__':
make_it_rain(myscreen, TIME, 'IT HAS STOPPED RAINING!', 0.2, 100)
myscreen.getch()
curses.endwin()
Saída -