3
3

More than 3 years have passed since last update.

pythonでターミナル上にNOW LOADINGが左から右に動くものを作った

Last updated at Posted at 2020-02-09

このプログラムなに?

ゲームとかしていると、NOW LOADINGって文字が右下とかにあって、
左から右に移動してたり、一部文字が大きくなってたりするやつがあると思いますが、それです。
わからなかったらもうしわけありません。

コードはpython3で書いてます。拙いコードですが、お許しください…

コード

キャリッジリターン(\r)を使えば、ターミナルの出力を上書きすることができます。
例えば、ハイフン-が0.5秒ごとに右に移動するアニメーションを作りたいなら、以下のようなコードになります。

sample.py
import time

    for i in range(0, 9):
        print('\r{0} {1}%'.format(' ' * i, '-'), end='')
        time.sleep(0.5)



これだと10回右に行ったらおしまいなプログラムになるので、NOW LOADINGがループしつつ、
右にある程度移動したら、だんだん消えていき、左から泡られるようにしました。↓

move.py
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プレイヤー上で小さい液晶上にマンボウさんが泳ぐ
モードがあり、いいなあと思って自分も作ってみました。
ただ、自分でもあまりにイケてないコードであると思うこと、思いのほかお魚さんが
かわいく表示できなかったので、おまけに掲載しました… ミ((((°>

fish.py
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()

よかったら、コピペして動かしてみてください!

3
3
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3