آموزش زبان ++C - مقدمه

آموزش برنامه نویسی ++C – ایجاد بازی نه خانه ( tic_tac_toe )

بازی نه خانه

بازی نه خانه یک بازی بسیار سرگرم کننده است که حالات برنده شدن در آن ۸ تا (سه حالت سطر و سه حالت ستون و دو حالت ضربدری) است.
ما برای آموزش ایجاد این بازی برنامه را برای توضیح بهتر قسمت به قسمت ایجاد می کنیم و بر کد های برنامه می افزاییم.
قسمت اول:
part1
توضیحات: در این قسمت ابتدا ۹ خانه ای که در مقاله ی قبل آموزش داده بودیم را ایجاد می کنیم.
Link
نکته: ما میخواهیم با فشار دادن هر شماره در کیبورد در این ۹ خانه دایره یا ضربدر رسم شود.
مثال:با فشار دادن عدد ۱:
teory1
سپس عدد ۲:
teory2

بازی نه خانه

قسمت دوم:
part2
توضیحات: در این قسمت ما یک آرایه ی ۳ در ۳ برای برسی برنده شدن دایره یا ضربدر ایجاد می کنیم که مقدار آنرا برابر صفر قرار می دهیم چون در ابتدای بازی آرایه ها که نشانگر هر خانه از بازی نه خانه قرار دهیم خالی هستند.
نکته: ابتدا نوبت با دایره است سپس با ضربدر.
سپس یک متغیر از نوع char با نام ch ایجاد می کنیم(برای اینکه میخواهیم کاراکتر ۱ تا ۹ را بگیریم) و یک متغیر دیگر نیز از همین نوع بانام nobat ایجاد می کنیم که نوبت هارا با آن مشخص کنیم(ابتدا نوبت را به دایره می دهیم پس آن را برابر o (اُ) قرار می دهیم).
یک حلقه ی while ایجاد می کنیم و شرط داخل آن را ۱ قرار می دهیم چون نمیدانیم که بازی کی تمام می شود (در تمام بازی ها همینطور است) و کد های داخل while در حالت بینهایت قرار می گیرند.
حالا از متغیر ch برای گرفتن متغیر استفاده می کنیم. برای گرفتن متغیر از تابع getch استفاده می شود.
البته تابع های دیگری نیز وجود دارند مانند getchar و getche ولی چون تابع getch متغیر را نمایش نمی دهد و برای رفتن به مرحله ی بعد enter هم نمی خواهد پس ما از آن استفاده می کنیم.

بازی نه خانه

قسمت سوم:
part3_0

part3_1

part3_2

part3_3
توضیحات: ما در این قسمت میخواهیم با زدن هر عدد هم دایره و هم ضربدر در خانه ی مربوط به آن عدد ایجاد شود.
یک else if برای گرفتن عدد x هم در آخر برنامه گذاشته ایم و در به این معنی است که اگر کراکتر ورودی x بوده باشد از بازی خارج شویم(دستور break).
نکته: برای ایجاد ضربدر از دو دستور line استفاده می شود و برای ایجاد دایره از دستور circle.
خروجی تا الان:
با زدن دکمه ی ۵:
out1
نکته: برای رسم دایره و ضربدر باید مختصات را بسیار دقیق وارد کنید.
نکته برای خروج از برنامه از دکمه ی Enter استفاده نکنید ممکن است برنامه هنگ کند. برای خروج از دکمه ی x استفاده شود.

بازی نه خانه

قسمت چهارم:
part4
توضیحات: همانطور که در تصویر مشاهده می کنید باید یک if و یک else را در if اولی و else if های بعدی اضافه کنیم.
ما در این قسمت میخواهیم نوبت را مشخص کنیم. در حال حاضر بعد از زدن هر شماره از کلید ها هم دایره و هم خط ها رسم می شوند و ما میخواهیم گذاشتن if و else این مشکل را حل کنیم.
خب اگر یادتان باشد ما متغیری با نام nobat ایجاد کرده بودیم که مقدار آن را برابر o قراردادیم.
خب ما حالا میخواهیم شرط هایی را اضافه کنیم به این صورت: اگر ‘nobat=’o بود دایره را رسم کن سپس نوبت را بده به x وگرنه ضربدر را رسم و nobat را بده به o (همانطور که در تصویر میبینید).
پس دستورات circle و line هارا در این شرط ها می نویسیم (همانند تصویر).
ما فقط یک قسمت برنامه را نشان داده ایم با گرفتن عدد ۱ ولی شما باید آنرا برای گرفتن اعداد دیگر نیز بنویسید.
اگر برنامه را نوشته اید و در اجرا اگر برای اولین بار عددی را فشار دهید ابتدا در آن خانه ی مورد نظر دایره رسم می شود و اگر برای بار دوم همان عدد را فشار دهید در همان خانه علاوه بر دایره ضربدر نیز رسم می شود.
برای حل این مشکل از آرایه هایی که در ابتدا تعریف کرده ایم استفاده می کنیم و به قسمت بعدی توضیحات مراجعه کنید.

