08-04-2007, 10:27 AM
کد:
//Author:Mohammad
#include <iostream>
#include <conio.h>
#include <iomanip.h>
#include <math.h>
using namespace std;
const int size=7;
int main();
struct cell
{
char face;
int state;
};
class pegged
{
public:
pegged();
pegged(int);
pegged(int,int);
void game();
void move(int,int,int,int);
bool checkwin();
bool gameover();
void display();
private:
cell table[size][size];
};
pegged::pegged()
{
int i,j;
table[0][0].face=table[0][1].face=table[0][5].face=table[0][6].face=
table[1][0].face=table[1][1].face=table[1][5].face=table[1][6].face=
table[5][0].face=table[5][1].face=table[5][5].face=table[5][6].face
=table[6][0].face=table[6][1].face=table[6][5].face=table[6][6].face=' ';
table[0][0].state=table[0][1].state=table[0][5].state=table[0][6].state=
table[1][0].state=table[1][1].state=table[1][5].state=table[1][6].state=
table[5][0].state=table[5][1].state=table[5][5].state=table[5][6].state
=table[6][0].state=table[6][1].state=table[6][5].state=table[6][6].state=-1;
for(i=0;i<size;i++)
for(j=0;j<size;j++)
if(table[i][j].state!=-1)
{
table[i][j].state=1;
table[i][j].face=2;
}
table[3][3].state=0;
table[3][3].face=' ';//for making the hole among the table
}
pegged::pegged(int a)
{
int i,j;
table[0][0].face=table[0][1].face=table[0][5].face=table[0][6].face=
table[1][0].face=table[1][1].face=table[1][5].face=table[1][6].face=
table[5][0].face=table[5][1].face=table[5][5].face=table[5][6].face
=table[6][0].face=table[6][1].face=table[6][5].face=table[6][6].face=' ';
table[0][0].state=table[0][1].state=table[0][5].state=table[0][6].state=
table[1][0].state=table[1][1].state= table[1][5].state= table[1][6].state=
table[5][0].state=table[5][1].state=table[5][5].state=table[5][6].state
=table[6][0].state=table[6][1].state=table[6][5].state=table[6][6].state=-1;
table[0][2].face=table[0][3].face=table[0][4].face=table[1][2].face=
table[1][4].face=table[2][0].face=table[2][1].face=table[2][2].face=
table[2][4].face=table[2][5].face=table[2][6].face=table[3][0].face=
table[3][6].face=table[4][0].face=table[4][1].face=table[4][2].face=
table[4][4].face=table[4][5].face=table[4][6].face=table[5][4].face=
table[6][2].face=table[5][2].face= table[6][3].face=table[6][4].face=' ';
table[0][2].state=table[0][3].state=table[0][4].state=table[1][2].state=
table[1][4].state=table[2][0].state=table[2][1].state=table[2][2].state=
table[2][4].state=table[2][5].state=table[2][6].state=table[3][0].state=
table[3][6].state=table[4][0].state=table[4][1].state=table[4][2].state=
table[4][4].state=table[4][5].state=table[4][6].state=table[5][2].state=
table[5][4].state=table[6][2].state=table[6][3].state=table[6][4].state=0;
for(i=0;i<size;i++)
for(j=0;j<size;j++)
if(table[i][j].state!=-1&&table[i][j].state!=0)
{
table[i][j].state=1;
table[i][j].face=2;
}
table[3][3].state=1;
table[3][3].face=2;
}
pegged::pegged(int a,int b)
{
int i,j;
table[0][0].face=table[0][1].face=table[0][5].face=table[0][6].face=table[1][0].face=
table[1][1].face= table[1][5].face=table[1][6].face=table[5][0].face=
table[5][1].face=table[5][5].face=table[5][6].face=table[6][0].face=
table[6][1].face=table[6][5].face=table[6][6].face=' ';
table[0][0].state=table[0][1].state=table[0][5].state=table[0][6].state=
table[1][0].state=table[1][1].state=table[1][5].state=table[1][6].state=
table[5][0].state=table[5][1].state=table[5][5].state=table[5][6].state
=table[6][0].state=table[6][1].state=table[6][5].state=table[6][6].state=-1;
table[0][2].face=table[0][3].face=table[0][4].face=table[1][2].face=
table[1][4].face=table[2][0].face=table[2][1].face=table[3][1].face=
table[3][2].face=table[3][4].face=table[3][5].face=table[2][5].face=
table[2][6].face=table[3][0].face=table[3][6].face=table[4][0].face=
table[4][1].face=table[4][2].face=table[4][4].face=table[4][5].face=
table[4][6].face=table[5][2].face=table[5][3].face=table[5][4].face=
table[6][2].face=table[6][3].face=table[6][4].face=' ';
table[0][2].state=table[0][3].state=table[0][4].state=table[1][2].state=
table[1][4].state=table[2][0].state =table[2][1].state=table[3][1].state=
table[3][2].state=table[3][4].state=table[3][5].state=table[2][5].state=
table[2][6].state=table[3][0].state=table[3][6].state=table[4][0].state=
table[4][1].state=table[4][2].state=table[4][4].state=table[4][5].state=
table[4][6].state= table[5][2].state=table[5][3].state=table[5][4].state=
table[6][2].state=table[6][3].state=table[6][4].state=0;
for(i=0;i<size;i++)
for(j=0;j<size;j++)
if(table[i][j].state!=-1&&table[i][j].state!=0)
{
table[i][j].state=1;
table[i][j].face=2;
}
table[3][3].state=1;
table[3][3].face=2;
}
void pegged::game()
{
int row,col,row1,col1;
while(1)
{
display();
if(checkwin())
{
display();
cout<<"\n\t\tYOU WIN THE GAME.YOU ARE VERY SMART. ";
getch();
main();
}//end of if
/* else if(gameover())
{
display();
cout<<"SORRY YOU LOSE THE GAME.";
getch();
exit(0);
}//end of else if*/
cout<<"please enter the source place info:";
cout<<"\nenter the row:";
cin>>row;
cout<<"enter the coloum:";
cin>>col;
cout<<"please enter the destination info:";
cout<<"\nenter ther row:";
cin>>row1;
cout<<"enter the coloum:";
cin>>col1;
move(row,col,row1,col1);
}//end of while
}
void pegged::move(int r,int c,int r1,int c1)
{
if(r<0||c>6||r>6||c<0||r1<0||r1>6||c1>6||c1<0)
{
cout<<"your move is incorect.";
getch();
return;
}//end of if
if(table[r][c].state==0||table[r1][c1].state==1)
{
cout<<"your move is incorrect.";
getch();
return ;
}
if(r1>r&&c1>c||r1<r&&c1<c)
{
cout<<"your move is incorrect.";
getch();
return ;
}
if(c1==c && r1<r) //for move up
if(table[r-1][c].state==1)
{
table[r][c].face=' ';
table[r][c].state=0;
table[r-1][c].state=0;
table[r-1][c].face=' ';
table[r1][c1].face=2;
table[r1][c1].state=1;
}
else
cout<<"your move is incorect.";
if(r1==r && c1<c) //for move left
if(table[r][c-1].state==1)
{
table[r][c].face=' ';
table[r][c].state=0;
table[r][c-1].state=0;
table[r][c-1].face=' ';
table[r1][c1].face=2;
table[r1][c1].state=1;
}
else
cout<<"your move is incorrect.";
if(r1>r && c1==c) //for move down
if(table[r+1][c].state==1)
{
table[r][c].face=' ';
table[r][c].state=0;
table[r+1][c].state=0;
table[r+1][c].face=' ';
table[r1][c1].face=2;
table[r1][c1].state=1;
}
else
cout<<"your move is incorrect.";
if(r1==r && c1>c) //for move right
{
if(table[r][c+1].state==1)
{
table[r][c].face=' ';
table[r][c].state=0;
table[r][c+1].state=0;
table[r][c+1].face=' ';
table[r1][c1].face=2;
table[r1][c1].state=1;
}
else
cout<<"your move is incorrect.";
}
}
bool pegged::checkwin()
{
int i,j,num=0;
for(i=0;i<size;i++)
for(j=0;j<size;j++)
if(table[i][j].state!=0&&table[i][j].state!=-1)
num++;
if(num==1)
return 1;
return 0;
}
bool pegged::gameover()
{
int i,j,num;
for(i=0;i<size;i++)
for(j=0;j<size;j++)
if(table[i][j].state!=-1 && table[i][j].state!=0)
if(table[i+1][j].state==1||table[i][j+1].state==1||table[i-1][j].state==1||table[i][j-1].state==1)
return 0;
return 1;
}
void pegged::display()
{
int i,j;
system("cls");
cout<<"A fantastic game from www.codecorona.com";
cout<<"\n\n";
cout<<"\t\t\t\t ";
for(i=0;i<7;i++)
cout<<i<<" ";
cout<<"\n\n";
for(i=0;i<size;i++,cout<<"\t\t"<<endl<<endl)
{
cout<<"\t\t\t\t";
cout<<i<<" ";
for(j=0;j<size;j++)
cout<<table[i][j].face<<" ";
}
}
int main()
{
system("cls");
int num;
cout<<"\n1-play solitaire mode."
"\n\n2-play plus mode."
"\n\n3-play cross mode.";
cout<<"\n\n\t\tplease enter your choice:";
cin>>num;
if(num==1)
{
pegged my;
system("color 79");
my.game();
}
if(num==2)
{
pegged my(0);
system("color 79");
my.game();
}
if(num==3)
{
pegged my(1,1);
system ("color 79");
my.game();
}
getch();
return 0;
}