Hangman Game - Insurance Tips

A Hub of Best Guide Health Insurance Tips

Sunday, May 22, 2022

Hangman Game

 

//A HANGMAN Game Program          Dated: 14 NOV 2005

/*

                  Developed By:    Manish Jain 1103143 3rd yr M.M.E.C. Mulana

                                                                                   mkj_manishjain@yahoo.co.in

                                                                                   +91 9896455735

                                                                                                                                                                                                                                                */

//HEADER FILES

#include<fstream.h>

#include<bios.h>

#include<time.h>

#include<dos.h>

#include<stdio.h>

#include<string.h>

#include<stdlib.h>

#include<graphics.h>

#include<conio.h>

#include<mouse.h>

 

#define SMILE 1

#define SAD 0

 

//VARIABLES AND FUNCTIONS DECLARATION

unsigned key;

char firstrow[]={'Q','W','E','R','T','Y','U','I','O','P'};

char secondrow[]={'A','S','D','F','G','H','J','K','L'};

char thirdrow[]={'Z','X','C','V','B','N','M'};

char *main_menu[]={{"1. PLAY"},{"2. INSTRUCTIONS"},{"3. HI-SCORE"},{"4.

EXIT"}};

char *categories[]={{"1. MOVIES"},{"2. SPORTS"},{"3. MOVIE STARS"},{"4.

PLACES"}};

char *m_m[]={"P","I","H","E"},*c_m[]={"M","S","A","P"};

int

blankpos_x[]={25,50,75,100,125,150,175,200,225,250,275,300,325,350,375,400

};

int blankpos_y[]={80,150,300,340},cat_pos_x[]={130,130,314,130};

char string[50],name[25],category[20],checklist[50],hitlist[50];

char wr_guesses[10],ch,datebuf[9],timebuf[9];

 

int

button,x,y,corx,cory,len=0,d,m,mx,my,i,j,k,count_s=0,count_f=0,hcount=0,fl

ag=0,hlflag=1,spaces=0;

int hlcount=0,prflag=0,hngmnflag=0,dispflag=0,gameflag=0;

int tcolor=GREEN,acolor=RED;

 

void drawsetup();

void game();

void play();

void initgraphics();

void show_main_menu();

void getoption();

 

//FUNCTION TO INITIALISE ALL THE VARIABLES

void init()

{

 hlcount=0,prflag=0,hngmnflag=0,dispflag=0,gameflag=0;

 tcolor=GREEN,acolor=RED;

 len=0,count_s=0,count_f=0,hcount=0,flag=0,hlflag=1,spaces=0;

 strcpy(hitlist,"");

 strcpy(checklist,"");

 strcpy(wr_guesses,"");

}

 

//CLASS RECORD TO READ RECORD FROM THE FILES

 class record

 {

  char word[50];

  public:

                                  void input()

                                  {

                                   gets(word);

                                  }

                                  void output()

                                  {

                                   puts(word);

                                  }

                                  char *returnword()

                                  {

                                   return word;

                                  }

 }rec,out;

 

//BORDER FUNCTIONS TO BORDER EACH PAGE

void border()

{

  setcolor(GREEN);

  rectangle(2,2,mx-2,my-2);

  setcolor(RED);

  rectangle(4,4,mx-4,my-4);

  setcolor(GREEN);

  rectangle(6,6,mx-6,my-6);

  settextstyle(4,0,5);

  outtextxy(180,40,"HANGMAN");

  setcolor(YELLOW);

  line(175,88,420,88);

  setcolor(RED);

  line(175,90,420,90);

}

 

//FUNCTION TO DISPLAY THE VERY FIRST SCREEN OF THE PROGRAM

void FIRSTSCREEN()

{

  clrscr();

  initgraphics();

  border();

 

  settextstyle(3,0,3);

  setcolor(RED);

  outtextxy(130,200,"Programmed By:");

  settextstyle(1,0,3);

  setcolor(WHITE);

  outtextxy(330,200,"Manish Jain");

  outtextxy(150,235,"mkj_manishjain@yahoo.co.in");

  outtextxy(150,275,"         +91 9896455735");

  settextstyle(1,0,4);

  setcolor(RED);

  outtextxy(120,360,"Press any key to play");

 

  getch();

}

 

//FUNCTION TO SHOW INSTRUCTIONS FOR THE USERS

void instruction()

{

 cleardevice();

 border();

 setcolor(RED);

 settextstyle(1,0,5);

 outtextxy(50,140,"I N S T R U C T I O N S");

 settextstyle(3,0,3);

 setcolor(WHITE);

 outtextxy(60,190,"1. Fill the Blanks with the suitable word.");

 outtextxy(60,230,"2. The word should belong to the category");

 outtextxy(60,270,"   selected by you.");

 outtextxy(60,300,"3. You will be given 8 chances to fill it up.");

 outtextxy(60,330,"4. Man on the Hanger describes your attempts ");

 outtextxy(60,365,"5. Your wrong guesses are shown there.");

 settextstyle(4,0,4);

 setcolor(RED);

 outtextxy(140,425,"Press any key to Continue");

 getch();

 show_main_menu();

}

 

//FUNCTION TO CHOOSE ONE FROM THE OPTIONS GIVEN USING MOUSE

void chooseoption()

{

  cleardevice();

  border();

  settextstyle(1,0,5);

  setcolor(GREEN);

  outtextxy(50,140,"C A T E G O R I E S");

 

  settextstyle(3,0,5);

 

  for(i=0;i<4;i++)

  {

   setcolor(WHITE);

   outtextxy(67,190+(45*i),categories[i]);

   setcolor(RED);

   rectangle(50,210+(45*i),60,220+(45*i));

   outtextxy(cat_pos_x[i],190+(45*i),c_m[i]);

  }

   getoption();

}

 

//FUNCTION TO CHECK THE CATEGORY SELECTED BY THE USER

 int getcategory(int x,int y)

 {

  //Check for category "Movies"

   if((x>=10&&x<=80)&&(y>=200 &&y<=240))

                  {

                                strcpy(category,"Movies");

                                return 1;

                  }

  //Check for Category "Sports"

   if((x>=10&&x<=80)&&(y>=255 &&y<=280))

                  {

                                strcpy(category,"Sports");

                                return 1;

                  }

   //Check for Category "Actors"

   if((x>=10&&x<=80)&&(y>=285 &&y<=310))

                  {

                                strcpy(category,"Actors");

                                return 1;

                  }

   //Check for Category "Places"

   if((x>=10&&x<=80)&&(y>=315 &&y<=350))

                  {

                                strcpy(category,"Places");

                                return 1;

                  }

  return 0;

 }

 

//FUNCTION TO GET OPTION FROM THE USER USING MOUSE OR KEYBOARD

void getoption()

{

 showmouseptr();

 restrictmouseptr(10,200,80,400);

                while(1)

                {

                  getmousepos(&button,&x,&y);

                  if((button&1)==1)

                  { corx=x;

                                cory=y;

                                if(getcategory(corx,cory)==1)

                                                break;

                  }

                  int cho=bioskey(0);

                  cho=cho>>8;

                   switch(cho)

                                {

                                  case 2:

                                  case 50:

                                  case 28:

                                  case 79: strcpy(category,"Movies");

                                                                   return;

                                  case 3:

                                  case 31:

                                  case 80: strcpy(category,"Sports");

                                                                   return;

                                  case 4:

                                  case 30:

                                  case 81: strcpy(category,"Actors");

                                                                   return;

                                  case 5:

                                  case 25:

                                  case 75: strcpy(category,"Places");

                                                                   return;

                                  default: break;

                                }

                  }

}

 

//FUNCTION TO SHOWFACE (SMILING OR SAD)

void showface(int expr)

{

   setcolor(RED);

   circle(390,50,25);

   setcolor(WHITE);

   ellipse(378,45,0,360,3,4);

   ellipse(402,45,0,360,3,4);

   if(expr==SMILE)

                arc(390,55,235,305,13);

   else

                arc(390,80,55,120,13);

}

//PRINTING HIGH SCORE WITH THE NAMES OF THE SCORERS

void hiscore()

{

 cleardevice();

 border();

 setcolor(RED);

 settextstyle(1,0,5);

 outtextxy(50,140,"    H I   S C O R E");

 settextstyle(3,0,3);

 setcolor(WHITE);

 outtextxy(60,220,"Sorry! This feature is not available in this version

");

 outtextxy(60,270,"For further details, Contact  :  ");

 setcolor(GREEN);

 outtextxy(60,310,"        mkj_manishjain@yahoo.co.in");

 outtextxy(60,345,"        Mobile no.: +91 9896455735 ");

 settextstyle(4,0,4);

 setcolor(RED);

 outtextxy(140,425,"Press any key to Continue");

 getch();

 show_main_menu();

}

 

//GETTING THE CHOICE FROM THE USER FOR THE MAIN MENU

void get_mm_choice()

{

 get:

 int cho=bioskey(0);

 cho=cho>>8;

 switch(cho)

 {

  case 2:

  case 25:

  case 28:

  case 79: play();

                   break;

 

  case 3:

  case 23:

  case 80: instruction();

                   break;

 

  case 4:

  case 35:

  case 81: hiscore();

                   break;

 

  case 5:

  case 18:

  case 75: exit(0);

                   break;

  default: goto get;

 }

}

 

//MAIN MENU OF THE PROGRAM

void show_main_menu()

{

 cleardevice();

 border();

 settextstyle(1,0,5);

 setcolor(GREEN);

 outtextxy(60,130,"M A I N  M E N U");

 settextstyle(3,0,5);

 

 for(i=0;i<4;i++)

 {

  setcolor(WHITE);

  outtextxy(67,180+(35*i),main_menu[i]);

  setcolor(RED);

  outtextxy(130,180+(35*i),m_m[i]);

 }

 get_mm_choice();

}

 

//DISPLAY THE CHARACTER AT ITS APPROPRIATE POSITION WITH DESIRED COLOR

void display(char ch,int pos,int color)

{

 char c[2];

 c[0]=ch;

 c[1]='\0';

 setcolor(color);

 outtextxy(blankpos_x[pos%16]+15,blankpos_y[pos/16],c);

}

 

//DRAWING THE MAN ON THE HANGER PARTS BY PARTS AS PER CORRECTNESS OF

GUESSES

void drawhangman(int count_f)

{

 setcolor(RED);

 if(hngmnflag==1)

 {

  switch(count_f)

  {

  case 1:   circle(500,150,10);

                                                hngmnflag=0;

                                                break;

  case 2:   line(500,160,500,170);

                                                hngmnflag=0;

                                                break;

  case 3:   ellipse(500,192,0,360,15,20);

                                                hngmnflag=0;

                                                break;

  case 4:   line(500,213,490,218);

                                                hngmnflag=0;

                                                break;

  case 5:   line(500,213,510,218);

                                                hngmnflag=0;

                                                break;

  case 6:   line(500,170,480,180);

                                                hngmnflag=0;

                                                break;

  case 7:   line(500,170,520,180);

                                                hngmnflag=0;

                                                break;

  case 8:                setcolor(acolor);

                                                outtextxy(100,340,"MERCY CHANCE");

                                                delay(1000);

                                                setcolor(getbkcolor());

                                                outtextxy(100,340,"MERCY CHANCE");

                                                hngmnflag=0;

                                                break;

  }

 }

}

 

//ASKING USER IF HE WISHES TO PLAY AGAIN

void asktocontinue()

{

   setcolor(WHITE);

   outtextxy(40,340,"Wish to Play again:(Y/N):");

   get:

   char ch=getch();

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

                 {

                   outtextxy(440,340,"Y");

                   getch();

                   play();

                 }

   else if(ch=='n'||ch=='N')

                 {

                   outtextxy(440,340,"N");

                   getch();

                   exit(0);

                 }

                goto get;

}

 

//CHECK THE KEY PRESSED AND TAKE APPROPRIATE ACTION

void check(char ch)

{

 flag=0;

 hlflag=1;

 prflag=0;

 for(i=0;string[i]!='\0';i++) //CHECKING CHARACTER IN THE STRING

  {

   if(ch==string[i])      //If char is present in the string

                {

                 prflag=1;

                 for(j=0;j<hlcount;j++)

                  {

                   if(ch==hitlist[j])    //if char is present in the list of pressed

characters

                                {

                                 hlflag=0;

                                 break;

                                }

                  }

                 if(hlflag==1)

                  { setcolor(tcolor);flag=1;display(ch,i,GREEN);count_s--; }

                 else break;

                }

  }

  if(prflag==0)    //If the character is not present in the string

   {

                for(j=0;checklist[j]!='\0';j++)

                 {

                  if(ch==checklist[j])

                                return;

                 }

                checklist[count_f++]=ch;

                wr_guesses[count_f-1]=ch;

                display(ch,32+(count_f),RED);

                hngmnflag=1;

   }

  else if(prflag==1 && flag==1)  //If the character present is repeated

                  hitlist[hlcount++]=ch;

 

  if(count_s==0)                  //GAME CLEARED

  {

   setcolor(acolor);

   outtextxy(100,265,"\nGame Cleared");

   gameflag=1;

  //DRAWING A SMILING FACE TO SHOW GAME CLEARED

   showface(SMILE);

   asktocontinue();

  }

  else if(count_f>8)              //GAME OVER

  {

   setcolor(acolor);

   outtextxy(100,265,"\nGame Over");

   gameflag=1;

   setcolor(RED);

   for(i=0;string[i]!='\0';i++)

   {

                dispflag=0;

                 for(j=0;j<hlcount;j++)

                  {

                                if(string[i]==hitlist[j])

                                 {

                                  dispflag=1;

                                  break;

                                 }

                  }

                if(dispflag==0)                 //Display Remaining Characters

                 display(string[i],i,RED);

   }

 //DRAWING A SAD FACE TO SHOW GAME OVER

   showface(SAD);

   asktocontinue();

   getch();

   exit(0);

  }

  drawhangman(count_f);

}

 

void matchkey(int s)        //GENERATING THE ASCII OF THE KEY PRESSED

{

  if(s>=16 && s<=25)

                ch=firstrow[s-16];

  else if(s>=30 && s<=38)

                ch=secondrow[s-30];

  else if(s>=44 && s<=50)

                ch=thirdrow[s-44];

  else if(s>=2 && s<=10)

                ch=(char)(47+s);

  else if(s==11)

                ch=(char)48;

  check(ch);

}

 

//SHOW DATE AND TIME

void showtime()

{

  _strtime(timebuf);

  setcolor(GREEN);

  settextstyle(1,0,3);

  setviewport(340,18,460,60,1);

  outtextxy(10,2,timebuf);

  delay(50);

  clearviewport();

  settextstyle(1,0,4);

}

 

//DRAW THE HANGER FOR MAN TO BE HANGED

void drawhanger()

{

 setcolor(WHITE);

 line(500,125,500,140);

 line(500,125,525,125);

 line(525,125,525,220);

}

 

//DRAW THE SETUP FOR THE GAME

void drawsetup()

{

 hidemouseptr();

 cleardevice();

 

 setcolor(BLUE);

 rectangle(8,8,mx-8,my-8);

 

 setcolor(RED);

 rectangle(9,9,mx-9,my-9);

 line(10,381,mx-10,381);

 line(10,341,468,341);

 line(10,301,468,301);

 line(10,65,330,65);

 

 setcolor(GREEN);

 rectangle(10,10,mx-10,my-10);

 line(10,380,mx-10,380);

 line(10,340,468,340);

 line(10,300,468,300);

 line(10,66,330,66);

 

 bar(468,10,472,380);

 bar(188,10,192,66);

 bar(328,10,332,66);

 

  settextstyle(1,0,3);

  _strdate(datebuf);

  outtextxy(220,10,"DATE");

  outtextxy(200,30,datebuf);

 

 settextstyle(8,0,7);

 outtextxy(50,360,"H A N G M A N");

 setcolor(YELLOW);

 outtextxy(48,360,"H A N G M A N");

 setcolor(WHITE);

 outtextxy(46,360,"H A N G M A N");

 settextstyle(2,0,4);

 outtextxy(46,446,"c");       //COPYRIGHT SYMBOL

 circle(48,453,4);

 settextstyle(3,0,3);

 outtextxy(56,435," Fantasatic Four (P) Ltd. 2003-07");

 

 settextstyle(3,0,4);

 setcolor(BLUE);

 outtextxy(500,18,"Player");

 settextstyle(3,0,2);

 setcolor(WHITE);

 outtextxy(510-(strlen(name)*2),55,name);

 setcolor(GREEN);

 settextstyle(1,0,5);

 outtextxy(40,13,category);

 

 drawhanger();

}

 

//FUNCTION GAME-MAIN FUNCTION WHERE FUNCTIONING OF GAME STARTS

void game()

{

 strcat(category,".man");

 fstream f1(category,ios::in|ios::nocreate|ios::binary);

 randomize();

 int num=(random(150))%99+1;

 f1.seekg(num*sizeof(rec));

 f1.read((char*)&rec,sizeof(rec));

 

 strcpy(string,rec.returnword());

 len=strlen(string);

 

 setcolor(GREEN);

 settextstyle(1,0,4);

 

 for(i=0;string[i]!='\0';i++)

 { //DISPLAYING THE BLANK SPACES('_') FOR EACH CHARACTER

  if((string[i]>=48 &&string[i]<=57) ||(string[i]>=65 &&string[i] <=90)

||

(string[i] >=97 &&string[i] <=122))

                {

                 outtextxy(blankpos_x[i%16],blankpos_y[i/16]," _ ");

                 count_s++;

                }

  else

                { //DISPLAYING THE COMMA(',') FOR EACH SPACE

                  outtextxy(blankpos_x[i%16],blankpos_y[i/16]," , ");

                  spaces++;

                }

 }

  setcolor(RED);

  outtextxy(50,300,"\nPRESS ANY KEY TO PLAY");

  getch();

  setcolor(getbkcolor());

  outtextxy(50,300,"\nPRESS ANY KEY TO PLAY");

  setcolor(GREEN);

 

  //ACCEPTING KEYSTROKE UNTILL THE CONDITION IS SATISFIED

 while(count_s>=0 && count_f<=8)   //INITIALLY count_s=len i.e.(LENGTH

of

word)

 {                                          //and count_f is no. of wrong

guesses

   if(bioskey(1))

   {

                 key=bioskey(0);

                 int s=key>>8;

                 if(s==1)

                  {

                   getch();

                   exit(0);

                  }

                 else if(s==28)

                  continue;

                 else

                  matchkey(s);

   }

  if(gameflag!=1)

                showtime();

  setviewport(0,0,mx,my,1);

 }

}

 

//FUN

//FUNCTION TO INITIALISE GRAPHICS

void initgraphics()

{

 d=DETECT;

 initgraph(&d,&m,"..//bgi");

 mx=getmaxx();

 my=getmaxy();

}

 

void play()

{

 init();

 chooseoption();

 drawsetup();

 game();

}

 

//FUNCTION TO INPUT NAME OF TEH USER

 void getuser()

 {

  cleardevice();

  cout<<"\n\nEnter your Name:";

  gets(name);

  if(strlen(name)<1)

   strcpy(name,"USER");

 }

 

//WELCOMING THE USER

 void welcomeuser()

 {

  cleardevice();

  setcolor(GREEN);

  border();

  settextjustify(CENTER_TEXT,CENTER_TEXT);

  settextstyle(3,0,8);

  outtextxy(mx/2,150,"WELCOME");

  setcolor(WHITE);

  settextstyle(1,0,7);

  outtextxy(mx/2,my/2,name);

  setcolor(RED);

  settextstyle(5,0,5);

  outtextxy(mx/2,380,"\nPRESS ANY KEY TO PLAY");

  settextstyle(5,0,5);

  outtextxy(mx/2-1,380,"\nPRESS ANY KEY TO PLAY");

  settextstyle(5,0,5);

  outtextxy(mx/2+1,380,"\nPRESS ANY KEY TO PLAY");

  settextjustify(LEFT_TEXT,TOP_TEXT);

  getch();

  show_main_menu();

  cleardevice();

 }

 

 

 //MAIN FUNCTION- THE PROGRAM STARTS HERE

void main()

{

 init();

 FIRSTSCREEN();

 getuser();

 welcomeuser();

}

No comments:

Post a Comment