این پروژه، پیادهسازی بازی نوستالژیک و استراتژیک دوز ایستاده (Connect Four) به زبان C است که در محیط ترمینال (Console-based TUI) اجرا میشود. این پروژه به عنوان پروژه پایانی درس برنامهنویسی پیشرفته در دانشگاه شیراز توسعه یافته است.
برای کامپایل پروژه با استفاده از کامپایلر gcc دستور زیر را در ترمینال اجرا کنید:
gcc main.c -o connect4پس از کامپایل موفق، بازی را با دستور زیر اجرا کنید:
./connect4این برنامه از ۴ بخش اصلی در منوی خود پشتیبانی میکند:
حالت استاندارد بازی که در آن دو بازیکن به صورت نوبتی مهرههای خود (X و O) را در ستونهای جدول رها میکنند.
در این حالت، حرکات بازیکن دوم از طریق یک فایل متنی مجزا خوانده و اعمال میشود. این قابلیت برای شبیهسازی سناریوهای خاص و تست خودکار (Automated Testing) بسیار کارآمد است.
امکان رقابت با کامپیوتر در دو سطح سختی مختلف:
- حالت آسان (Easy): کامپیوتر حرکات خود را به صورت کاملاً تصادفی (Random) در ستونهای خالی انجام میدهد.
- حالت سخت (Hard): کامپیوتر از یک الگوریتم پیشبینی حرکت (Look-ahead) استفاده میکند. در این حالت، هوش مصنوعی ابتدا جدول را برای پیروزی قطعی خود در حرکت جاری بررسی میکند و در غیر این صورت، حرکات رقیب را آنالیز کرده و موقعیتهای برد حریف را مسدود (Defensive Move) میکند.
در صورت ذخیره بازی، کاربران میتوانند تمام مراحل و حرکات مسابقه قبلی را به صورت مرحله به مرحله (با فشردن کلید Enter) مجدداً تماشا و تحلیل کنند.
پس از اتمام هر بازی، برنامه امکان ذخیرهسازی تاریخچه مسابقه را به کاربر میدهد. در صورت تایید، اطلاعات متادیتا و رشته حرکات در فایل متنی database.txt با فرمت استاندارد زیر آپلود میشوند تا بعداً در بخش Replay قابل بازیابی باشند:
[Game_Name] [Rows] [Cols] [Move_Count] [Move1] [Move2] ...
در ابتدای بازی، ابعاد ماتریس زمین توسط کاربر تعیین میشود. طبق قوانین تعریف شده:
- حداقل تعداد سطرها: ۴ سطر (جهت امکان ایجاد خط ۴ تایی همرنگ)
- حداکثر تعداد ستونها: ۱۱ ستون (کمتر از ۱۲)
فایل ورودی برای حالت Human vs File باید یک فایل متنی ساده (.txt) باشد که در هر خط آن، فقط یک عدد صحیح (شاخص ستون مابین 0 تا Cols-1) قرار دارد. به عنوان مثال:
3
2
4
1
کد به صورت کاملاً ماژولار و بر اساس اصول مهندسی نرمافزار پیادهسازی شده و مفاهیم زیر را پوشش میدهد:
- اشارهگر به تابع (Function Pointers): مدیریت داینامیک رفتارهای بازیکنان (انسان، هوش مصنوعی، فایل) در زمان اجرا با استفاده از الگوی طراحی شبیه به چندریختی (Polymorphism).
- مدیریت پویای حافظه (Dynamic Memory Allocation): تخصیص ابعاد جدول بازی روی Heap با آرایههای دوبعدی پویا و آزادسازی کامل آنها (Clean-up) برای جلوگیری از نشت حافظه (Memory Leak).
- مدیریت فایل (File Handling): استفاده بهینه از لایه ورودی/خروجی فایل برای پیادهسازی دیتابیس متنی و ماژول خواندن حرکات.
این پروژه جنبه آموزشی داشته و تحت لایسنس MIT منتشر شده است. استفاده از کد برای یادگیری و توسعه مفاهیم کاملاً آزاد است.
امیدوارم از بازی لذت ببرید! 🎮