درود!
این جا مکانی است ویژه برای دانشجویان مهندسی کامپیوتر / آی تی و نرم افزار و صد البته افرادی که جویندگان دانش و تکنولوژی هستند.
آقایان دانوش ،یاشار و آمالی دارندگان این بلاگ بودند و هم اکنون تنها آقای دانوش مدیریت این وبلاگ را بر عهده دارد، با توجه به زمان بندی ها هم اکنون در این سایت فعالیت پویا ای نداریم.

کد بازی دوز (نسخه D4N005H)

جمعه 13 دی 1392
23:49
دانوش پیچگاه
درود؛

کد بازی دوز بدون نیاز به رنگ ها و با وسیله آرایه ها و البته همراه با راهنما در ادامه همین پست قابل دیدن است.
تنها برای یادگیری از کد ها استفاده نمایید.
بدرود.
پیش از دیدن کد, یک سری اطلاعات خلاصه شده ملزوم است تا با آنها آشنا شوید:

جدول بازی اینگونه تقسیم بندی شده است و بازه ها هم هرکدام از مستطیل های کوچک هستند؛ مختصات ماوس ابتدا سنجیده شده و بازی را طوی متوجه می کنیم تا به طور مناسب مختصات را محاسبه کرده تا در خانه ای که موشواره قرار دارد یک دایره قرمز (کاربر شماره یک) یا بنفش (کاربر شماره دو) ایجاده کرده و مقدار 0 یا 1 را بسته به اینکه چه کاربری بازی را انجام میدهد؛ در آرایه همان قسمت (بازه) قرار می دهد.
عکس خلاصه شده جدول بازی

#include<iostream.h> بخش فراخوانی توابع
#include<conio.h>
#include<graphics.h>
#include<mouse.h>  فراخوانی توابع موشواره
#include<process.h> فراخوانی تابع خروج
#include<dos.h>    فراخوانی توابع صدا
#include<stdlib.h> کد فراخوانی توابع رندم

int AA[3][3]; int BB[3][3];   ساخت آرایه ها

void Copy_right_DANOOSH_Peechgah () این کد علاوه بر ایجاد خطوط و تشکیل جدول؛ آرایه ها را
{                                                                .برابر با عددی غیر صفر و یک می کند
 for (int i=1; i<4; i++)
 {
  for (int j=1; j<4; j++)
  {
  if ((AA[i][j]==0)||(AA[i][j]==1))
  AA[i][j]=rand();
  }
 }
 sound(2014);
 setbkcolor(7);
 delay(95);
 nosound();
 sound(1392);
 delay(95);
 nosound();
 line (0,0,480,0); line (0,0,0,360);
 line (0,120,480,120); line (160,0,160,360);
 line (0,240,480,240); line (320,0,320,360);
 line (0,360,480,360); line (640,0,640,640);
 line (0,480,480,480); line (480,0,480,360);
}

void A(int x, int y, int i, int j)        کدی که دایره بازیکن شماره یک را می نویسد
{ if ((AA[i][j]!=0)&&(AA[i][j]!=1)) .و آرایه های منتخب را برابر با صفر می کند
 {AA[i][j]=1;
 if ((x<160)&&(y<120))  این ها چگونگی تقسیم بندی (بازه بندی) زمین یا جدول
 circle (80,60,60);            .بازی را نشان می دهند؛ رجوع کنید به همان تصویر بالا
 if ((x>160)&&(x<320)&&(y<120))
  circle (240,60,60);
 if ((x>320)&&(x<640)&&(y<120))
  circle (400,60,60);
 if ((x<160)&&(y>120)&&(y<240))
  circle (80,180,60);
 if ((x<160)&&(y>240)&&(y<480))
   circle (80,300,60);
 if ((x>160)&&(y>120)&&(y<240)&&(x<320))
  circle (240,180,60);
 if ((x>320)&&(y>120)&&(y<240)&&(x<640))
  circle (400,180,60);
 if ((x>160)&&(x<320)&&(y>240)&&(y<480))
  circle (240,300,60);
 if ((x>320)&&(x<640)&&(y>240)&&(y<480))
  circle (400,300,60);}
}

void B(int x, int y, int i, int j)    همان کار تابع پیشین را انجام می دهد
{ if ((AA[i][j]!=0)&&(AA[i][j]!=1)) منتهی آرایه های منتخب را برابر با
 {AA[i][j]=0;    .یک می نماید و سپس دایره کاربر دوم را رسم می کند
 if ((x<160)&&(y<120))
 circle (80,60,60);
 if ((x>160)&&(x<320)&&(y<120))
  circle (240,60,60);
 if ((x>320)&&(x<640)&&(y<120))
  circle (400,60,60);
 if ((x<160)&&(y>120)&&(y<240))
  circle (80,180,60);
 if ((x<160)&&(y>240)&&(y<480))
   circle (80,300,60);
 if ((x>160)&&(y>120)&&(y<240)&&(x<320))
  circle (240,180,60);
 if ((x>320)&&(y>120)&&(y<240)&&(x<640))
  circle (400,180,60);
 if ((x>160)&&(x<320)&&(y>240)&&(y<480))
  circle (240,300,60);
 if ((x>320)&&(x<640)&&(y>240)&&(y<480))
  circle (400,300,60);}
}

void RULE ()  این تابع چک میکند که آیا سه آرایه در یک ستون
{                  یال سه آرایه در یک سطر مقدار مساوی دارند یا خیر
 for (int i=1; i<=3; i++) اگر همه برابر باشند بازی تمام می شود
 {
 if ((AA[1][i]==AA[2][i])&&(AA[3][i]==AA[2][i]))
 exit(0);
 if ((AA[i][1]==AA[i][2])&&(AA[i][3]==AA[i][2]))
 exit(0);
 }

}

void main() تابع اصلی بازی
{
 int x,y,c;
 int m=0,d=0;
 initgraph(&m,&d,"");
 initmouse();     فراخوانی دستورات موشواره
 showmouse(); نمایش موشواره
 Copy_right_DANOOSH_Peechgah (); .فراخوانی تابع نخست
 while (1==1) هم استفاده کرد for (;;) می توان به جای این دستور از
 {
  getmouse(&x,&y,&c); مختصات و نوع کلیک (کلیک راست یا چپ) را میگیرد
  if (c==1)        اگر چپ کلیک شد:
  {setcolor(4);  رنگ دایره کاربر نخست
 if ((x<160)&&(y<120)) بازه بندی برای کلیک کردن
 A(x,y,1,1);         آرایه یک یک فراخوانی شده و مقادیر مختصات موشواره وارد داده می شود
 if ((x>160)&&(x<320)&&(y<120))
 A(x,y,1,2);
 if ((x>320)&&(x<640)&&(y<120))
 A(x,y,1,3);
 if ((x<160)&&(y>120)&&(y<240))
 A(x,y,2,1);
 if ((x<160)&&(y>240)&&(y<480))
 A(x,y,3,1);
 if ((x>160)&&(y>120)&&(y<240)&&(x<320))
 A(x,y,2,2);
 if ((x>320)&&(y>120)&&(y<240)&&(x<640))
 A(x,y,2,3);
 if ((x>160)&&(x<320)&&(y>240)&&(y<480))
 A(x,y,3,2);
 if ((x>320)&&(x<640)&&(y>240)&&(y<480))
 A(x,y,3,3);
 setcolor(15);} رنگ به حالت پیش فرض در می آید
  if (c==2)  اگر راست کلیک شد:
  {
 setcolor(5); رنگ دایره بازیکن دوم
 if ((x<160)&&(y<120))
 B(x,y,1,1);
 if ((x>160)&&(x<320)&&(y<120))
 B(x,y,1,2);
 if ((x>320)&&(x<640)&&(y<120))
 B(x,y,1,3);
 if ((x<160)&&(y>120)&&(y<240))
 B(x,y,2,1);
 if ((x<160)&&(y>240)&&(y<480))
 B(x,y,3,1);
 if ((x>160)&&(y>120)&&(y<240)&&(x<320))
 B(x,y,2,2);
 if ((x>320)&&(y>120)&&(y<240)&&(x<640))
 B(x,y,2,3);
 if ((x>160)&&(x<320)&&(y>240)&&(y<480))
 B(x,y,3,2);
 if ((x>320)&&(x<640)&&(y>240)&&(y<480))
 B(x,y,3,3);
 setcolor(15); رنگ به حالت پیش فرض در آید
  }
 RULE(); پس از هر کلیک؛ چک می کند آیا کسی برنده شده است یا خیر
 }
  exit(0);
}