Pythonでアニメ風ルーレットを作る|5分スクリプト解説

    Pythondeルーレット抽選 ハナマルコ アイキャッチ

    こんにちは、プログラミング初心者のハナマルコです。

    SNSでよく見かける「ルーレットで当選者決定!」の演出。くるくる回って「当たり!」と出るあの演出を見たことがありますか?あのワクワク感、実はPythonを使えば簡単に再現できるんです!しかも、Google Colabを使えば、パソコンがなくてもすぐに実行できます。

    「でも、あれって難しそう…」と思っていませんか?大丈夫です!本記事では、初心者でも簡単にできる、Pythonを使ったアニメ風の抽選ルーレットを作成します。コードを覚えながら、楽しく実践していきましょう!

    実践シリーズを初回から読みたい方:
    Pythonって何?初心者にやさしく解説

    読みたいところに飛べる目次

    その抽選、あなたにも作れます

    ある日の朝のいつものチャッピー先生とハナマルコの会話

    ハナマルコ

    チャッピー先生〜、SNSのキャンペーンでよく見るルーレット抽選って、Pythonで作れませんか?

    チャッピー先生

    Pythonなら、簡単な抽選から、アニメーション付きのルーレットまで、さまざまな演出ができますよ。

    それでは今日も一緒に作っていきましよう。

    STEP1:超簡単!文字だけで抽選する

    まずは、抽選を文字だけで行ってみましょう。Pythonに搭載されているrandomモジュールを使えば、リストからランダムに名前を選ぶことができます。

    import random
    
    # 抽選参加者のリスト
    entries = ["はなまるこ", "チャッピー先生", "さとう", "たなか", "いとう"]
    
    # 当選者をランダムに選ぶ
    winner = random.choice(entries)
    print(f"当選者は『{winner}』さんです!")

    # 実行結果
    当選者はハナマルコさんです!

    ハナマルコ

    randomモジュールってパスワード生成で勉強したヤツだ!

    コードの解説:

    • random.choice()は、リストからランダムに1つのアイテムを選ぶ関数です。この関数を使うことで、抽選がとても簡単にできます!
    • これだけでシンプルな抽選機能が完成します。
    ハナマルコ

    えっ、たったこれだけで当選者が決まるの!?もっと難しいかと思った〜!

    チャッピー先生

    簡単ですよね。次は、ちょっとワクワクする演出を加えて、アニメ風にしてみましょう。

    randomモジュールを使ったパスワード生成について解説した記事:
    Pythonで安全なパスワードを生成

    STEP2:Colabで作るアニメ風ルーレット抽選!

    次は、少し進んで、くるくる回るアニメ風のルーレット抽選を作ってみましょう。matplotlibを使って円グラフを描画し、抽選結果をアニメーションで表示します。

    import random
    import matplotlib.pyplot as plt
    import matplotlib.font_manager as fm
    import numpy as np
    import time
    from IPython.display import clear_output
    
    # 日本語フォントをColabにインストール
    !apt-get -y install fonts-ipaexfont > /dev/null
    jp_font = fm.FontProperties(fname="/usr/share/fonts/opentype/ipaexfont-gothic/ipaexg.ttf")
    
    # 参加者リスト
    entries = ["はなまるこ", "チャッピー先生", "さとう", "たなか", "いとう"]
    winner_index = random.randint(0, len(entries)-1)
    
    # 抽選アニメーション
    for i in range(20):
        clear_output(wait=True)
        angles = np.random.rand(len(entries))
        colors = plt.cm.Paired(np.linspace(0, 1, len(entries)))
        plt.figure(figsize=(6,6))
        plt.pie(angles, labels=entries, colors=colors, 
                textprops={'fontproperties': jp_font, 'fontsize': 12})
        plt.title("抽選中...", fontproperties=jp_font, fontsize=14)
        plt.show()
        time.sleep(0.1 + i * 0.01)
    
    # 結果だけを表示
    clear_output(wait=True)
    highlight_colors = list(plt.cm.Paired(np.linspace(0, 1, len(entries))))
    highlight_colors[winner_index] = 'red'
    labels = entries.copy()
    labels[winner_index] += " ★当選!"
    explode = [0.05 if i == winner_index else 0 for i in range(len(entries))]
    
    plt.figure(figsize=(6,6))
    plt.pie([1]*len(entries), labels=labels, colors=highlight_colors,
            textprops={'fontproperties': jp_font, 'fontsize': 12}, explode=explode)
    plt.title("結果発表!", fontproperties=jp_font, fontsize=16)
    plt.show()
    

    コードの解説:

    アニメーションの実行

    • clear_output(wait=True) で毎回グラフを消して、新しいものを描画することで、アニメーションのように見せています。
    • plt.pie() で円グラフを描画しています。参加者ごとのセクションが色分けされ、当選者が赤色で目立つように設定しています。
    • time.sleep() を使って、抽選のアニメーションがスムーズに動くように遅延を加えています。
    ルーレットで当選者を決める
    Pythonでルーレット抽選をしてみた
    ハナマルコ

    わー、くるくる回ってる!これ、まるで本物のルーレットみたいだ!

    チャッピー先生

    楽しいですよね。こうやって、演出を加えるともっと面白くなります。

    STEP3:複数当選者を選ぼう!

    次は、1人だけでなく複数人の当選者を選ぶ方法を紹介します。random.sample()を使えば、ランダムに複数の当選者を選ぶことができます。

    import random
    
    # 参加者リスト
    entries = ["ハナマルコ", "チャッピー先生", "さとう", "たなか", "いとう"]
    
    # 複数当選者をランダムに選ぶ(例:3人)
    num_winners = 3
    winners = random.sample(entries, num_winners)
    
    print(f"当選者は:{', '.join(winners)}さんです!")

    # 実行結果
    当選者は:チャッピー先生,さとう,いとうさんです!

    ハナマルコ

    私ハズレたのね・・・

    コードの解説:

    random.sample()を使うと、リストから指定した人数のランダムな要素を取り出せます。これを利用して、複数の当選者を選ぶことができます。

    ハナマルコ

    たくさん当選者を選べるんですね!これなら大勢にプレゼントができる。

    STEP4:複数当選者を選ぶルーレット版!

    最後に、複数当選者を選ぶルーレットをアニメーションで表示する方法を紹介します。こちらのコードでは、当選者がくるくる回るルーレットの中から選ばれ、結果として複数名の当選者を赤色で表示します。

    import random
    import matplotlib.pyplot as plt
    import matplotlib.font_manager as fm
    import numpy as np
    import time
    from IPython.display import clear_output
    
    # 日本語フォントをColabにインストール
    !apt-get -y install fonts-ipaexfont > /dev/null
    jp_font = fm.FontProperties(fname="/usr/share/fonts/opentype/ipaexfont-gothic/ipaexg.ttf")
    
    # 参加者リスト
    entries = ["はなまるこ", "チャッピー先生", "さとう", "たなか", "いとう"]
    
    # 複数当選者をランダムに選ぶ(例:3人)
    num_winners = 3
    winners_index = random.sample(range(len(entries)), num_winners)
    
    # 抽選アニメーション
    for i in range(20):
        clear_output(wait=True)
        angles = np.random.rand(len(entries))
        colors = plt.cm.Paired(np.linspace(0, 1, len(entries)))
        plt.figure(figsize=(6,6))
        plt.pie(angles, labels=entries, colors=colors, 
                textprops={'fontproperties': jp_font, 'fontsize': 12})
        plt.title("抽選中...", fontproperties=jp_font, fontsize=14)
        plt.show()
        time.sleep(0.1 + i * 0.01)
    
    # 結果だけを表示
    clear_output(wait=True)
    highlight_colors = list(plt.cm.Paired(np.linspace(0, 1, len(entries))))
    
    # 当選者の色を赤に変更
    for idx in winners_index:
        highlight_colors[idx] = 'red'
    
    labels = entries.copy()
    for idx in winners_index:
        labels[idx] += " ★当選!"
    
    # 少し外に出して強調
    explode = [0.05 if i in winners_index else 0 for i in range(len(entries))]
    
    plt.figure(figsize=(6,6))
    plt.pie([1]*len(entries), labels=labels, colors=highlight_colors,
            textprops={'fontproperties': jp_font, 'fontsize': 12}, explode=explode)
    plt.title("結果発表!", fontproperties=jp_font, fontsize=16)
    plt.show()

    コードの解説:

    • random.sample(): 複数の当選者をランダムに選ぶために使用します。
    • アニメーションの表示: くるくる回るルーレットのようなアニメーションを表示し、当選者を赤色で強調して表示します。

    まとめ

    Pythonでの抽選アプリ作成は、シンプルなコードでも十分に面白く、学びながら楽しむことができます。

    • randomモジュールを使ったシンプルな抽選
    • matplotlibを使ったアニメ風のルーレット抽選
    • random.sample()を使った複数当選者の選出

    このように、Pythonはアイデアを実現するための強力なツールです。今後はさらに進化させて、応募者リストをCSVから読み込んだり、当選者に自動でメールを送信したりする機能を追加してみるのも良いかもしれません!

    ハナマルコ

    Pythonって、こんなにも色んなことができるんですね!次は、さらに面白いことに挑戦したいです。

    チャッピー先生

    その意気です。次回も他の面白いアプリを一緒に作りましょう!

    これで、あなたもPythonで楽しく学べる抽選アプリの作成ができました!次回も新しいチャレンジを一緒にしていきましょう。

    最後まで読んでいただき、ありがとうございました!

    実践シリーズで学習を続ける:
    Pythonって何?初心者にやさしく解説
    Pythonで割り勘と時間計算アプリ
    Pythonの変数とは?初心者向け入門
    Pythonのif文で条件分岐を学ぼう
    Pythonのfor文とrangeの使い方を学ぶ

    当ブログは基本的にリンクフリーです。リンクを行う場合の許可や連絡は不要です。

    Pythondeルーレット抽選 ハナマルコ アイキャッチ

    この記事が気に入ったら
    いいね または フォローしてね!

    よかったらシェアしてね!
    • URLをコピーしました!
    • URLをコピーしました!
    読みたいところに飛べる目次