PDA

View Full Version : مبتدی: کمک برای فهمیدن این قطعه کد



Behradln
پنج شنبه 30 اردیبهشت 1395, 16:07 عصر
سلام وقت بخیر خسته نباشید!


با عرض معذرت خدمت اساتید محترم
خیلی مبتدیم تازه دارم کم کم یاد میگیرم برنامه نویسی رو
این سورس کد هستش چندین وقته ذهنمو مشغول کرده چند تا سوال دارم درموردش زیاد نمیفهممش!
اول اینکه تحقیق زیاد کردم راجبش مثلا میدونم که از کتابخانه ی stdio برای توابع زبان سی استفاده کرده توش.تا حدی میدونم ولی یک سری از چیزاشو نمیفهمم!
ممکنه یه نفر راهنماییم کنه این قسمت هایی سورس کد که مشخص کردم تو پست بعدی ادقیقا چه کاری انجام میده منظورم قسمت های اصلیشه ممنون میشم راهنماییم کنید.


#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h> // for random numbers
class dooz
{
public:
void copyr();
void amaliat();


private:
int i;
char z; // z baraie Y or N
char e;


};


void dooz::copyr()
{
textcolor(GREEN);
cprintf( "+------------------------------------------------------------------------------+\r");
cprintf( "| PROJECT NAME: Dooz Programmer : Mohamad.Golshani| \r");
cprintf( "+------------------------------------------------------------------------------+ \r\n");
}