بازی نه خانه

قسمت پنجم:

توضیحات: در این قسمت باید یک شرط دیگر هم  if و else if های بیرونی اضافه کنیم.
اندیس های آرایه که به هر خانه اختصاص داده ایم:
teory3
خب شرط ما در این بخش این است که اگر اندیس آرایه برابر صفر بود می توانید در آن دایره یا ضربدر رسم کنید و اگر نوبت با داره باشد دایره را در آن رسم کرده و اندیس آن خانه از آرایه را برابر ۱ می کند و همین امر برای ضربدر هم صدق می کند ولی فقط به جای ۱ در آن اندیس مقدار ۲ قرار داده می شود.
عدد ۱ و ۲ را که به ترتیب به دایره و ضربدر اختصاص داده ایم که برای مقایسه آن ها در برنده شدن است که در بخش بعدی توضیح می دهیم.
کاری که موقع اجرای بازی تا اینجا انجام می شود: ما عدد یک را میزنیم و چون نوبت اول با دایره است در خانه ی ۱ دایره چاپ می شود چون اندیس مربوط به خانه ۱ برابر صفر است و اندیس مربوط به خانه ی یک برابر ۱ می شود سپس ما برای بار دوم عدد ۱ را فشار می دهیم ولی چون اندیس مربوط به خانه ی ۱ برابر صفر نیست پس هیچ اتفاقی نمی افتد.

بازی نه خانه

قسمت ششم:
برسی برنده شدن o:
part6_0
برسی برنده شد x:
part6_1
نکته: این if و else if را باید در آخر دستورات while بنویسید.
توضیحات: if: ما برسی می کنیم که o در چه حالاتی برنده شده است و اگر برنده نشده است  برنامه به else if می رسد که برنده شدن x را برسی می کند.
برسی if:
حالات برد o به صورت اندیس:
۱- ستون اول
A[0][0]==1 && A[1][0]==1 && A[2][0]==1
۲- ستون دوم
A[0][1]==1 && A[1][1]==1 && A[2][1]==1
۳- ستون سوم
A[0][2]==1 && A[1][2]==1 && A[2][2]==1
۴- سطر اول
A[0][0]==1 && A[0][1]==1 && A[0][2]==1
۵- سطر دوم
A[1][0]==1 && A[1][1]==1 && A[1][2]==1
۶- سطر سوم
A[2][0]==1 && A[2][1]==1 && A[2][2]==1
۷- ضربدری: از بالا چپ به سمت پایین راست
A[0][0]==1 && A[1][1]==1 && A[2][2]==1
۸- ضربدری: از بالا سمت راست به پایین سمت چپ
A[0][2]==1 && A[1][1]==1 && A[2][0]==1

همین شرط هارا هم برای حالات برنده شدن x می گذاریم فقط با تفاوت اینکه به جای برابری اندیس ها با یک آنهارا برابر با ۲ می کنیم.
دستورات داخل if و else if برسی برنده:
از یک تابع outtextxy استفاده می کنیم که متنی را نمایش دهد که مشخص شود چه کسی برنده شده است.
تابع delay: این تابع یک وقت معنی را بر حسب میلی ثانیه می گیرد و به اندازه همان زمان در خروجی از اجرا شدن دستورات بعد از خود جلوگیری می کند.
مثال:

برنامه به مدت ۵ ثانیه از اجرا شدن متوقف می شود و پس از ۵ ثانیه به کار خود ادامه می دهد.
این تابع در هدرفایل dos.h قرار دارد.
ادامه ی توضیحات: دستور بعد از تابع delay دستور break است که برنامه را از حالت اجرا خارج می کند.

تمام

کد کلی بازی:

اطلاعات بیشتر

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *