このプログラムなに?
ゲームとかしていると、NOW LOADING
って文字が右下とかにあって、
左から右に移動してたり、一部文字が大きくなってたりするやつがあると思いますが、それです。
わからなかったらもうしわけありません。
コードはpython3で書いてます。拙いコードですが、お許しください…
コード
キャリッジリターン(\r)を使えば、ターミナルの出力を上書きすることができます。
例えば、ハイフン-
が0.5秒ごとに右に移動するアニメーションを作りたいなら、以下のようなコードになります。
import time
for i in range(0, 9):
print('\r{0} {1}%'.format(' ' * i, '-'), end='')
time.sleep(0.5)
これだと10回右に行ったらおしまいなプログラムになるので、`NOW LOADING`がループしつつ、 右にある程度移動したら、だんだん消えていき、左から泡られるようにしました。↓
import time
import os
def main():
# ループさせるための初期値の設定
num = 1
# クロックの設定
clock = 0.5
os.system('cls')
print(" ")
# ここから文字が動くコード
while num != 0:
str = 'N O W L O A D I N G'
space = ' ' * num
count = num - 20
if num < 20:
time.sleep(clock)
# 文字の描写の部分。numの値が増加するほど横に移動する
print('\r{0} {1}'.format(space, str), end='')
num += 1
else:
# 右に全角スペース20個分移動したら、右にoutして、左からinする部分
if count <= len(str):
time.sleep(clock)
print('\r{0} {1} {2}'.format(str[len(str) - count:], ' ' * (num - count), str[:(le`n(str) - count)]), end='')
num += 1
else:
num = 1
if __name__ == "__main__":
main()
何に使えるの?
役に立つようなプログラムになるとは思えませんが、パッケージのインストーラとかで
INSTALLING
の文字が動いてたりするとお洒落だと信じてます。
apt
だったりyum
のインストール中に、オリジナルの文字やアスキーアートを動かせたらいいな!
と思っています。
おまけ
本当はお魚さんが泳ぐ、以下のコードを当初作る予定でした…
友人の車に乗っているときに、CDプレイヤー上で小さい液晶上にマンボウさんが泳ぐ
モードがあり、いいなあと思って自分も作ってみました。
ただ、自分でもあまりにイケてないコードであると思うこと、思いのほかお魚さんが
かわいく表示できなかったので、おまけに掲載しました… ミ((((°>
import time
import os
def main():
# ループさせるための初期値の設定
num = 1
# クロックの設定
clock = float(input('速さを入力してください([早い]1>>>5>>>10[遅い])')) / 10
os.system('cls')
print(" ")
# ここからお魚さんが泳ぐ
while num != 0:
if num < 11:
time.sleep(clock)
space = ' ' * num
# お魚さんの描写の部分。numの値が増加するほど横に移動する
print('\r{0} {1} {2} {3} {4} {5}'.format(space + ' ', '△\n', space, 'ミ((((°>\n', space + ' ', 'レ' + '\033[2A'), end='')
num += 1
# ヒレを動かすための部分
time.sleep(clock)
print('\r{0} {1} {2} {3} {4} {5}'.format(space + ' ', '△\n', space, 'Ξ((((°>\n', space + ' ', 'レ' + '\033[2A'), end='')
else:
# 右に全角スペース10個分移動したら、右にフェイドアウトする部分
time.sleep(clock)
space = ' ' * num
print('\r{0} {1} {2} {3} {4} {5}'.format(space + ' ', '△\n', space, ' ミ(((( \n', space + ' ', 'レ' + '\033[2A'), end='')
time.sleep(clock)
print('\r{0} {1} {2} {3} {4} {5}'.format(space + ' ', '△\n', space, ' Ξ(((( \n', space + ' ', 'レ' + '\033[2A'), end='')
time.sleep(clock)
print('\r{0} {1} {2} {3} {4} {5}'.format(space + ' ', '\n', space, ' ミ(( \n', space + ' ', '' + '\033[2A'), end='')
time.sleep(clock)
print('\r{0} {1} {2} {3} {4} {5}'.format(space + ' ', '\n', space, ' Ξ(( \n', space + ' ', '' + '\033[2A'), end='')
time.sleep(clock)
print('\r{0} {1} {2} {3} {4} {5}'.format(space + ' ', '\n', space, ' \n', space + ' ', '' + '\033[2A'), end='')
# 右にフェイドアウトしたら、左からフェードインしてくる部分
time.sleep(clock * 2)
space = ' ' * 20
print('\r{0} {1} {2} {3} {4} {5}'.format(space , '\n', '°>', space + '\n', space, '\033[2A'), end='')
time.sleep(clock * 2)
print('\r{0} {1} {2} {3} {4} {5}'.format(' △', space + '\n', '(((°>', space + '\n', space, '\033[2A'), end='')
time.sleep(clock * 2)
print('\r{0} {1} {2} {3} {4} {5}'.format(' △', space + '\n', 'Ξ((((°>', space + '\n レ' , space , '\033[2A'), end='')
time.sleep(clock)
print('\r{0} {1} {2} {3} {4} {5}'.format(' △', space + '\n', 'ミ((((°>', space + '\n レ' , space , '\033[2A'), end='')
num = 1
if __name__ == "__main__":
main()
よかったら、コピペして動かしてみてください!