void dooz::amaliat()
{


int i;
char z; // z baraie Y or N
randomize ();
int x=rand() ;
x= ((x)%2);






char a[4][3];
a[0][0]='1'; a[0][1]='2';a[0][2]='3';
a[1][0]='4'; a[1][1]='5';a[1][2]='6';
a[2][0]='7'; a[2][1]='8';a[2][2]='9';
//
cout<<"RANDOM START :";
if (x==0)
cout<<"Computer is first"; // agar x = 0 shod computer bazi ro shoroo mikone
else
cout<<"You are first "; // agar x = 0 shod karbar bazi ro shoroo mikone


cout<<"\n\n You :O \n computer :X \n";


cout<<"\n be delkhah yek dokme ra feshar dahid.";


getche();


while(x!=2) // +++++++++++++++ halgheie koli +++++++++++++++++++++
{ //while


if(x==0)
{ //if 1
x=1;


//win?
for (i=0; i<3 ; i++)
{
if (a[i][0]==1 && a[i][1]==1 && a[i][2]==1) // 1: code Asciie adamak ast


{ cout<<"\n Tabirk ! Shoma Barande Shodid \n";
getche(); }
}
//
for (i=0; i<3 ; i++)
{
if (a[0][i]==1 && a[1][i]==1 && a[2][i]==1)


{ cout<<"\n Tabirk ! Shoma Barande Shodid \n";
getche(); }
}
//
if ( (a[0][0]==1 && a[1][1]==1 && a[2][2]==1) || (a[0][2]==1 && a[1][1]==1 && a[2][0]==1) )


{
cout<<"\n Tabirk ! Shoma Barande Shodid \n";


getche(); }






//win 1 !!
else if (a[0][0]=='X' && a[0][1]=='X' && a[0][2]=='3')
a[0][2]='X';
else if (a[0][0]=='X' && a[0][2]=='X' && a[0][1]=='2')
a[0][1]='X';
else if (a[0][0]=='X' && a[1][0]=='X' && a[2][0]=='7')
a[2][0]='X';
else if (a[0][0]=='X' && a[2][0]=='X' && a[1][0]=='4')
a[1][0]='X';
else if (a[0][0]=='X' && a[1][1]=='X' && a[2][2]=='9')
a[2][2]='X';






else if (a[0][2]=='X' && a[0][1]=='X' && a[0][0]=='1')
a[0][0]='X';
else if (a[0][2]=='X' && a[1][1]=='X' && a[2][0]=='7')
a[2][0]='X';
else if (a[0][2]=='X' && a[1][2]=='X' && a[2][2]=='9')
a[2][2]='X';
else if (a[0][2]=='X' && a[2][2]=='X' && a[1][2]=='6')
a[1][2]='X';






else if (a[2][0]=='X' && a[1][0]=='X'&& a[0][0]=='1')
a[0][0]='X';
else if (a[2][0]=='X' && a[2][1]=='X' && a[2][2]=='9')
a[2][2]='X';
else if (a[2][0]=='X' && a[2][2]=='X' && a[2][1]=='8')
a[2][1]='X';
else if (a[2][0]=='X' && a[1][1]=='X' && a[0][2]=='3')
a[0][2]='X';






else if (a[2][2]=='X' && a[1][2]=='X'&& a[0][2]=='3')
a[0][2]='X';
else if (a[2][2]=='X' && a[2][1]=='X' && a[2][0]=='7')
a[2][0]='X';
else if (a[2][2]=='X' && a[1][1]=='X' && a[0][0]=='1')
a[0][0]='X';


//win 2 !!


else if (a[1][2]=='X' && a[1][1]=='X' && a[1][0]=='4')
a[1][0]='X';


else if (a[1][0]=='X' && a[1][1]=='X' && a[1][2]=='6')
a[1][2]='X';


else if (a[0][1]=='X' && a[1][1]=='X' && a[2][1]=='8')
a[2][1]='X';


else if (a[2][1]=='X' && a[1][1]=='X' && a[0][1]=='2')
a[0][1]='X';




//best
else if (a[1][1]=='5')
a[1][1]='X';




//anti lose !!
else if ( (a[0][1]==1 && a[0][2]==1 && a[0][0]=='1') ||(a[2][2]==1 && a[1][1]==1 && a[0][0]=='1')|| (a[1][0]==1 && a[2][0]==1 && a[0][0]=='1') )
a[0][0]='X'; //'1' ra ba 1 ghati nakonam


else if ( (a[0][0]==1 && a[0][2]==1 && a[0][1]=='2') || (a[1][1]==1 && a[2][1]==1 && a[0][1]=='2') )
a[0][1]='X';


else if ( (a[1][2]==1 && a[2][2]==1 && a[0][2]=='3') || (a[2][0]==1 && a[1][1]==1 && a[0][2]=='3') || (a[0][0]==1 && a[0][1]==1 && a[0][2]=='3') )
a[0][2]='X';


else if ( (a[0][0]==1 && a[2][0]==1 && a[1][0]=='4') ||(a[1][2]==1 && a[1][1]==1 && a[1][0]=='4'))
a[1][0]='X';


else if ( (a[1][1]==1 && a[1][0]==1 && a[1][2]=='6') ||(a[0][2]==1 && a[2][2]==1 && a[1][2]=='6') )
a[1][2]='X';


else if ( (a[0][0]==1 && a[1][0]==1 && a[2][0]=='7') ||(a[0][2]==1 && a[1][1]==1 && a[2][0]=='7') || (a[2][2]==1 && a[2][1]==1 && a[2][0]=='7') )
a[2][0]='X';


else if ( (a[0][1]==1 && a[1][1]==1 && a[2][1]=='8') || (a[2][2]==1 && a[2][0]==1 && a[2][1]=='8') )
a[2][1]='X';


else if ( (a[0][0]==1 && a[1][1]==1 && a[2][2]=='9')||(a[0][2]==1 && a[1][2]==1 && a[2][2]=='9')||(a[0][0]==1 && a[2][1]==1 && a[2][2]=='9'))
a[2][2]='X';




//better 1
else if (a[2][2]=='9' && a[0][0]=='1')
a[2][2]='X';
else if (a[2][0]=='7' && a[0][2]=='3')
a[2][0]='X';


//better 2
else if (a[1][0]=='4' && a[1][2]=='6')
a[1][0]='X';
else if (a[0][1]=='2' && a[2][1]=='8')
a[0][1]='X';


//normal 1
else if (a[2][2]=='9')
a[2][2]='X';
else if (a[0][0]=='1')
a[0][0]='X';
else if (a[0][2]=='3')
a[0][2]='X';
else if (a[2][0]=='7')
a[2][0]='X';


//normal 2
else if (a[0][1]=='2')
a[0][1]='X';
else if (a[1][2]=='6')
a[1][2]='X';
else if (a[2][1]=='8')
a[2][1]='X';
else if (a[1][0]=='4')
a[1][0]='X';




else
{//else tt
cout<<"\n Hichkodam Barande Nashodin !! \n";
z='8';
}//else tt


//END GAME ================================================== ===================
while (z=='8')
{//bigin while
cout<<"\n Aya Mikhahid Dobare Bazi konid??(Y/N)";
z=getche();


if (z=='y' || z=='Y')


{//==================
clrscr();
a[0][0]='1'; a[0][1]='2';a[0][2]='3';
a[1][0]='4'; a[1][1]='5';a[1][2]='6';
a[2][0]='7'; a[2][1]='8';a[2][2]='9';
cout<<"Che kasi aval shorou konad? \n\n 1 computer \n 2 shoma \n 3 be soorate tasadofi \n";


z=getche();
if (z=='1')
x=0;
else if (z=='2')
x=1;
else if (z=='3')
{
randomize ();
x=rand() ;
x= ((x)%2);
}
else
{ cout<<"\n\n Gozineye eshtebah ra vared kardid! (1 Ya 2 Ya 3 ra befesharid) ! \n\n"; z='8'; }
}
//=================


else if (z=='n' || z=='N')
x=2;


else
{
cout<<"\n\n Dobare Talash Konid ! ( Y Ya N Ra Bezanid) \n\n";
z='8'; }


}//end while


//================================================== ============================


}//if 1




//
clrscr();
cout<<"\n\n";
textcolor(14);
cprintf(" %c | %c | %c \r\n",a[0][0],a[0][1],a[0][2]) ;
cprintf (" | | \r\n") ;
cprintf (" ______|________|______ \r\n") ;
cprintf (" | | \r\n") ;
cprintf (" | | \r\n") ;
cprintf(" %c | %c | %c \r\n",a[1][0],a[1][1],a[1][2]) ;
cprintf (" | | \r\n") ;
cprintf (" ______|________|______ \r\n") ;
cprintf (" | | \r\n") ;
cprintf (" | | \r\n") ;
cprintf(" %c | %c | %c \r\n",a[2][0],a[2][1],a[2][2]) ;
cprintf (" | | \r\n") ;
textcolor(LIGHTGRAY);
//


if (x==1)
{ //if 2
x=0;




for (i=0; i<3 ; i++)
{
if (a[i][0]=='X' && a[i][1]=='X' && a[i][2]=='X')


{


cout<<"\n Motasefim!Shoma Bakhtid ! \n";
z='8'; }
}


for (i=0; i<3 ; i++)
{
if (a[0][i]=='X' && a[1][i]=='X' && a[2][i]=='X')


{ cout<<"\n Motasefim!Shoma Bakhtid ! \n";
z='8'; }
}


if ( (a[0][0]=='X' && a[1][1]=='X' && a[2][2]=='X') || (a[0][2]=='X' && a[1][1]=='X' && a[2][0]=='X') )


{ cout<<"\n Motasefim!Shoma Bakhtid ! \n";
z='8'; }




if (z!='8')
{//start if vared kardan


char e;
e=getche();


////// agar tamame khaneha zad e shode boodand
if ( a[0][0]!='1' && a[0][1]!='2' && a[0][2]!='3' && a[1][0]!='4' && a[1][1]!='5' && a[1][2]!='6' && a[2][0]!='7' && a[2][1]!='8' && a[2][2]!='9')
{ z='8'; }
//////-----------------------------------------




//vared kardane shomare
else if (e=='1' && a[0][0]!='X' && a[0][0]!=1 )
a[0][0]=1;


else if (e=='2' && a[0][1]!='X' && a[0][1]!=1 )
a[0][1]=1;


else if (e=='3' && a[0][2]!='X' && a[0][2]!=1 )
a[0][2]=1;


else if (e=='4' && a[1][0]!='X' && a[1][0]!=1 )
a[1][0]=1;


else if (e=='5' && a[1][1]!='X' && a[1][1]!=1 )
a[1][1]=1;


else if (e=='6' && a[1][2]!='X' && a[1][2]!=1 )
a[1][2]=1;


else if (e=='7' && a[2][0]!='X' && a[2][0]!=1 )
a[2][0]=1;


else if (e=='8' && a[2][1]!='X' && a[2][1]!=1 )
a[2][1]=1;


else if (e=='9' && a[2][2]!='X' && a[2][2]!=1 )
a[2][2]=1;


else
{ cout<<"\n \a 2 bare talash konid"; x=1 ; }
}//end if vared kardan
}//if 2
}//while
}
void main()
{
clrscr();
dooz R;
R.copyr();
R.amaliat();
}

Behradln
پنج شنبه 30 اردیبهشت 1395, 16:11 عصر
cout<<"\n\n";textcolor(14);
cprintf(" %c | %c | %c \r\n",a[0][0],a[0][1],a[0][2]) ;
cprintf (" | | \r\n") ;
cprintf (" ______|________|______ \r\n") ;
cprintf (" | | \r\n") ;
cprintf (" | | \r\n") ;
cprintf(" %c | %c | %c \r\n",a[1][0],a[1][1],a[1][2]) ;
cprintf (" | | \r\n") ;
cprintf (" ______|________|______ \r\n") ;
cprintf (" | | \r\n") ;
cprintf (" | | \r\n") ;
cprintf(" %c | %c | %c \r\n",a[2][0],a[2][1],a[2][2]) ;
cprintf (" | | \r\n") ;
textcolor(LIGHTGRAY);
//



این یکی هم :
for (i=0; i<3 ; i++){
if (a[i][0]==1 && a[i][1]==1 && a[i][2]==1) // 1: code Asciie adamak ast


{ cout<<"\n Tabirk ! Shoma Barande Shodid \n";
getche(); }
}
//
for (i=0; i<3 ; i++)
{
if (a[0][i]==1 && a[1][i]==1 && a[2][i]==1)


{ cout<<"\n Tabirk ! Shoma Barande Shodid \n";
getche(); }
}
//
if ( (a[0][0]==1 && a[1][1]==1 && a[2][2]==1) || (a[0][2]==1 && a[1][1]==1 && a[2][0]==1) )


