Sunteți pe pagina 1din 14

#include<iostream.

h>
#include<conio.h>
#include<stdio.h>
#include<process.h>
#include<fstream.h>
int pos_val[8][16],pos[128];
void grid_upd(int i, int j, int n)
{
if(n==1)
pos_val[i][j]=0;
if(n==2)
pos_val[i][j]=-1;
}
class game
{
public:
void pv_set()
{
int i=0;
for(int j=0;j<16;j++)
for(int k=0;k<8;k++)
{
pos_val[k][j]=1+(j*8)+k;
++i;
}
for(i=0;i<128;i++)
pos[i]=i+1;
}
void grid_disp()
{
pv_set();
int i,j,k;
char x=186,y=205,z=219,w=200;
cout<<"\n\n\n";
cout<<" ";
for(i=0;i<69;i++)
cout<<y;
cout<<"\n";
cout<<" ";
cout<<x;
for(int n=0;n<66;n++)
{
if(n==32)
cout<<z<<z;
else
cout<<" ";
}
cout<<x;
cout<<"\n";
for(k=0;k<8;k++)
{
cout<<" ";
cout<<x<<" ";
for(j=0;j<16;j++)
{
if(pos_val[k][j]==0)
cout<<" X";
else if(pos_val[k][j]==-1)
cout<<" O";
else
cout<<pos_val[k][j];
if(pos_val[k][j]>0&&pos_val[k][j]<10)
cout<<" ";
else if(pos_val[k][j]>56&&pos_val[k][j]<65)
cout<<" "<<z<<z<<" ";
else if((pos_val[k][j]>9&&pos_val[k][j]<100)|pos_val[k][j]==0||pos_val[k][j]==
-1)
cout<<" ";
else
cout<<" ";
}
cout<<x;
cout<<"\n";
cout<<" ";
cout<<x;
for(int n=0;n<66;n++)
{
if(n==32)
cout<<z<<z;
else
cout<<" ";
}
cout<<x;
cout<<"\n";
}
cout<<" ";
for(i=0;i<69;i++)
cout<<y;
}
int row_check(int n)
{
int m=n-1;
int i=m%8,j=m/8;
int x;
for(x=j;x>0;x=x-8)
if(pos[x]==0)
return 1;
for(x=j;x<128;x=x+8)
if(pos[x]==0)
return 1;
return 0;
}
int col_check(int n)
{
int m=n-1;
int i=m%8,j=m/8;
int x,k;
for(x=0;x<8;++x)
if(x!=i)
{
k=j*8+i;
if(pos[k]==0)
return 1;
return 0;
}
};
class Player1
{
public:
int p1[64],move1,no1,score1;
Player1() //Constructor
{ no1=1;score1=0; }
void move1mod()
{
int n=move1-1;
int i,j;
i=n%8;
j=n/8;
p1[no1]=move1;
pos[2*no1]=0;
grid_upd(i,j,1);
++no1;
}
void makemove1()
{
int n=no1,x,y;
do
{
cin>>move1;
x=row_check(move1);
y=row_check(move1);
if(x==1 || y==1)
move1mod();
else
cout<<"\nINVALID MOVE !! PLAY AGAIN...\n";
}while(no1==n);
}
int check1(int n)
{
for(int i=0;i<no1;i++)
if(p1[i]==n)
return 1;
return 0;
}
};
class Player2 : public Player1
{
public:
Player1 p;
int p2[64],move2,no2,score2,xyz;
Player2() //Constructor
{ no2=1;score2=0; }
void move2mod()
{
int n=move2-1;
int i,j;
i=n%8;
j=n/8;
p2[no2]=move2;
pos[2*no2+1]=0;
grid_upd(i,j,2);
++no2;
}
void makemove2()
{
int n=no2,x,y;
do
{
cin>>move2;
x=row_check(move2);
y=row_check(move2);
if(x==1 || y==1)
move2mod();
else
cout<<"\nINVALID MOVE !! PLAY AGAIN...\n";
}while(no2==n);
}
int check2(int n)
{
for(int i=0;i<no2;i++)
if(p2[i]==n)
return 1;
return 0;
}
};
class displayscreen
{
public:
Player1 pl1;
Player2 pl2;
void screendisp()
{
game g;
g.grid_disp();
cout<<"\n\tSCORES\nPLAYER 1 : "<<pl1.score1<<"\nPLAYER 2 : "<<pl2.score2;
}
};
class p1_join4 : public Player1
{
public:
int var1(int n)
{
int a,b,c,d;
a=check1(n-27);
b=check1(n-18);
c=check1(n-9);
d=check1(n);
if(a==1&&b==1&&c==1&&d==1)
return 1;
return 0;
}
int var2(int n)
{
int a,b,c,d;
a=check1(n-18);
b=check1(n-9);
c=check1(n);
d=check1(n+9);
if(a==1&&b==1&&c==1&&d==1)
return 1;
return 0;
}
int var3(int n)
{
int a,b,c,d;
a=check1(n-9);
b=check1(n);
c=check1(n+9);
d=check1(n+18);
if(a==1&&b==1&&c==1&&d==1)
return 1;
return 0;
}
int var4(int n)
{
int a,b,c,d;
a=check1(n);
b=check1(n+9);
c=check1(n+18);
d=check1(n+27);
if(a==1&&b==1&&c==1&&d==1)
return 1;
return 0;
}
int var5(int n)
{
int a,b,c,d;
a=check1(n-21);
b=check1(n-14);
c=check1(n-7);
d=check1(n);
if(a==1&&b==1&&c==1&&d==1)
return 1;
return 0;
}
int var6(int n)
{
int a,b,c,d;
a=check1(n-14);
b=check1(n-7);
c=check1(n);
d=check1(n+7);
if(a==1&&b==1&&c==1&&d==1)
return 1;
return 0;
}
int var7(int n)
{
int a,b,c,d;
a=check1(n-7);
b=check1(n);
c=check1(n+7);
d=check1(n+14);
if(a==1&&b==1&&c==1&&d==1)
return 1;
return 0;
}
int var8(int n)
{
int a,b,c,d;
a=check1(n);
b=check1(n+7);
c=check1(n+14);
d=check1(n+21);
if(a==1&&b==1&&c==1&&d==1)
return 1;
return 0;
}
int var9(int n)
{
int a,b,c,d;
a=check1(n-24);
b=check1(n-16);
c=check1(n-8);
d=check1(n);
if(a==1&&b==1&&c==1&&d==1)
return 1;
return 0;
}
int var10(int n)
{
int a,b,c,d;
a=check1(n-16);
b=check1(n-8);
c=check1(n);
d=check1(n+8);
if(a==1&&b==1&&c==1&&d==1)
return 1;
return 0;
}
int var11(int n)
{
int a,b,c,d;
a=check1(n-8);
b=check1(n);
c=check1(n+8);
d=check1(n+16);
if(a==1&&b==1&&c==1&&d==1)
return 1;
return 0;
}
int var12(int n)
{
int a,b,c,d;
a=check1(n);
b=check1(n+8);
c=check1(n+16);
d=check1(n+24);
if(a==1&&b==1&&c==1&&d==1)
return 1;
return 0;
}
int var13(int n)
{
int a,b,c,d;
a=check1(n-3);
b=check1(n-2);
c=check1(n-1);
d=check1(n);
if(a==1&&b==1&&c==1&&d==1)
return 1;
return 0;
}
int var14(int n)
{
int a,b,c,d;
a=check1(n-2);
b=check1(n-1);
c=check1(n);
d=check1(n+1);
if(a==1&&b==1&&c==1&&d==1)
return 1;
return 0;
}
int var15(int n)
{
int a,b,c,d;
a=check1(n-1);
b=check1(n);
c=check1(n+1);
d=check1(n+2);
if(a==1&&b==1&&c==1&&d==1)
return 1;
return 0;
}
int var16(int n)
{
int a,b,c,d;
a=check1(n);
b=check1(n+1);
c=check1(n+2);
d=check1(n+3);
if(a==1&&b==1&&c==1&&d==1)
return 1;
return 0;
}
};
class p2_join4 : public Player2
{
public:
int var1(int n)
{
int a,b,c,d;
a=check2(n-27);
b=check2(n-18);
c=check2(n-9);
d=check2(n);
if(a==1&&b==1&&c==1&&d==1)
return 1;
return 0;
}
int var2(int n)
{
int a,b,c,d;
a=check2(n-18);
b=check2(n-9);
c=check2(n);
d=check2(n+9);
if(a==1&&b==1&&c==1&&d==1)
return 1;
return 0;
}
int var3(int n)
{
int a,b,c,d;
a=check2(n-9);
b=check2(n);
c=check2(n+9);
d=check2(n+18);
if(a==1&&b==1&&c==1&&d==1)
return 1;
return 0;
}
int var4(int n)
{
int a,b,c,d;
a=check2(n);
b=check2(n+9);
c=check2(n+18);
d=check2(n+27);
if(a==1&&b==1&&c==1&&d==1)
return 1;
return 0;
}
int var5(int n)
{
int a,b,c,d;
a=check2(n-21);
b=check2(n-14);
c=check2(n-7);
d=check2(n);
if(a==1&&b==1&&c==1&&d==1)
return 1;
return 0;
}
int var6(int n)
{
int a,b,c,d;
a=check2(n-14);
b=check2(n-7);
c=check2(n);
d=check2(n+7);
if(a==1&&b==1&&c==1&&d==1)
return 1;
return 0;
}
int var7(int n)
{
int a,b,c,d;
a=check2(n-7);
b=check2(n);
c=check2(n+7);
d=check2(n+14);
if(a==1&&b==1&&c==1&&d==1)
return 1;
return 0;
}
int var8(int n)
{
int a,b,c,d;
a=check2(n);
b=check2(n+7);
c=check2(n+14);
d=check2(n+21);
if(a==1&&b==1&&c==1&&d==1)
return 1;
return 0;
}
int var9(int n)
{
int a,b,c,d;
a=check2(n-24);
b=check2(n-16);
c=check2(n-8);
d=check2(n);
if(a==1&&b==1&&c==1&&d==1)
return 1;
return 0;
}
int var10(int n)
{
int a,b,c,d;
a=check2(n-16);
b=check2(n-8);
c=check2(n);
d=check2(n+8);
if(a==1&&b==1&&c==1&&d==1)
return 1;
return 0;
}
int var11(int n)
{
int a,b,c,d;
a=check2(n-8);
b=check2(n);
c=check2(n+8);
d=check2(n+16);
if(a==1&&b==1&&c==1&&d==1)
return 1;
return 0;
}
int var12(int n)
{
int a,b,c,d;
a=check2(n);
b=check2(n+8);
c=check2(n+16);
d=check2(n+24);
if(a==1&&b==1&&c==1&&d==1)
return 1;
return 0;
}
int var13(int n)
{
int a,b,c,d;
a=check2(n-3);
b=check2(n-2);
c=check2(n-1);
d=check2(n);
if(a==1&&b==1&&c==1&&d==1)
return 1;
return 0;
}
int var14(int n)
{
int a,b,c,d;
a=check2(n-2);
b=check2(n-1);
c=check2(n);
d=check2(n+1);
if(a==1&&b==1&&c==1&&d==1)
return 1;
return 0;
}
int var15(int n)
{
int a,b,c,d;
a=check2(n-1);
b=check2(n);
c=check2(n+1);
d=check2(n+2);
if(a==1&&b==1&&c==1&&d==1)
return 1;
return 0;
}
int var16(int n)
{
int a,b,c,d;
a=check2(n);
b=check2(n+1);
c=check2(n+2);
d=check2(n+3);
if(a==1&&b==1&&c==1&&d==1)
return 1;
return 0;
}
};
class open_screen
{
public:
char name_p1[25],name_p2[25];
int menu()
{
clrscr();
int ch;
cout<<"\n\n\n\t\tGAME MENU\n\t1. PLAY\n\t2. HOW TO PLAY"
<<"\n\t3. HIGH SCORES\n\t4. EXIT\n\nEnter your choice....";
cin>>ch;
return ch;
}
void opening()
{
clrscr();
cout<<"\n\n\n\n\t\tCONNECT 4\n\n\tONLY FOR THE HBK - HIGHLY BRILLIANT KIDS"
<<"\n\n\n\t\tDESIGNED BY\n\n\tALEX MATHEW & S.K.VIGNESHWAR....."
<<"\n\n\nPress any key to continue.....";
getch();
}
void getnames()
{
clrscr();
cout<<"\n\n\n\n";
cout<<"\tENTER PLAYER 1 NAME...\n\n\t";
gets(name_p1);
cout<<"\n\n\tENTER PLAYER 2 NAME...\n\n\t";
gets(name_p2);
}
};
void howtoplay()
{
cout<<"\n\n\t\tGAME INSTRUCTIONS\n\n\n";
cout<<"This game is an expanded version of a normal Tic-Tac-Toe game. "
<<"This is a 2-Player game. \n\nIt invloves continuous Connect-4 games on an
8 X 16 grid. The game involves many restrictions on the moves that can be made
by the players.\n"
<<"\n\n > The opening move by Player 1 must be on the half line (marked as
the bold line). It should be any number between 57 and 72."
<<"\n\n > The opening move of Player 2 must be on the opposite side of the
half line. So, if Player 1 marks on a number between 57 and 64, Player 2's move
must be between 65 and 72."
<<"\n\n > After the openings, moves must be such that an element is already
filled either on the same row as the move or on the same column as the move. "
<<"\n\n > A point is scored when any player completes a continuous 4-of-a-k
ind. "
<<"\n\n > The game continues till the 8 X 16 grid is filled. "
<<"\n\n > The player with more points at the end of the game is the Winner.
...";
getch();
}
void startmove()
{
int i,j,m,n,o,p,a=0,x=0;
Player1 pl1;
Player2 pl2;
do
{
cout<<"\n\nPLAYER 1 - move no. 1 : ";
cin>>pl1.move1;
m=pl1.move1;
n=m-1;
if((m/8==7 || m/8==8 || m==72)&&(m!=56))
{
i=n%8; j=n/8;
pl1.p1[0]=m;
pos[n]=0;
grid_upd(i,j,1);
a=100;
}
else
cout<<"\n\nINVALID MOVE !!!";
}while(a==0);
do
{
cout<<"\n\nPLAYER 2 - move no. 1 : ";
cin>>pl2.move2;
o=pl2.move2;
p=o-1;
if(m/8==7 || m==64)
{
if((o/8==8 || o==72)&&(o!=64))
{
i=p%8; j=p/8;
pl2.p2[0]=o;
pos[n]=0;
grid_upd(i,j,2);
x=100;
}
}
else if((m/8==8 || m==72)&&(m!=64))
{
if((o/8==7 || o==64)&&(o!=56))
{
i=p%8; j=p/8;
pl2.p2[0]=o;
pos[n]=0;
grid_upd(i,j,2);
x=100;
}
}
if(x!=100)
cout<<"\n\nINVALID MOVE !!!";
}while(x==0);
}
void main()
{
Player1 Pl1 ; Player2 Pl2;
displayscreen disp;
p1_join4 pj1;
p2_join4 pj2;
g.pv_set();
open_screen o_s;
o_s.opening();
int ch,abcd=1;
char sv_ch;
do
{
ch=o_s.menu();
switch(ch)
{
case 4 : clrscr();
cout<<"\n\n\n\n\t\tBYE BYE !!!!!\n\n\tHope u come back soon....";
exit(0);
break;
case 2 : clrscr();
howtoplay();
break;
case 1 : o_s.getnames();
clrscr();
int s1[16],s2[16],sum1,sum2;
for(int i=0;i<64;i++)
{
clrscr();
disp.screendisp();
if(i==0)
startmove();
else
sum1=sum2=0;
cout<<"\n\nPLAYER 1 - move no. "<<i+1<<" : ";
Pl1.makemove1();
s1[0]=pj1.var1(Pl1.move1);
s1[1]=pj1.var2(Pl1.move1);
s1[2]=pj1.var3(Pl1.move1);
s1[3]=pj1.var4(Pl1.move1);
s1[4]=pj1.var5(Pl1.move1);
s1[5]=pj1.var6(Pl1.move1);
s1[6]=pj1.var7(Pl1.move1);
s1[7]=pj1.var8(Pl1.move1);
s1[8]=pj1.var9(Pl1.move1);
s1[9]=pj1.var10(Pl1.move1);
s1[10]=pj1.var11(Pl1.move1);
s1[11]=pj1.var12(Pl1.move1);
s1[12]=pj1.var13(Pl1.move1);
s1[13]=pj1.var14(Pl1.move1);
s1[14]=pj1.var15(Pl1.move1);
s1[15]=pj1.var16(Pl1.move1);
for(int j=0;j<16;j++)
sum1+=s1[j];
Pl1.score1+=sum1;
if(sum1!=0)
cout<<"\n\nPLAYER 1 SCORES "<<sum1<<" POINT(S) !!!";
cout<<"\n\nPLAYER 2 - move no. "<<i+1<<" : ";
Pl2.makemove2();
s2[0]=pj2.var1(Pl2.move2);
s2[1]=pj2.var2(Pl2.move2);
s2[2]=pj2.var3(Pl2.move2);
s2[3]=pj2.var4(Pl2.move2);
s2[4]=pj2.var5(Pl2.move2);
s2[5]=pj2.var6(Pl2.move2);
s2[6]=pj2.var7(Pl2.move2);
s2[7]=pj2.var8(Pl2.move2);
s2[8]=pj2.var9(Pl2.move2);
s2[9]=pj2.var10(Pl2.move2);
s2[10]=pj2.var11(Pl2.move2);
s2[11]=pj2.var12(Pl2.move2);
s2[12]=pj2.var13(Pl2.move2);
s2[13]=pj2.var14(Pl2.move2);
s2[14]=pj2.var15(Pl2.move2);
s2[15]=pj2.var16(Pl2.move2);
for(int k=0;k<16;k++)
sum2+=s2[k];
Pl2.score2+=sum2;
if(sum2!=0)
cout<<"\n\nPLAYER 2 SCORES "<<sum2<<" POINT(S) !!!";
getch();
}
clrscr();
cout<<"\n\n\n\n\t\tFINAL SCORES !!!"
<<"\n\n\tPLAYER 1 : "<<Pl1.score1
<<"\n\n\tPLAYER 2 : "<<Pl2.score2
<<"\n\nDo you want to save you score ? (Y/N) : ";
cin>>sv_ch;
if(sv_ch=='y'||sv_ch=='Y')
{
ofstream fout("Hiscores.txt",ios::ate);
fout<<o_s.name_p1<<" "<<o_s.name_p2
<<Pl1.score1<<" "<<Pl2.score2;
}
getch();
break;
case 3 : char ch; int n;
ifstream fin("Hiscores.txt");
fin.seekg(0);
while(!fin.eof)
{
cout<<"\n";
ch=fin.getline(ch,sizeof(o_s.name_p1));
cout<<ch<<" ";
ch=fin.getline(ch,sizeof(o_s.name_p2));
cout<<ch<<" ";
n=fin.get();
cout<<n<<"-";
n=fin.get();
cout<<n;
}
break;
default : cout<<"\n\nWRONG CHOICE !!!!!";
}
}while(1);
getch();
}

S-ar putea să vă placă și