しょーもないものを作ってしまったので供養します。
#作ったもの
映画『涼宮ハルヒの消失』に出てくる緊急脱出プログラムを再現してみました。
作中と同様、1文字ずつ順番に文字が出力されます。
コードの最後は「input()」で終わっているので、エンターキーを押すとプロンプトが消えるようになっています。
作中ではキョンがエンターキーを押した瞬間に改変された世界から戻り、部室にいたはずの面々がいなくなり、PCの画面に写っていたはずのプロンプトが消えていました。
さすがに周囲の人間を消すプログラムは書けませんでしたが、エンターキーでプロンプトが消せるようにしたので、ひとりで遊ぶ分には改変された世界から移動した気分になれます。
#ソースコード
from time import sleep
#引数に与えられた文字をYUKI.Nっぽく表示する
def yuki_n(*message, speed=0.15):
count = 0 #何行目を出力し終わったあとかを代入する変数
name = "YUKI. N>"
#1行目の出力に対して行う処理
msg = message[0]
#名前を表示
for s in range(len(name)):
print(name[0:s+1]+"\r",end="")
sleep(speed)
for i in range(len(msg)):
#行の最後の文字の場合、文末に_をつけない
if i == len(msg)-1:
print(name + msg)
sleep(speed)
count += 1
else:
print(name + msg[0:i+1],end="")
print("_"+"\r",end="")
sleep(speed)
#2行目以降の出力があれば行う処理
if len(message) > 1:
for msg in message[1:]:
for i in range(len(msg)):
#行の最後の文字の場合、文末に_をつけない
if i == len(msg)-1:
print(" " + msg)
sleep(speed)
count += 1
else:
print(" " + msg[0:i+1],end="")
print("_"+"\r",end="")
sleep(speed)
#最後の行を出力し終わったあとに改行する
if count == len(message):
print("")
#「Ready?」を表示する
def ready(speed=0.5):
ready = "Ready?"
#「_」を点滅させる
for _ in range(2):
print(" " + "_"+"\r",end="")
sleep(speed)
print(" " + " "+"\r",end="")
sleep(speed)
print(" " + "_"+"\r",end="")
sleep(speed)
for s in range(len(ready)):
print(" " + ready[0:s] + "_" + "\r",end="")
sleep(0.15)
print(" " + ready,end="")
#改行する時は複数の引数としてyuki_n関数ににわたす
yuki_n("これをあなたが読んでいる時、","わたしはわたしではないだろう。")
yuki_n("このメッセージが表示されたということは、","そこにはあなた、わたし、涼宮ハルヒ、朝比奈みくる、","小泉一樹が存在しているはずである。")
yuki_n("それが鍵。","あなたは回答を見つけ出した。")
yuki_n("これは緊急脱出プログラムである。"," ","起動させる場合はエンターキーを、","そうでない場合はそれ以外のキーを選択せよ。"," ","起動させた場合、"\
,"あなたは時空修正の機会を得る。","ただし成功は保証できない。","また帰還の保証もできない。")
yuki_n("このプログラムが起動するのは一度きりである。","実行ののち、消去される。"," ","非実行が選択された場合は起動せずに削除される。"," ")
ready()
input()
キャリッジリターンを使っただけの簡単なプログラムです。キャリッジリターンの使い方に関しては、『Pythonでprint関数のターミナル出力を上書きで1行表示する方法』が参考になりました。
#その他
文字の出力は「yuki_n」という関数にしてあるため、引数に渡す文字次第では、
というようなこともできます。「Ready?」じゃないよ。怖いですね。