{
cout<<"\n Tabirk ! Shoma Barande Shodid \n";


getche(); }






//win 1 !!
else if (a[0][0]=='X' && a[0][1]=='X' && a[0][2]=='3')
a[0][2]='X';
else if (a[0][0]=='X' && a[0][2]=='X' && a[0][1]=='2')
a[0][1]='X';
else if (a[0][0]=='X' && a[1][0]=='X' && a[2][0]=='7')
a[2][0]='X';
else if (a[0][0]=='X' && a[2][0]=='X' && a[1][0]=='4')
a[1][0]='X';
else if (a[0][0]=='X' && a[1][1]=='X' && a[2][2]=='9')
a[2][2]='X';






else if (a[0][2]=='X' && a[0][1]=='X' && a[0][0]=='1')
a[0][0]='X';
else if (a[0][2]=='X' && a[1][1]=='X' && a[2][0]=='7')
a[2][0]='X';
else if (a[0][2]=='X' && a[1][2]=='X' && a[2][2]=='9')
a[2][2]='X';
else if (a[0][2]=='X' && a[2][2]=='X' && a[1][2]=='6')
a[1][2]='X';






else if (a[2][0]=='X' && a[1][0]=='X'&& a[0][0]=='1')
a[0][0]='X';
else if (a[2][0]=='X' && a[2][1]=='X' && a[2][2]=='9')
a[2][2]='X';
else if (a[2][0]=='X' && a[2][2]=='X' && a[2][1]=='8')
a[2][1]='X';
else if (a[2][0]=='X' && a[1][1]=='X' && a[0][2]=='3')
a[0][2]='X';






