挑战说明
您必须显示终端机中降雨的模拟。
在下面给出的示例中,它随机添加100个雨滴(使用您的语言提供的默认随机函数)坐标,等待0.2秒,然后再次重绘,直到给定时间到期。任何字符都可以用来表示雨滴。
参量
- 重绘之间的等待时间(以秒为单位)。
- 下雨的时间到了。这只是代表迭代次数的整数。[因此,下雨可见的净时间是该整数乘以等待时间]
- 雨结束时显示的信息。(必须居中)
- 屏幕上显示的雨滴数。
规则
- 应该使用一个字节来表示雨滴,它可以是任何东西,甚至包括猫和狗。
- 它不必响应终端大小,这意味着您不必处理各种终端大小的错误。您可以自行指定终端的宽度和高度。
- 适用打高尔夫球的标准规则。
代码样本和输出
这是使用ncurses用python 2.7编写的非高尔夫版本。
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()
输出-