بازی مار - پروژه پایتون با Tkinter
🐍 بازی مار - پروژه کلاسیک پایتون
📊 ویژگیهای کلیدی پروژه:
• 🐍 مار با قابلیت حرکت در ۴ جهت (بالا، پایین، چپ، راست)
• 🍎 غذای تصادفی با انیمیشن چشمکزن
• 📊 گرید ۲۰x۲۰ با خطوط شبکه
• 🏆 سیستم امتیازدهی (هر غذا +۱۰ امتیاز)
• ⚡ افزایش سرعت به ازای هر ۵۰ امتیاز
• 💾 ذخیره خودکار رکورد در فایل
• ⏸️ قابلیت توقف/ادامه بازی با Space یا دکمه
• 🚫 تشخیص برخورد با دیوار (آزاد - تلهپورت)
• 💀 تشخیص برخورد با خود
• 🎮 نمایش امتیاز و رکورد در پنل بالا
• 📈 نمایش سطح سرعت فعلی
• 🔄 قابلیت شروع مجدد بازی
• 🎨 طراحی چشمها برای سر مار
• 🌙 تم تیره حرفهای
🔧 مشخصات فنی پروژه:
• زبان برنامهنویسی: Python 3.8+
• کتابخانههای استفاده شده: tkinter, random, time
• حجم فایل: ۲۴ کیلوبایت
• تعداد خطوط کد: ۳۰۰+ خط کد تمیز و کامنتگذاری شده
• ساختار: برنامهنویسی شیگرا (OOP) با کلاس SnakeGame
• معماری ماژولار با توابع مجزا
• مدیریت خطاهای پیشرفته
🎮 قوانین بازی:
🐍 مار:
• طول اولیه: ۳ خانه
• موقعیت اولیه: (۱۰,۱۰), (۹,۱۰), (۸,۱۰)
• جهت اولیه: راست
🍎 غذا:
• ظاهر شدن در مکان تصادفی
• هرگز روی بدن مار ظاهر نمیشود
• چشمکزن با دو رنگ قرمز
📊 امتیاز:
• هر غذا: +۱۰ امتیاز
• نمایش در پنل بالا با رنگ فیروزهای
⚡ سرعت:
• سرعت اولیه: ۱۵۰ میلیثانیه
• افزایش سرعت به ازای هر ۵۰ امتیاز
• نمایش سطح سرعت (۱ تا ...)
🏆 رکورد:
• ذخیره خودکار در فایل snake_highscore.txt
• نمایش در پنل بالا با رنگ نارنجی
💻 نحوه اجرا:
# روش اول: اجرای مستقیم
python snake_game.py
# روش دوم: اجرا در محیط مجازی (توصیه شده)
python -m venv venv
source venv/bin/activate # در لینوکس/مک
venv\Scripts\activate # در ویندوز
python snake_game.py
📁 ساختار پروژه:
snake-game/
├── snake_game.py # فایل اصلی پروژه
├── snake_highscore.txt # فایل ذخیره رکورد (ایجاد خودکار)
├── README.md
🎨 طراحی بصری:
📊 پنل اطلاعات (بالا):
• امتیاز (🎯) با رنگ فیروزهای (#4ecdc4)
• رکورد (🏆) با رنگ نارنجی (#ff9f43)
• سرعت (⚡) با رنگ قرمز (#ff6b6b)
• پسزمینه تیره (#1a1a24)
🎮 صفحه بازی (وسط):
• گرید ۵۰۰x۵۰۰ پیکسل
• سلولهای ۲۵x۲۵ پیکسل
• خطوط شبکه خاکستری (#3a3a45)
• پسزمینه تیره (#2a2a35)
🐍 مار:
• سر: رنگ فیروزهای (#4ecdc4) با چشمهای سفید
• بدن: رنگ فیروزهای تیرهتر (#45b7aa)
• چشمها: دایرههای سفید کوچک
🍎 غذا:
• رنگ قرمز چشمکزن (#ff6b6b / #ff8a8a)
• برق سفید روی غذا
• شکل دایرهای با هایلایت
🎮 پنل کنترل (پایین):
• دکمه "بازی جدید" (🔄) با رنگ فیروزهای
• دکمه "توقف/ادامه" (⏸️) با رنگ نارنجی
• راهنمای استفاده از کلیدهای جهتدار
🎨 پالت رنگی:
• پسزمینه اصلی: #0a0a0f (مشکی)
• پنل اطلاعات: #1a1a24 (مشکی روشن)
• صفحه بازی: #2a2a35 (خاکستری تیره)
• خطوط شبکه: #3a3a45 (خاکستری)
• سر مار: #4ecdc4 (فیروزهای)
• بدن مار: #45b7aa (فیروزهای تیره)
• امتیاز: #4ecdc4 (فیروزهای)
• رکورد: #ff9f43 (نارنجی)
• سرعت: #ff6b6b (قرمز)
• غذای فعال: #ff6b6b (قرمز)
• غذای چشمک: #ff8a8a (قرمز روشن)
⌨️ کنترلهای بازی:
🔼 پیکان بالا: حرکت به بالا
🔽 پیکان پایین: حرکت به پایین
◀️ پیکان چپ: حرکت به چپ
▶️ پیکان راست: حرکت به راست
␣ Space: توقف/ادامه بازی
🚀 نحوه بازی:
۱. اجرای برنامه
۲. بازی به طور خودکار شروع میشود
۳. با کلیدهای جهتدار مار را حرکت دهید
۴. غذاهای قرمز را بخورید:
• هر غذا +۱۰ امتیاز
• طول مار افزایش مییابد
• سرعت افزایش مییابد (هر ۵۰ امتیاز)
۵. از برخورد با بدن خود جلوگیری کنید
۶. میتوانید با Space بازی را متوقف کنید
۷. برای شروع مجدد، دکمه "بازی جدید" را بزنید
🔄 منطق بازی:
🎯 حرکت:
• ذخیره جهت بعدی در next_direction
• جلوگیری از حرکت برعکس
• بهروزرسانی جهت در هر فریم
📏 برخورد با دیوار:
• سیستم تلهپورت (آزاد)
• مار از یک طرف خارج و از طرف مقابل وارد میشود
💀 برخورد با خود:
• تشخیص با بررسی new_head in snake
• پایان بازی و نمایش Game Over
🍎 خوردن غذا:
• افزایش امتیاز
• افزایش سرعت در امتیازهای ۵۰، ۱۰۰، ...
• ایجاد غذای جدید در مکان تصادفی
• عدم حذف دم (افزایش طول)
📈 سیستم سرعت:
• سرعت اولیه: ۱۵۰ms
• کاهش ۱۰ms به ازای هر ۵۰ امتیاز
• حداقل سرعت: ۵۰ms
• نمایش سطح سرعت
🏆 ذخیره رکورد:
• خواندن از فایل در شروع بازی
• ذخیره خودکار در هر رکورد جدید
• نمایش در پنل بالا
⏸️ حالت توقف:
• توقف حرکت مار
• نمایش پیام "⏸️ مکث" روی صفحه
• ادامه با Space مجدد
🎯 پیامهای بازی:
✅ شروع بازی:
• حرکت خودکار مار
• نمایش غذا
⏸️ حالت توقف:
• نمایش "⏸️ مکث" با رنگ نارنجی
• عدم حرکت مار
💀 پایان بازی:
• نمایش "🎮 بازی تمام شد!" با رنگ قرمز
• نمایش امتیاز نهایی با رنگ فیروزهای
• غیرفعال شدن حرکت
🔄 شروع مجدد:
• ریست مار به موقعیت اولیه
• ریست امتیاز و سرعت
• ایجاد غذای جدید
⭐ نقاط قوت پروژه:
• کد کاملاً تمیز و کامنتگذاری شده
• رعایت اصول برنامهنویسی شیگرا (OOP)
• گرافیک جذاب با Canvas
• انیمیشن چشمکزن برای غذا
• سیستم افزایش سرعت پویا
• ذخیره و بازیابی رکورد
• کنترلهای روان با صفحه کلید
• قابلیت توقف/ادامه بازی
• بدون وابستگی به کتابخانههای خارجی
• قابل اجرا روی ویندوز، لینوکس و مک
• حجم کم و عملکرد سریع
• طراحی مدرن با تم تیره
🎯 موارد استفاده:
• سرگرمی و بازی کلاسیک
• یادگیری برنامهنویسی بازی
• پروژه دانشجویی
• آموزش مفاهیم حلقه، لیست و random
• تمرین کار با Canvas در Tkinter
• آشنایی با منطق بازیهای آرکید
📌 نکات فنی:
• استفاده از لیست برای ذخیره موقعیت مار
• تلهپورت با عملگر modulo
• تشخیص برخورد با in
• ایجاد غذای تصادفی با while loop
• انیمیشن با after و تابع بازگشتی
• ذخیره فایل با open
با افتخار از درخت کد
محمدمهدی محمودی
treec.net | mohammadmahdimahmoudi.ir