Skip to content

Instantly share code, notes, and snippets.

@Qman11010101
Last active September 24, 2020 17:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Qman11010101/ec771a34bab5cb815ebd83c1bd203df9 to your computer and use it in GitHub Desktop.
Save Qman11010101/ec771a34bab5cb815ebd83c1bd203df9 to your computer and use it in GitHub Desktop.
改良版音楽クイズ
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