else if (a[2][2]=='X' && a[1][2]=='X'&& a[0][2]=='3')
a[0][2]='X';
else if (a[2][2]=='X' && a[2][1]=='X' && a[2][0]=='7')
a[2][0]='X';
else if (a[2][2]=='X' && a[1][1]=='X' && a[0][0]=='1')
a[0][0]='X';


//win 2 !!


else if (a[1][2]=='X' && a[1][1]=='X' && a[1][0]=='4')
a[1][0]='X';


else if (a[1][0]=='X' && a[1][1]=='X' && a[1][2]=='6')
a[1][2]='X';


else if (a[0][1]=='X' && a[1][1]=='X' && a[2][1]=='8')
a[2][1]='X';


else if (a[2][1]=='X' && a[1][1]=='X' && a[0][1]=='2')
a[0][1]='X';




//best
else if (a[1][1]=='5')
a[1][1]='X';




//anti lose !!
else if ( (a[0][1]==1 && a[0][2]==1 && a[0][0]=='1') ||(a[2][2]==1 && a[1][1]==1 && a[0][0]=='1')|| (a[1][0]==1 && a[2][0]==1 && a[0][0]=='1') )
a[0][0]='X'; //'1' ra ba 1 ghati nakonam


else if ( (a[0][0]==1 && a[0][2]==1 && a[0][1]=='2') || (a[1][1]==1 && a[2][1]==1 && a[0][1]=='2') )
a[0][1]='X';


else if ( (a[1][2]==1 && a[2][2]==1 && a[0][2]=='3') || (a[2][0]==1 && a[1][1]==1 && a[0][2]=='3') || (a[0][0]==1 && a[0][1]==1 && a[0][2]=='3') )
a[0][2]='X';


else if ( (a[0][0]==1 && a[2][0]==1 && a[1][0]=='4') ||(a[1][2]==1 && a[1][1]==1 && a[1][0]=='4'))
a[1][0]='X';


else if ( (a[1][1]==1 && a[1][0]==1 && a[1][2]=='6') ||(a[0][2]==1 && a[2][2]==1 && a[1][2]=='6') )
a[1][2]='X';


else if ( (a[0][0]==1 && a[1][0]==1 && a[2][0]=='7') ||(a[0][2]==1 && a[1][1]==1 && a[2][0]=='7') || (a[2][2]==1 && a[2][1]==1 && a[2][0]=='7') )
a[2][0]='X';


else if ( (a[0][1]==1 && a[1][1]==1 && a[2][1]=='8') || (a[2][2]==1 && a[2][0]==1 && a[2][1]=='8') )
a[2][1]='X';


else if ( (a[0][0]==1 && a[1][1]==1 && a[2][2]=='9')||(a[0][2]==1 && a[1][2]==1 && a[2][2]=='9')||(a[0][0]==1 && a[2][1]==1 && a[2][2]=='9'))
a[2][2]='X';




//better 1
else if (a[2][2]=='9' && a[0][0]=='1')
a[2][2]='X';
else if (a[2][0]=='7' && a[0][2]=='3')
a[2][0]='X';


//better 2
else if (a[1][0]=='4' && a[1][2]=='6')
a[1][0]='X';
else if (a[0][1]=='2' && a[2][1]=='8')
a[0][1]='X';


//normal 1
else if (a[2][2]=='9')
a[2][2]='X';
else if (a[0][0]=='1')
a[0][0]='X';
else if (a[0][2]=='3')
a[0][2]='X';
else if (a[2][0]=='7')
a[2][0]='X';


