بازی Pong NEO - پروژه پایتون با Tkinter
🎮 بازی Pong NEO - پروژه کلاسیک با جلوههای مدرن
📊 ویژگیهای کلیدی پروژه:
• 🌈 گرافیک نئونی با رنگهای جذاب (سیان، صورتی، زرد)
• ✨ سیستم ذرات نورانی (Particle System)
• 🎯 ۳ حالت بازی: منو، در حال بازی، توقف
• 🏆 امتیازدهی تا ۱۰ امتیاز برای هر بازیکن
• 🎨 خط وسط نقطهچین با رنگ بنفش
• ⚡ فیزیک واقعی با تغییر زاویه توپ بر اساس نقطه برخورد
• ⌨️ کنترل دو بازیکن با کلیدهای W/S و ↑/↓
• 🔄 انیمیشن عنوان در منوی اصلی
• 💥 افکت ذرات هنگام برخورد توپ با راکتها و دیوارها
• ⏸️ قابلیت توقف بازی با کلید ESC
• 🏁 صفحه پایان بازی با اعلام برنده
• 📏 ابعاد بازی: ۱۰۰۰x۶۰۰ پیکسل
• 🎯 هدف: رسیدن به ۱۰ امتیاز زودتر از حریف
🔧 مشخصات فنی پروژه:
• زبان برنامهنویسی: Python 3.8+
• کتابخانههای استفاده شده: tkinter, random, math
• حجم فایل: ۳۸ کیلوبایت
• تعداد خطوط کد: ۴۵۰+ خط کد تمیز و کامنتگذاری شده
• ساختار: برنامهنویسی شیگرا (OOP) با کلاس ModernPong
• نرخ فریم: ۶۰ فریم بر ثانیه
• مدیریت خطاهای پیشرفته
🎨 پالت رنگی نئونی:
• پسزمینه: #0a0a14 (بنفش تیره)
• راکت چپ (بازیکن ۱): #00ffff (سیان)
• راکت راست (بازیکن ۲): #ff64ff (صورتی)
• توپ: #ffff64 (زرد)
• متن: #c8c8ff (بنفش روشن)
• خط وسط: #404060 (بنفش)
📐 مشخصات فنی:
• اندازه راکتها: ۱۵x۱۲۰ پیکسل
• اندازه توپ: ۱۸x۱۸ پیکسل
• سرعت راکت: ۸ پیکسل/فریم
• سرعت اولیه توپ: ۵ پیکسل/فریم
• تعداد ذرات: ۵ ذره در هر برخورد
• عمر ذرات: ۲۰-۴۰ فریم
💻 نحوه اجرا:
# روش اول: اجرای مستقیم
python pong_neo.py
# روش دوم: اجرا در محیط مجازی (توصیه شده)
python -m venv venv
source venv/bin/activate # در لینوکس/مک
venv\Scripts\activate # در ویندوز
python pong_neo.py
📁 ساختار پروژه:
pong-neo-game/
├── pong_neo.py # فایل اصلی پروژه
├── README.md
🎨 طراحی بصری:
🖼️ صفحه اصلی (Menu):
• عنوان "PONG NEO" با انیمیشن بالا و پایین
• راهنمای کامل بازی در ۵ خط
• پسزمینه تیره با خط وسط نقطهچین
🎮 صفحه بازی:
• راکت چپ سیان، راکت راست صورتی
• توپ زرد با ذرات نورانی
• امتیاز در وسط صفحه با فونت درشت
• خط وسط نقطهچین بنفش
✨ افکتهای ذرات:
• ذرات در ۵ جهت مختلف
• محو شدن تدریجی با کاهش شفافیت
• رنگهای متناسب با محل برخورد
• حرکت تصادفی ذرات
⌨️ کنترلهای بازی:
🎮 بازیکن ۱ (چپ):
• W: حرکت به بالا
• S: حرکت به پایین
🎮 بازیکن ۲ (راست):
• ↑: حرکت به بالا
• ↓: حرکت به پایین
⌨️ کنترلهای عمومی:
• Space: شروع بازی / ادامه بعد از پایان
• ESC: توقف/بازگشت به منو
🚀 نحوه بازی:
۱. اجرای برنامه
۲. صفحه منو با انیمیشن عنوان نمایش داده میشود
۳. Space بزنید تا بازی شروع شود
۴. بازیکن ۱ با کلیدهای W/S راکت را حرکت دهد
۵. بازیکن ۲ با کلیدهای ↑/↓ راکت را حرکت دهد
۶. توپ با برخورد به راکتها تغییر جهت میدهد
۷. زاویه توپ بر اساس نقطه برخورد با راکت تغییر میکند
۸. با برخورد توپ به دیوارهها، ذرات نورانی ایجاد میشود
۹. هر بار که توپ از راکت عبور کند، حریف امتیاز میگیرد
۱۰. اولین بازیکنی که به ۱۰ امتیاز برسد، برنده میشود
۱۱. در صفحه Game Over، Space بزنید برای بازی جدید
۱۲. با ESC میتوانید بازی را متوقف کنید
🔄 منطق بازی:
📐 فیزیک توپ:
• سرعت ثابت در محور X
• تغییر زاویه بر اساس فاصله از مرکز راکت
• hit_pos بین ۱- و ۱
• ball_speed_y = hit_pos * ۱۰
💥 برخورد با راکت:
• تشخیص با مختصات
• تغییر جهت در محور X
• تغییر زاویه در محور Y
• ایجاد ذرات در نقطه برخورد
✨ سیستم ذرات:
• هر ذره: [x, y, dx, dy, color, lifetime]
• حرکت با سرعت تصادفی
• کاهش عمر هر فریم
• محو شدن تدریجی با کاهش alpha
🏆 امتیازدهی:
• توپ از چپ خارج شود: امتیاز برای بازیکن راست
• توپ از راست خارج شود: امتیاز برای بازیکن چپ
• ریست توپ در وسط پس از هر گل
• پایان بازی با رسیدن به ۱۰ امتیاز
🎯 پیامهای بازی:
✅ صفحه منو:
• "PONG NEO" با انیمیشن
• "SPACE: Start Game"
• "ESC: Pause/Menu"
• "Player 1: W / S"
• "Player 2: ↑ / ↓"
⏸️ حالت توقف:
• نمایش منو با انیمیشن عنوان
• عدم حرکت توپ و راکتها
🏁 صفحه پایان:
• "GAME OVER" بزرگ
• "PLAYER 1 WINS!" یا "PLAYER 2 WINS!" با رنگ مربوطه
• نمایش امتیاز نهایی
• "PRESS SPACE TO CONTINUE"
⭐ نقاط قوت پروژه:
• کد کاملاً تمیز و کامنتگذاری شده
• رعایت اصول برنامهنویسی شیگرا (OOP)
• گرافیک نئونی جذاب
• سیستم ذرات پیشرفته
• فیزیک واقعی با تغییر زاویه
• ۶۰ فریم بر ثانیه روان
• کنترل همزمان دو بازیکن
• ۳ حالت مختلف بازی
• بدون وابستگی به کتابخانههای خارجی
• قابل اجرا روی ویندوز، لینوکس و مک
• حجم کم و عملکرد عالی
• طراحی مدرن و حرفهای
🎯 موارد استفاده:
• بازی دو نفره سرگرمکننده
• یادگیری برنامهنویسی بازی
• پروژه دانشجویی
• آموزش مفاهیم فیزیک در بازی
• تمرین کار با Canvas و انیمیشن
• آشنایی با سیستم ذرات (Particle System)
📌 نکات فنی:
• استفاده از set برای مدیریت کلیدهای همزمان
• تشخیص برخورد با مختصات
• محاسبه زاویه با فرمول hit_pos / ۱۰
• انیمیشن عنوان با متغیر title_dir
• ذرات با لیست و حذف بر اساس lifetime
• نرخ فریم ۶۰ با after(16)
با افتخار از درخت کد
محمدمهدی محمودی
treec.net | mohammadmahdimahmoudi.ir