Puzzle Game

C++


#include <iostream.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <dos.h>
#include <omid_bahrami.h>

int main()
{

int w=0;
char z='s';
char x7;
char d;
game *p;
easy e;
normal n;
hard h;
timer s;

_setcursortype(_NOCURSOR);
clrscr();
cout<<"e => easy"<<endl<<"n => normal"<<endl<<"h => hard"<<endl;
cout<<"Select Difficalty => ";
begin:
cin>>d;

switch(d)
{

case'e':
p=&e;
break;

case'n':
p=&n;
break;

case'h':
p=&h;
break;

default:
cout<<"Your Entry Is Invalid!"<<endl<<"=> ";
goto begin;
}

p->play();

s.meno();
s.show();
getch();

p->start();
p->print();

while(w==0 && z!='q')
{

while(!kbhit())
{
s.show();
delay(1);
s.plus();
}
z=getch();

p->move(z);
w=p->check();
p->print();

}

p->exit();

return 0;
}

Here Is omid_bahrami.h


class timer
{

public:
timer();
void zero();
void meno();
void show();
void plus();

private:
int ms;
int s;
int m;
int h;
};

void timer::zero()
{
ms=s=m=h=0;
}

timer::timer()
{
zero();
}

void timer::show()
{
int a,b;
b=25;
a=19;

gotoxy(a+5,b);
cout<<h<<" ";

gotoxy(a+12,b);
cout<<m<<" ";

gotoxy(a+19,b);
cout<<s<<" ";

gotoxy(a+32,b);
cout<<ms<<" ";

}

void timer::meno()
{
int a,b;
b=25;
a=19;

gotoxy(a,b);
cout<<"Hour:";

gotoxy(a+8,b);
cout<<"Min:";

gotoxy(a+15,b);
cout<<"Sec:";

gotoxy(a+22,b);
cout<<"Milli Sec:";
}

void timer::plus()
{
ms++;

if(ms==1000)
{
ms=0;
s++;
}

if(s==60)
{
s=0;
m++;
}

if(m==60)
{
m=0;
h++;
}

}

class game
{
public:
game();
void play();
void set();
void first();
int check();
void print();
void chart();
void move(char z1);
void exit();
virtual void start()=0;

protected:
int a[4][4];
char fn[30];
char ln[30];
int v;
int c;
int w;
};

void game::play()
{

clrscr();
set();
clrscr();
chart();
print();

}

game::game()
{
first();
w=c=v=0;
}

void game::set()
{

cout<<"enter first name:";
cin>>fn;

cout<<"enter last name:";
cin>>ln;

}

class easy:public game
{
public:
void start();
};

class normal:public game
{
public:
void start();
};

class hard:public game
{
public:
void start();
};

void easy::start()
{
int n[15];
int m,t,s,x,i,j;
randomize();

for(m=0;m<=14;m++)
n[m]=20;

for(m=0;m<=3;m++)
{
b1:
t=random(4);
t++;
for(s=0;t!=n[s] && s<=14;s++);
if(s>14)
n[m]=t;
else
goto b1;
}

for(m=4;m<=7;m++)
{
b2:
t=random(4);
t=t+5;
for(s=0;t!=n[s] && s<=14;s++);
if(s>14)
n[m]=t;
else
goto b2;
}

for(m=8;m<=11;m++)
{
b3:
t=random(4);
t=t+9;
for(s=0;t!=n[s] && s<=14;s++);
if(s>14)
n[m]=t;
else
goto b3;
}

for(m=12;m<=14;m++)
{
b4:
t=random(3);
t=t+13;
for(s=0;t!=n[s] && s<=14;s++);
if(s>14)
n[m]=t;
else
goto b4;
}

x=0;
for(i=0;i<=3;i++)
{
for(j=0;j<=3;j++)
{
a[i][j]=n[x];
x++;
}
}
a[3][3]=0;
}

void normal::start()
{
int n[15];
int m,t,s,x,i,j;
randomize();

for(m=0;m<=14;m++)
n[m]=20;

for(m=0;m<=7;m++)
{
b1:
t=random(8);
t++;
for(s=0;t!=n[s] && s<=14;s++);
if(s>14)
n[m]=t;
else
goto b1;
}

for(m=8;m<=14;m++)
{
b2:
t=random(7);
t=t+9;
for(s=0;t!=n[s] && s<=14;s++);
if(s>14)
n[m]=t;
else
goto b2;
}

x=0;
for(i=0;i<=3;i++)
{
for(j=0;j<=3;j++)
{
a[i][j]=n[x];
x++;
}
}
a[3][3]=0;
}

