C / Win32 API / Visual C++ 2010

Fifteen Puzzle؛ بازی کلاسیک پانزده‌تایی با Win32 API

Fifteen Puzzle یک بازی کوچک و سبک ویندوزی است که با زبان C و APIهای مستقیم ویندوز نوشته شده است. نسخه‌ی جدید پروژه فقط یک نمونه ساده نیست؛ امکاناتی مثل undo/redo، ذخیره و بارگذاری بازی، restart، توقف موقت، شمارش حرکت‌ها و زمان بازی هم به آن اضافه شده است.

این پروژه برای کسانی مناسب است که می‌خواهند ساخت یک برنامه‌ی GUI واقعی در ویندوز را بدون فریم‌ورک‌های سنگین ببینند؛ از ساخت پنجره و منو گرفته تا کنترل پیام‌ها، رسم کنترل‌های owner-drawn و مدیریت وضعیت داخلی بازی.

اسکرین‌شات بازی Fifteen Puzzle در ویندوز
زبانC
رابط کاربریWin32 API
محیط پروژهVisual C++ 2010
وضعیتنسخه کامل‌تر / آماده دانلود

این برنامه چه کاری انجام می‌دهد؟

بازی از یک جدول ۴ در ۴ تشکیل شده که پانزده خانه‌ی شماره‌دار و یک خانه‌ی خالی دارد. هدف این است که با جابه‌جایی خانه‌ها، عددها دوباره به ترتیب درست قرار بگیرند. برنامه تعداد حرکت‌ها و زمان سپری‌شده را نمایش می‌دهد و وضعیت بازی را در طول اجرا مدیریت می‌کند.

در نسخه‌ی جدید، بازی کامل‌تر شده است. کاربر می‌تواند حرکت‌ها را undo و redo کند، بازی را ذخیره کند، از فایل ذخیره‌شده ادامه دهد، همان بازی را restart کند یا یک چیدمان جدید بسازد. این امکانات باعث شده پروژه از یک تمرین ساده‌ی GUI به یک نمونه آموزشی کامل‌تر برای ساخت برنامه‌های کوچک ویندوزی تبدیل شود.

نکات فنی پروژه

  • برنامه با C نوشته شده و برای ساخت پنجره اصلی، منوها، کنترل‌ها، timer و message loop از Win32 API استفاده می‌کند.
  • خانه‌های بازی به صورت owner-drawn button پیاده‌سازی شده‌اند تا ظاهر هر tile با کد کنترل شود و فقط به ظاهر پیش‌فرض ویندوز وابسته نباشد.
  • منطق بازی در آرایه‌ای ۱۶ خانه‌ای نگهداری می‌شود؛ مقدارهای ۱ تا ۱۵ نشان‌دهنده خانه‌های شماره‌دار و مقدار ۰ نشان‌دهنده خانه خالی است.
  • چیدمان اولیه به صورت تصادفی ساخته می‌شود، اما قبل از شروع بازی از نظر قابل‌حل بودن بررسی می‌شود تا بازی وارد حالت غیرممکن نشود.
  • Undo و redo با نگهداری snapshot کامل از وضعیت بازی پیاده‌سازی شده‌اند؛ هر snapshot شامل صفحه، خانه خالی، تعداد حرکت، زمان، حالت pause و solved است.
  • ذخیره بازی با یک فرمت binary کوچک انجام می‌شود. هر وضعیت صفحه در ۸ بایت pack می‌شود، چون هر خانه فقط به ۴ بیت برای نگهداری مقدار ۰ تا ۱۵ نیاز دارد.
  • Save و Load معمولی از فایل پیش‌فرض game.15 استفاده می‌کنند و Save As / Load From از دیالوگ استاندارد ویندوز برای انتخاب مسیر فایل استفاده می‌کنند.
  • کل پروژه برای Visual C++ 2010 آماده شده و داخل بسته دانلود، فایل اجرایی، سورس کامنت‌گذاری‌شده، فایل‌های پروژه و README قرار دارد.

برای چه کسانی مفید است؟

این پروژه برای کسانی مفید است که مقدمات زبان C را بلد هستند و می‌خواهند وارد برنامه‌نویسی GUI در ویندوز شوند. کد پروژه نشان می‌دهد که یک برنامه کوچک ویندوزی چطور از چند بخش اصلی ساخته می‌شود: entry point، ثبت window class، ساخت پنجره، دریافت messageها، ساخت کنترل‌های فرزند، رسم سفارشی و مدیریت وضعیت داخلی.

از طرف دیگر، چون پروژه امکاناتی مثل save/load و undo/redo دارد، فقط یک مثال ظاهری نیست. می‌شود از آن برای یادگیری طراحی state، ذخیره‌سازی داده، جداسازی نسبی منطق بازی از رابط کاربری و کار با APIهای پایه ویندوز استفاده کرد.

این نسخه برای انتشار عمومی تمیز شده است. فایل‌های build موقت و فایل‌های مخصوص محیط کاربر حذف شده‌اند و سورس اصلی با توضیحات انگلیسی بیشتر آماده شده تا خواندن آن ساده‌تر باشد.