外で遊べなくて暇だから一人イントロクイズ作った

音ゲーマーです。普段ゲーセンで[CHUNITHM](https://chunithm.sega.jp/)とか遊んでます。
でも緊急事態宣言出たので遊べません。暇です。
だから、とりあえず買い集めた[サウンドトラック](https://chunithm.sega.jp/cd/)でイントロクイズをしようと思いました。
でもイントロクイズって出題者がいないと出来ないんですよね。
出題者役を親に頼むのもアレなので、とりあえずPythonにやってもらうことにしました。

Gistは[こちら](https://gist.github.com/Qman11010101/cd328dd99e2b9c2e0ffd5005dd2efa4d)。

## 環境
Python: 3.8.2
python-vlc: 3.0.7110
VLC Media Player: 3.0.8 Vetinari

## 使い方
手順1・2に関しては[こちらの記事](https://qiita.com/johejo/items/19ee319c62ed63d62c58)が詳しい。
(0. Python 3.8.2をインストールする。)
1. VLC Media Playerをインストールする。
2. `pip install python-vlc`をする。(詳しい人へ: グローバル環境を汚したくない場合はvenvなりを手順3で示したディレクトリで設定してください。)
3. `intro_quiz.py`をGistからコピペするなりなんなりして保存し、音楽が置かれたフォルダー(ディレクトリ)に入れる。
4. ダブルクリックすれば多分起動するので楽しむ。

## 仕様
- 曲が最初から10秒間再生されます。
- 曲名が3文字未満の場合を除いて、3文字未満では反応しません。1-2文字だけ入れて誤魔化そうとしても無駄です。
- `giveup`と入力するとギブアップできます。
- 部分一致だと「正解」、完全一致だと「パーフェクト」の判定になります。
- たまにビットレート関連のエラーが起きてる気がします~~がプレイできるので問題ないです~~。

## プレイ画像
![SnapCrab_NoName_2020-4-8_0-12-8_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/310556/08372d28-b70a-4f0e-34a6-811f9b0996e1.png)
フォルダにArcaeaとかの曲も混ざってます。

## 注意
適当に作ったのでバグっても知りません。でも教えてくれたら直すかもしれないし直さないかもしれません。

***
ここからは中身に興味のある人向けです。

## コード

夜中に眠い目を擦って適当に書いたので汚いです。

```intro_quiz.py

# VLC media playerをインストールした後、pip install python-vlcしてください。

import glob
import os
import random
import time

import vlc

player = vlc.MediaPlayer()

print("イントロクイズ！")
print("曲名の一部を入力してね！部分一致で判定するよ！")
print("曲が流れる時間は10秒だよ！")
print("どうしてもわからなかったら「giveup」と入力してね！")
print("曲名が2文字以下の場合を除いて、入力された文字数が2文字以下の場合は反応しないよ！")

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]
        player.set_mrl(filename)
        player.play()
        print(f"{music_count}曲目を再生中…")
        time.sleep(10)
        player.stop()
        print("さあ、曲名を入力してね！")
        while True:
            answer = input(">> ")
            if len(answer) >= min(3, len(filename)):
                if answer == music_name:
                    print("パーフェクト！すごいね！")
                    break
                elif answer in music_name:
                    print("正解！おめでとう！")
                    break
                elif answer == "giveup":
                    print("ナイストライ！")
                    break
                else:
                    print("残念！不正解！")
            else:
                print(f"{min(3, len(filename))}文字以上入力しようね！")
        print(f"正解は「{music_name}」でした！")
        music_count += 1
print("全曲が終了したよ！おつかれさま！")

```

## 説明とか
globで同階層にあるファイルを全部掻き集めてます。ただ、その際表示されていないだけでアルバムアートも大量に同ディレクトリにあったので、それらは適当に弾いてます。他にもPythonのファイルだとか何かで紛れ込んだtxtファイルだとかを適当に弾いてます。orで弾く条件付け足せるので、一応`print(glob.glob("*"))`とかを実行して変なファイルがないか確かめておくといいと思います。ぶっちゃけ.jpgとか.pngとかの拡張子を弾いたほうがいいような気もする。

## 宣伝
みんなCHUNITHMやろう！と言おうとしたけど今遊べないから代わりに[Arcaea](https://arcaea.lowiro.com/ja)やろう。