//normal 2
else if (a[0][1]=='2')
a[0][1]='X';
else if (a[1][2]=='6')
a[1][2]='X';
else if (a[2][1]=='8')
a[2][1]='X';
else if (a[1][0]=='4')
a[1][0]='X';




else
{//else tt
cout<<"\n Hichkodam Barande Nashodin !! \n";
z='8';
}//else tt


البته قسمت های اصلیه برنامس دیگه تاحدی فهمیدم ولی باز مشکل دارم!
الان این ماتریس رو ساخته بعد خوب نمیفهمم چطور باخت و برد رو مشخص میکنه.

و یه سوال دیگه این کارکتر 8 چیه؟ به معنیه باخته؟

while (z=='8'){//bigin while
cout<<"\n Aya Mikhahid Dobare Bazi konid??(Y/N)";
z=getche();

Behradln
شنبه 01 خرداد 1395, 11:51 صبح
کسی نیست کمکی کنه؟؟؟

amirtork
شنبه 01 خرداد 1395, 12:25 عصر
سلام،
تاپیکتون زیاد منظم نیست :-)
اگر میشه سوالتون رو دقیق تر بپرسید و ذکر کنید در کدوم قطعه کد سوال دارید.

Behradln
شنبه 01 خرداد 1395, 12:51 عصر
سلام،
تاپیکتون زیاد منظم نیست :-)
اگر میشه سوالتون رو دقیق تر بپرسید و ذکر کنید در کدوم قطعه کد سوال دارید.

سلام ممنون از توجهتون
میدونم یکم طولانیه ولی مجبوری بود شرمنده
اگر دقت کنید در پست اول سورس کامل برنامه رو گذاشتم
در پست دوم قسمت هایی از برنامه که برام قابل فهم نیستش

amirtork
شنبه 01 خرداد 1395, 14:11 عصر
سلام مجدد،
در مورد سوال اولتون که در مورد شکل جدول دوز هست، اگر دقت کنید در داخل " " ها، یک سری %c در هر سطر به چشم میخوره، این %c ها، نماینده ی محل قرار گیری اون عباراتی هست که بعد از ',' اومده، برای اینکه بهتر درک کنید، پیشنهاد میکنم کد زیر رو اجرا کنید.

#include <iostream>
#include <string>
#include <stdio.h>
int main()
{
int age;
std::cout << "how old are you? ";
std::cin>>age;
printf("you are: %d!"),age;
return 0;
}


در مورد سوال آخرتون هم که z=='8' به چه معنی هست، حدس من این هست که نویسنده ی برنامه از کاراکتز 8 به عنوان نشانگری برای بازنده شدن استفاده کرده.
اما در مورد سوال دومتون! متوجه نشدم کجای کد رو مشکل دارید، اگر امکان داره دقیق تر مشکلتون رو بیان کنید.

Behradln
شنبه 01 خرداد 1395, 15:18 عصر
سلام مجدد،
در مورد سوال اولتون که در مورد شکل جدول دوز هست، اگر دقت کنید در داخل " " ها، یک سری %c در هر سطر به چشم میخوره، این %c ها، نماینده ی محل قرار گیری اون عباراتی هست که بعد از ',' اومده، برای اینکه بهتر درک کنید، پیشنهاد میکنم کد زیر رو اجرا کنید.

#include <iostream>
#include <string>
#include <stdio.h>
int main()
{
int age;
std::cout << "how old are you? ";
std::cin>>age;
printf("you are: %d!"),age;
return 0;
}


در مورد سوال آخرتون هم که z=='8' به چه معنی هست، حدس من این هست که نویسنده ی برنامه از کاراکتز 8 به عنوان نشانگری برای بازنده شدن استفاده کرده.
اما در مورد سوال دومتون! متوجه نشدم کجای کد رو مشکل دارید، اگر امکان داره دقیق تر مشکلتون رو بیان کنید.

متشکرم

با راهنمایی های خودتون حل شد دوست عزیز.