Descripción del desafío
Tienes que mostrar una simulación de lluvia en la terminal.
En el ejemplo que se muestra a continuación, se agregan 100 gotas de lluvia al azar (use la función aleatoria predeterminada que ofrece su idioma) coordenadas, esperando 0.2 segundos y luego volviendo a dibujar hasta que expire el tiempo dado. Cualquier personaje puede usarse para representar la gota de lluvia.
Parámetros
- Tiempo de espera entre redibujos en segundos.
- Hora en que la lluvia será visible. Esto es solo un número entero que representa el número de iteraciones. [Entonces, el tiempo neto por el cual la lluvia será visible es este número entero multiplicado por el tiempo de espera]
- Mensaje que se mostrará cuando termine la lluvia. (Esto tiene que estar centrado)
- Número de gotas de lluvia que se mostrarán en la pantalla.
Reglas
- Se debe usar un solo byte para representar una gota de lluvia, y puede ser cualquier cosa, incluso gatos y perros.
- No tiene que responder al tamaño del terminal, lo que significa que no tiene que manejar el error para tamaños de terminal variados. Puede especificar el ancho y la altura del terminal por su cuenta.
- Se aplican las normas estándar de golf.
Muestra de código y salida
Esta es una versión sin golf escrita en 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()
Salida -