Pythonツール ゲーム ファイル指定

Pythonで作る楽しい4択クイズゲーム

概要

この記事では、PythonとTkinterを使用して4択クイズゲームを作成する方法について詳しく説明します。クイズゲームは、教育目的やエンターテインメントとして広く利用できる楽しいプロジェクトです。この記事を読めば、基本的なプログラミングスキルを活かしてインタラクティブなクイズゲームを作成できるようになります。

使用例

このクイズゲームは、簡単に自分で問題を設定できるため、様々な場面で活用できます。例えば、学生の勉強用の問題集として使用したり、友達同士で楽しむためのクイズゲームとして利用したりできます。問題をカスタマイズすることで、英語、数学、歴史など、どんな分野のクイズにも対応できます。

必要なPythonライブラリとインストール方法

このプロジェクトを実行するためには、PythonとTkinterが必要です。Pythonがインストールされていない場合は、Python公式サイトからインストールしてください。

次に、Tkinterをインストールします。TkinterはPythonの標準ライブラリの一部であり、通常はPythonと一緒にインストールされますが、もしインストールされていない場合は以下のコマンドを実行してください。

pip install tk

使用手順

  1. PythonとTkinterのインストール: 上記の手順に従って、PythonとTkinterをインストールします。
  2. プログラムの準備: 下記のコードをメモ帳などに丸々コピーして、quiz_game.pyとして保存します。
  3. JSONファイルの準備: クイズの質問をJSON形式で準備します。以下の例を参考にしてください。
  4. ゲームの実行: コマンドラインまたはターミナルから次のコマンドを実行して、ゲームを開始します。
python quiz_game.py

注意点

  • JSONファイルの形式: 質問ファイルは正しいJSON形式である必要があります。例として、以下のようなフォーマットで質問を作成します。
[
{
"question": "What is the capital of France?",
"correct": "Paris",
"wrong1": "London",
"wrong2": "Berlin",
"wrong3": "Madrid"
},
...
]
  • ファイルのエンコーディング: JSONファイルはUTF-8エンコーディングで保存してください。これにより、読み込み時のエラーを防ぐことができます。

プログラム

下記のコードをメモ帳などに丸々コピーしてpythonファイル(quiz_game.py)にしてください。

import tkinter as tk
from tkinter import messagebox, filedialog
import json
import random
import time

class QuizApp:
def __init__(self, root):
self.root = root
self.root.title("Quiz Game")
self.reset_game()
self.create_title_screen()

def load_questions(self):
file_path = filedialog.askopenfilename(title="Select Questions File", filetypes=[("JSON Files", "*.json")])
if not file_path:
messagebox.showerror("Error", "No file selected.")
return False

try:
with open(file_path, 'r', encoding='utf-8') as file:
self.questions = json.load(file)
random.shuffle(self.questions)
self.questions = self.questions[:10]
return True
except Exception as e:
messagebox.showerror("Error", f"An error occurred: {str(e)}")
return False

def reset_game(self):
self.current_question_index = 0
self.score = 0
self.start_time = time.time()
self.timer_running = False

def create_title_screen(self):
self.clear_screen()
self.title_label = tk.Label(self.root, text="Welcome to the Quiz Game!", font=("Arial", 24))
self.title_label.pack(pady=20)
self.start_button = tk.Button(self.root, text="Start Game", command=self.start_game, font=("Arial", 16))
self.start_button.pack(pady=10)

def clear_screen(self):
for widget in self.root.winfo_children():
widget.destroy()

def start_game(self):
if self.load_questions():
self.reset_game()
self.show_question()
if not self.timer_running:
self.update_timer()

def show_question(self):
self.clear_screen()

if self.current_question_index >= len(self.questions):
self.show_results()
return

question = self.questions[self.current_question_index]
answers = [question['correct'], question['wrong1'], question['wrong2'], question['wrong3']]
random.shuffle(answers)

self.question_label = tk.Label(self.root, text=question['question'], font=("Arial", 18))
self.question_label.pack(pady=20)

self.answer_buttons = []
for answer in answers:
button = tk.Button(self.root, text=answer, command=lambda ans=answer: self.check_answer(ans), font=("Arial", 14))
button.pack(pady=5)
self.answer_buttons.append(button)

self.question_counter = tk.Label(self.root, text=f"Question {self.current_question_index + 1}/10", font=("Arial", 14))
self.question_counter.pack(pady=10)

self.timer_label = tk.Label(self.root, text=f"Time: {int(time.time() - self.start_time)} seconds", font=("Arial", 14))
self.timer_label.pack(pady=10)

def check_answer(self, selected_answer):
question = self.questions[self.current_question_index]
if selected_answer == question['correct']:
self.score += 1
result_text = "Correct!"
else:
result_text = "Wrong!"

self.result_label = tk.Label(self.root, text=result_text, font=("Arial", 14))
self.result_label.pack(pady=10)

self.root.after(1000, self.next_question)

def next_question(self):
self.current_question_index += 1
self.show_question()

def show_results(self):
self.clear_screen()
elapsed_time = int(time.time() - self.start_time)
results_text = f"You've completed the quiz!\nYour score: {self.score}/10\nTime: {elapsed_time} seconds"
self.results_label = tk.Label(self.root, text=results_text, font=("Arial", 18))
self.results_label.pack(pady=20)

self.restart_button = tk.Button(self.root, text="Return to Title", command=self.create_title_screen, font=("Arial", 16))
self.restart_button.pack(pady=10)

def update_timer(self):
if self.current_question_index < len(self.questions):
self.timer_label.config(text=f"Time: {int(time.time() - self.start_time)} seconds")
self.root.after(1000, self.update_timer)

if __name__ == "__main__":
root = tk.Tk()
app = QuizApp(root)
root.mainloop()

あるいは、下のテキストファイルをダウンロードし、「.txt」を「.py」に変えることでそのまま使えます。

まとめ

このガイドを参考にして、PythonとTkinterを使った4択クイズゲームを作成することができました。自分で問題をカスタマイズし、学習ツールやエンターテインメントとして活用してみてください。さらに、Tkinterの機能を応用して、ゲームのデザインや機能を拡張することも可能です。ぜひ、挑戦してみてください!

-Pythonツール, ゲーム, ファイル指定