Last active
September 24, 2020 17:14
-
-
Save Qman11010101/ec771a34bab5cb815ebd83c1bd203df9 to your computer and use it in GitHub Desktop.
改良版音楽クイズ
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import glob | |
import os | |
import random | |
import time | |
import subprocess | |
import vlc | |
# コマンド定義 | |
CMDPREF = "_" | |
GIVEUP = CMDPREF + "giveup" | |
LENGTH = CMDPREF + "length" | |
LETTER = CMDPREF + "letter" | |
ERROR = CMDPREF + "error" | |
REPLAY = CMDPREF + "replay" | |
ANOTHER = CMDPREF + "another" | |
player = vlc.MediaPlayer() | |
print("曲名クイズ!") | |
print("- 曲名の一部を入力してね!部分一致で判定するよ!") | |
print("- 曲名の1/2以上があっていれば正解だよ!完全に合っていたらパーフェクトだよ!") | |
print("- 曲が流れる時間は3~7秒だよ!") | |
print("- 次の曲に進むときはEnterを押してね!") | |
print(f"- どうしてもわからなかったら「{GIVEUP}」と入力してね!") | |
print(f"- もう一度聴きたい時は「{REPLAY}」と入力してね!") | |
print(f"- 曲名の長さが知りたい場合は「{LENGTH}」と入力してね!") | |
print(f"- 曲名の最初の文字が知りたい場合は「{LETTER}」と入力してね!") | |
print(f"- 曲の別の部分を再生したいときは「{ANOTHER}」と入力してね!") | |
print(f"- エラーが起きて再生されなかったときは「{ERROR}」と入力してね!") | |
input("Enterを押すとスタートするよ!") | |
music_count = 1 | |
musics = glob.glob("*") | |
while True: | |
# ファイル選択 | |
if musics == []: | |
break | |
else: | |
while True: | |
filename = random.choice(musics) | |
if filename.endswith(".py") or filename.endswith(".txt") or filename.startswith("AlbumArt_") or "Folder" in filename: | |
musics.pop(musics.index(filename)) | |
else: | |
musics.pop(musics.index(filename)) | |
break | |
# 曲名取得・再生位置設定 | |
music_name = os.path.splitext(os.path.basename(filename))[0] | |
music_name_lower = music_name.lower().replace(" ", "").replace(" ", "") | |
waiting_time = random.randint(3, 7) | |
position = min(0.9, random.random()) | |
# 再生 | |
player.set_mrl(filename) | |
player.play() | |
print(f"{music_count}曲目を再生中…") | |
vlc.libvlc_media_player_set_position(player, position) | |
time.sleep(waiting_time) | |
player.stop() | |
print("さあ、曲名を入力してね!") | |
while True: | |
answer = input(">> ") | |
answer_lower = answer.lower().replace(" ", "") | |
if not answer.startswith(CMDPREF): | |
if len(answer) >= min(len(music_name)//2, len(music_name_lower)): | |
if answer == music_name: | |
print("パーフェクト!すごいね!") | |
break | |
elif answer_lower in music_name_lower: | |
print("正解!おめでとう!") | |
break | |
else: | |
print("残念!不正解!") | |
else: | |
print("入力文字数が少なすぎるよ!") | |
else: | |
if answer == GIVEUP: | |
print("ナイストライ!") | |
break | |
elif answer == ERROR: | |
print("ごめんね!この曲は一旦スキップするよ") | |
print("Enterを押して次に進んでね!") | |
musics.append(filename) # 再生されなかった曲をリストに戻す | |
break | |
elif answer == REPLAY: | |
print("もう一度再生するよ!") | |
player.play() | |
print(f"{music_count}曲目を再生中…") | |
vlc.libvlc_media_player_set_position(player, position) | |
time.sleep(waiting_time) | |
player.stop() | |
elif answer == LENGTH: | |
print( | |
f"曲名は{len(music_name)}文字(スペースを無くすと{len(music_name_lower)}文字)だよ!") | |
elif answer == LETTER: | |
print(f"最初の文字は「{music_name[0]}」だよ!") | |
elif answer == ANOTHER: | |
waiting_time = random.randint(3, 7) | |
position = min(0.9, random.random()) | |
print("再生場所を変更して再生するよ!") | |
player.play() | |
print(f"{music_count}曲目を再生中…") | |
vlc.libvlc_media_player_set_position(player, position) | |
time.sleep(waiting_time) | |
player.stop() | |
else: | |
print("そんなコマンドはないよ!") | |
if answer != ERROR: | |
print(f"正解は「{music_name}」でした!") | |
music_count += 1 | |
input() | |
print("全曲が終了したよ!おつかれさま!") | |
input("Enterキーを押して終了してね!") |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment