チャレンジの説明
ターミナルで雨のシミュレーションを表示する必要があります。
以下の例では、100個の雨滴をランダムに追加し(言語が提供するデフォルトのランダム関数を使用)座標を調整し、0.2秒待ってから、指定された時間が経過するまで再描画します。雨滴を表すために任意の文字を使用できます。
パラメーター
- 再描画間の待機時間(秒単位)。
- 雨が見える時間。これは、反復回数を表す単なる整数です。[したがって、雨が見える正味時間は、この整数に待機時間を掛けたものです]
- 雨が終わったときに表示されるメッセージ。(これは中央に配置する必要があります)
- 画面に表示される雨滴の数。
ルール
- 雨滴を表すために1バイトを使用する必要があり、猫や犬でも何でも構いません。
- 端末サイズに対応する必要はありません。つまり、さまざまな端末サイズのバグを処理する必要はありません。端末の幅と高さは独自に指定できます。
- ゴルフの標準ルールが適用されます。
コードのサンプルと出力
これは、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()
出力-