void hard::start()
{
int n[15];
int m,t,s,x,i,j;
randomize();

for(m=0;m<=14;m++)
n[m]=15;

for(m=0;m<=14;m++)
{
b1:
t=random(15);
for(s=0;t!=n[s] && s<=14;s++);
if(s>14)
n[m]=t;
else
goto b1;
}

for(m=0;m<=14;m++)
n[m]=n[m]+1;

x=0;
for(i=0;i<=3;i++)
{
for(j=0;j<=3;j++)
{
a[i][j]=n[x];
x++;
}
}
a[3][3]=0;
}

void game::first()
{
int x,i,j,f[16];

for(i=0;i<=14;i++)
f[i]=i+1;
f[15]=0;

x=0;
for(i=0;i<=3;i++)
for(j=0;j<=3;j++)
{
a[i][j]=f[x];
x++;
}

}

int game::check()
{
int x,i,j,f[16];

for(i=0;i<=14;i++)
f[i]=i+1;
f[15]=0;

x=0;
for(i=0;i<=3;i++)
for(j=0;j<=3;j++)
{
if( a[i][j]!=f[x])
goto down;
else
x++;
}

down:
if(i>3 && j>3)
w=1;
else
w=0;

v=x;

return w;
}

void game::print()
{
int i,j;

for(i=0;i<=3;i++)
{

for(j=0;j<=3;j++)
{

if(a[i][j]==0)
{
gotoxy(((j+1)*5)+25,((i+1)*5));
cout<<" ";
}

else
{

if(a[i][j]<=4 && a[i][j]>=1)
{
gotoxy(((j+1)*5)+25,((i+1)*5));
textcolor(15);
cprintf("%d ",a[i][j]);
}

else if(a[i][j]<=8 && a[i][j]>=5)
{
gotoxy(((j+1)*5)+25,((i+1)*5));
textcolor(13);
cprintf("%d ",a[i][j]);
}

else if(a[i][j]<=12 && a[i][j]>=9)
{
gotoxy(((j+1)*5)+25,((i+1)*5));
textcolor(10);
cprintf("%d ",a[i][j]);
}

else if(a[i][j]<=15 && a[i][j]>=13)
{
gotoxy(((j+1)*5)+25,((i+1)*5));
textcolor(12);
cprintf("%d ",a[i][j]);
}

}
}
}

gotoxy(10,1);
cout<<(c);

gotoxy(17,3);
cout<<v<<" ";
}

void game::chart()
{
int t,i;
i=100;
textcolor(11);

for(t=4;t<=21;t++)
{
gotoxy(28,t);
cprintf("|");

gotoxy(33,t);
cprintf("|");

gotoxy(38,t);
cprintf("|");

gotoxy(43,t);
cprintf("|");

gotoxy(48,t);
cprintf("|");

delay(i);
}

for(t=0;t<=18;t++)
{
gotoxy(29+t,4);
cprintf("-");

gotoxy(29+t,8);
cprintf("-");

gotoxy(29+t,12);
cprintf("-");

gotoxy(29+t,16);
cprintf("-");

gotoxy(29+t,21);
cprintf("-");

delay(i);
}

gotoxy(26,1);
textcolor(15);
cprintf("Programmer => Omid Bahrami");

gotoxy(1,1);
cout<<"Count => ";

gotoxy(1,3);
cout<<"First Rights => ";
}

void game::move(char z)
{
int x,y;

for(x=0;x<=3;x++)
for(y=0;y<=3;y++)
if(a[x][y]==0)
goto p;
p:

switch(z)
{

case 77:

if(y==0)
break;

else
{
a[x][y]=a[x][y-1];
a[x][y-1]=0;
c++;
break;
}

case 75:

if(y==3)
break;

else
{
a[x][y]=a[x][y+1];
a[x][y+1]=0;
c++;
break;
}

case 72:

if(x==3)
break;

else
{
a[x][y]=a[x+1][y];
a[x+1][y]=0;
c++;
break;
}

case 80:

if(x==0)
break;

else
{
a[x][y]=a[x-1][y];
a[x-1][y]=0;
c++;
break;
}

}

}

void game::exit()
{

gotoxy(21,1);
textcolor(15);
cout<<"First name => "<<fn<<"\tLast name => "<<ln;
gotoxy(31,2);

if(w==1)
cprintf("You Are Winner!");

else
cprintf("You Are Loser!");

getch();
}