بازی حافظه - پروژه پایتون با Tkinter
🧠 بازی حافظه - پروژه سرگرمکننده پایتون
📊 ویژگیهای کلیدی پروژه:
• 🎴 ۱۶ کارت در گرید ۴x۴
• 😊 ۸ جفت ایموجی مختلف (🐶, 🐱, 🐭, 🐹, 🐰, 🦊, 🐻, 🐼)
• 🔄 چیدمان تصادفی در هر بازی جدید
• 👆 تشخیص کلیک روی کارتها
• ✅ نمایش کارتهای جفت شده با رنگ سبز
• ❌ بازگشت خودکار کارتهای ناموفق (بعد از ۰.۵ ثانیه)
• 📊 شمارش تعداد حرکتها
• 🏆 نمایش تعداد جفتهای پیدا شده
• 🎉 صفحه پیروزی با نمایش تعداد حرکتها
• 🔄 دکمه بازی جدید برای شروع مجدد
• 🚫 غیرفعال شدن کارتهای جفت شده
• 🎨 رابط کاربری جذاب با رنگهای مناسب
🔧 مشخصات فنی پروژه:
• زبان برنامهنویسی: Python 3.8+
• کتابخانههای استفاده شده: tkinter, random
• حجم فایل: ۱۸ کیلوبایت
• تعداد خطوط کد: ۲۵۰+ خط کد تمیز و کامنتگذاری شده
• ساختار: برنامهنویسی شیگرا (OOP) با کلاس MemoryGame
• معماری ماژولار با توابع مجزا
• مدیریت خطاهای پیشرفته
🎮 قوانین بازی:
🎴 کارتها:
• ۱۶ کارت در گرید ۴x۴
• ۸ جفت ایموجی مختلف
• کارتها در ابتدا پشت به نمایش هستند (❓)
👆 نحوه بازی:
• روی هر کارت کلیک کنید تا رو شود
• دو کارت را پشت سر هم انتخاب کنید
• اگر کارتها جفت باشند، سبز میشوند و ثابت میمانند
• اگر جفت نباشند، بعد از ۰.۵ ثانیه برمیگردند
🏆 امتیازدهی:
• شمارش تعداد حرکتها (هر بار انتخاب دو کارت)
• نمایش تعداد جفتهای پیدا شده (از ۸)
• هدف: پیدا کردن همه جفتها با کمترین تعداد حرکت
🎉 پایان بازی:
• پس از پیدا کردن همه ۸ جفت
• نمایش صفحه پیروزی با تعداد حرکتها
• امکان شروع بازی جدید
💻 نحوه اجرا:
# روش اول: اجرای مستقیم
python memory_game.py
# روش دوم: اجرا در محیط مجازی (توصیه شده)
python -m venv venv
source venv/bin/activate # در لینوکس/مک
venv\Scripts\activate # در ویندوز
python memory_game.py
📁 ساختار پروژه:
memory-game/
├── memory_game.py # فایل اصلی پروژه
├── README.md
🎨 طراحی بصری:
🎨 پالت رنگی:
• پسزمینه اصلی: #2c3e50 (آبی تیره)
• کارتهای بسته: #3498db (آبی روشن)
• کارتهای باز: #e74c3c (قرمز)
• کارتهای جفت شده: #27ae60 (سبز)
• عنوان: #ffd700 (طلایی)
• متن: سفید
🃏 کارتها:
• ابعاد: ۸x۴ خانه در گرید
• فونت ایموجی: ۱۶ پیکسل
• حاشیه: ۵ پیکسل
😊 ایموجیها:
• 🐶 سگ
• 🐱 گربه
• 🐭 موش
• 🐹 همستر
• 🐰 خرگوش
• 🦊 روباه
• 🐻 خرس
• 🐼 پاندا
📊 پنل اطلاعات:
• تعداد حرکتها (بالا سمت چپ)
• تعداد جفتهای پیدا شده (بالا سمت راست)
🎮 صفحه پیروزی:
• عنوان "🎊 آفرین! 🎊" با رنگ طلایی
• نمایش تعداد حرکتها
• دکمه "بازی جدید"
⌨️ کنترلهای بازی:
🖱️ کلیک چپ: باز کردن کارت
🚀 نحوه بازی:
۱. اجرای برنامه
۲. صفحه بازی با ۱۶ کارت بسته نمایش داده میشود
۳. روی هر کارت کلیک کنید:
• کارت باز میشود و ایموجی آن نمایش داده میشود
• رنگ کارت به قرمز تغییر میکند
۴. کارت دوم را انتخاب کنید
۵. اگر دو کارت جفت باشند:
• رنگ هر دو به سبز تغییر میکند
• غیرفعال میشوند
• تعداد جفتها افزایش مییابد
۶. اگر جفت نباشند:
• ۰.۵ ثانیه صبر کنید
• کارتها برمیگردند (❓)
۷. هر بار انتخاب دو کارت، یک حرکت حساب میشود
۸. با پیدا کردن همه ۸ جفت:
• صفحه پیروزی نمایش داده میشود
• تعداد حرکتهای شما نشان داده میشود
۹. برای بازی جدید:
• دکمه "🔄 بازی جدید" را بزنید
• یا از صفحه پیروزی "بازی جدید" را انتخاب کنید
🔄 منطق بازی:
🎴 مدیریت کارتها:
• لیست cards شامل ۱۶ ایموجی (۸ جفت)
• shuffle برای چیدمان تصادفی
• flipped برای کارتهای موقتاً باز
• matched برای کارتهای جفت شده
👆 مدیریت کلیک:
• بررسی فعال بودن بازی
• بررسی تکراری نبودن کارت
• بررسی جفت نبودن قبلی
• ذخیره کارتهای انتخاب شده
✅ بررسی جفت:
• مقایسه ایموجی دو کارت
• اگر مساوی: اضافه به matched و سبز شدن
• اگر نامساوی: بازگشت بعد از ۵۰۰ms
🎉 پایان بازی:
• بررسی len(matched) == 16
• نمایش پنجره جدید با تبریک
• غیرفعال شدن بازی فعلی
⭐ نقاط قوت پروژه:
• کد کاملاً تمیز و کامنتگذاری شده
• رعایت اصول برنامهنویسی شیگرا (OOP)
• گرافیک جذاب با ایموجیها
• شمارش حرکتها برای رقابت
• صفحه پیروزی با امتیاز
• قابلیت بازی مجدد
• بدون وابستگی به کتابخانههای خارجی
• قابل اجرا روی ویندوز، لینوکس و مک
• حجم کم و عملکرد سریع
• طراحی زیبا و کاربرپسند
🎯 موارد استفاده:
• سرگرمی و تقویت حافظه
• یادگیری برنامهنویسی بازی
• پروژه دانشجویی
• آموزش مفاهیم لیست و random
• تمرین کار با گرید و دکمهها
• آشنایی with after برای تاخیر
📌 نکات فنی:
• استفاده از random.shuffle برای چیدمان تصادفی
• ذخیره موقعیت کارتها با index (row*4 + col)
• تاخیر ۵۰۰ms با after برای بازگشت کارتها
• غیرفعال کردن کلیک با waiting flag
• پنجره جدید برای صفحه پیروزی
با افتخار از درخت کد
محمدمهدی محمودی
treec.net | mohammadmahdimahmoudi.ir