C++ games 2

 Artificial intelligence tic tac toe in c++

Cofe here:

/* Graphic Tictactoe - The first ever tictactoe playing artificial intelligence.

None has defeated this computer 'A.I.' . The game is very flexible. 

Either the user or the 'A.I.' can start the game.

User is free to select his own symbol

*/


#include<iostream>

#include<conio.h>

#include<graphics.h>

#include<stdlib.h>

#include<string.h>

#include<dos.h>


void*message;

int select(int mult)

{

 union REGS inregs, outregs ;

 int bli=1,use=1,key=34,i;

 settextstyle(2,0,5);

 while(key!=28)

  {

    if(bli>0)

    {

      use=bli;

      setfillstyle(1,0);

      bli=0-bli;

    }

    else if(bli<0)

    {

      use=0-bli;

      setfillstyle(1,8);

      bli=0-bli;

    }

    floodfill(221,111+use*40,15);

    delay(100);

    if(bli<0)

    {

      key=kbhit();

      if(kbhit())

      {

inregs.h.ah = 0 ;

int86(22, &inregs, &outregs) ;

key=outregs.h.ah;

      }

    }

    if((key==72)&&(use>1))

     {

      bli=use-1;

     }

    if((key==80)&&(use<mult))

     {

      bli=use+1;

     }

  }

 if(bli<0)

  bli=0-bli;

 return(bli);

}

void box(char mes[50])

{ putimage(5,5,message,0);

  settextstyle(0,0,1);

  outtextxy(20,30,mes);

}

void draw(char mn[3][3])

{

 char as[3][3][3];

 char num[9][3];

 for(int i=0;i<10;i++)

 { strcpy(num[i]," ");

   num[i][0]=char(49+i);

 }

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

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

   strcpy(as[i][j],"  ");

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

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

    {as[i][j][0]=mn[i][j];}

 }

 clearviewport();

 setcolor(15);

 rectangle(0,0,639,479);

 setfillstyle(1,8);

 settextstyle(0,0,1);

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

 {

  rectangle(192,117+i*85,267,192+i*85);

  outtextxy(260,185+i*85,num[0+i*3]);

  rectangle(277,117+i*85,352,192+i*85);

  outtextxy(345,185+i*85,num[1+i*3]);

  rectangle(362,117+i*85,437,192+i*85);

  outtextxy(430,185+i*85,num[2+i*3]);

 }

 floodfill(500,430,15);

 setcolor(15);

 settextstyle(1,0,4);

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

 {

  outtextxy(221,135+i*85,as[i][0]);

  outtextxy(306,135+i*85,as[i][1]);

  outtextxy(391,135+i*85,as[i][2]);

 }

}

void main()

{

clrscr();

int gd=DETECT,gm;

initgraph(&gd,&gm,"");

message=malloc(imagesize(5,5,634,55));

setcolor(15);

rectangle(5,5,634,55);

setfillstyle(1,RED);

floodfill(30,30,15);

outtextxy(10,10,"Message:-");

getimage(5,5,634,55,message);

char col[3][3],input,madu,comps,hums,mess[70]={"computer has selected 

the

symbol   . Press any key to continue.."};

int

exii,dang[8],my[8],hard,many,result,guess=7,bre,mad=2,count=0,dont=0,play[

8],p,q,end=0,note,inpu,first,use;

do

{guess=7;mad=2;count=0;dont=0;end=0;result=0;

for(int i=0;i<8;i++)

play[i]=0;

many=0;exii=1;

clearviewport();

setcolor(15);

rectangle(0,0,639,479);

rectangle(20,320,620,460);

rectangle(220,150,390,180);

rectangle(240,155,370,175);

setfillstyle(1,8);

floodfill(100,100,15);

setcolor(15);

settextstyle(4,0,4);

outtextxy(200,50,"TIC TAC TOE");

settextstyle(3,0,1);

outtextxy(40,290,"How to play :-");

outtextxy(35,330,"In this Game, you may select your symbol. You must 

try

attain");

outtextxy(26,350,"three of your symbols in a line. if you suceed you 

are

the winner.");

outtextxy(35,370," But at the same time you should prevent the computer

from");

outtextxy(35,390,"getting three of its symbols in a line. To play enter

the number");

outtextxy(32,410,"associated with the place where you want to play. 

Press

any key");

outtextxy(35,430,"to start");

settextstyle(2,0,6);

outtextxy(258,155,"Start Game");

select(1);

hard=2;

for(int j=0;j<8;j++)

{dang[j]=0;my[j]=0;play[j]=0;}

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

{

 for(int k=0;k<3;k++)

 col[j][k]=' ';

 }

draw(col);

box("Please type in your symbol");

hums=getche();

if((hums!='X')&&(hums!='x')

)

comps='X';

else

comps='0';

mess[33]=comps;

box(mess);

getch();

randomize();

first=(int(rand()%100));

if(hard==2)guess=(int(rand()%100));

else guess=5;

if((first%4)>=2)

{use=guess%3;box("Computer has the first chance to play!");}

else

{use=3;

mad=0;box("You have the first chance to play!");}

delay(2000);

do

{

for(int j=0;j<8;j++)

{dang[j]=0;my[j]=0;}

count++;

mad++;bre=0;

if((end!=1)&&(mad!=1))

{

switch(use)

{

  case 0:{ switch(count)

   {

   case 1: col[2][2]=comps;break;

   case 2: {if(col[1][1]==hums)

    {col[0][0]=comps;play[0]=1;}

   else if((col[2][0]==hums)||(col[2][1]==hums))

    {col[0][2]=comps;play[1]=1;}

   else if((col[0][1]==hums))

    {col[0][2]=comps;play[3]=1;}

    else if((col[1][0]==hums))

    {col[2][0]=comps;play[4]=1;}

   else if((col[0][2]==hums)||(col[1][2]==hums))

    {col[2][0]=comps;play[2]=1;}

   else if (col[0][0]==hums)

   {col[0][2]=comps;play[3]=1;}

    else dont=1;

   }break;

   case 3:{if(play[0]==1)

      dont=1;

   else if((play[1]==1)&&(col[1][2]==hums))

       {col[0][0]=comps;}

   else if((play[2]==1)&&(col[2][1]==hums))

       {col[0][0]=comps;}

   else if((play[3]==1)&&((col[2][1]==hums)||(col[1][2]==hums)))

{col[2][0]=comps;}

   else if((play[4]==1)&&(col[2][1]==hums))

{col[0][2]=comps;}

   else

dont=1;

   }break;

   case 4:dont=1;break;

       }

   }break;

  case 1:{switch(count)

  { case 1:col[0][1]=comps;break;

    case 2:{if(col[2][0]==hums)

      col[0][0]=comps;

    else if(col[1][0]==hums)

      col[0][0]=comps;

    else if(col[0][2]==hums)

      col[1][0]=comps;

    else if(col[1][2]==hums)

      col[0][2]=comps;

    else if(col[0][0]==hums)

      col[1][2]=comps;

    else if(col[2][2]==hums)

      col[0][2]=comps;

    else if(q<=1)

      col[2][2]=comps;

    else

      col[2][0]=comps;

    } break;

    case 3:dont=1;

   }


   }break;

  case 2:{switch(count)

  { case 1:col[1][1]=comps;break;

    case 2:dont=1;

  }

  }break;

  case 3:{dont=1;

  }break;

}

if(dont==1)

{

for(int i=0,l=2;i<3;i++,l--)

{

if(col[i][i]==hums)

 dang[0]++;

else if(col[i][i]==comps)

 my[0]++;

if(col[i][l]==hums)

 dang[1]++;

else if(col[i][l]==comps)

 my[1]++;

}

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

{

 for(int k=0;k<3;k++)

     {

       if(col[j][k]==hums)

dang[j+2]++;

       else if(col[j][k]==comps)

my[j+2]++;

       if(col[k][j]==hums)

dang[j+5]++;

       else if(col[k][j]==comps)

my[j+5]++;

     }

}

for(int j=0;j<8;j++)

{

if((my[j]==3)||(dang[j]==3)||(count==5))

end=1;

if((dang[j]==2)&&(my[j]!=0))

dang[j]=0;

if((my[j]==2)&&(dang[j]==0))

{my[j]=3;bre=1;}

}

if(bre==1)

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

  dang[j]=0;

}

if((dang[0]==2)||(my[0]==3))

  {

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

   { if(col[i][i]==' ')

       col[i][i]=comps;


    }}

else if((dang[1]==2)||(my[1]==3))

      {

       for(int i=0,l=2;i<3;i++,l--)

       { if(col[i][l]==' ')

col[i][l]=comps;

       }}


else

if((dang[2]==2)||(my[2]==3)||(dang[3]==2)||(my[3]==3)||(dang[4]==2)||(my[4

]==3))

{

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

 {if((dang[j+2]==2)||(my[j+2]==3))

  for(int k=0;k<3;k++)

     {if(col[j][k]==' ')

{col[j][k]=comps;bre=1;}}

  }

}

else

if((dang[5]==2)||(my[5]==3)||(dang[6]==2)||(my[6]==3)||(dang[7]==2)||(my[7

]==3))

{

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

 {if((dang[j+5]==2)||(my[j+5]==3))

  for(int k=0;k<3;k++)

     {if(col[k][j]==' ')

{col[k][j]=comps;bre=1;}}

  }

}

else if(col[1][1]==' ')

col[1][1]=comps;

else if((use==2)&&(col[2][2]==' '))

col[2][2]=comps;

else if((use==2)&&(col[0][2]==' '))

col[0][2]=comps;

else

if((((col[0][0]==hums)&&(col[2][2]==hums))||((col[0][2]==hums)&&(col[2][0]

==hums)))&&(col[1][2]==' '))

col[1][2]=comps;

else

if((col[1][1]!=hums)&&((col[0][0]==hums)||(col[2][2]==hums))&&((col[0][1]=

=hums)||(col[1][2]==hums))&&(col[0][2]==' '))

col[0][2]=comps;

else

if((col[1][1]!=hums)&&((col[0][0]==hums)||(col[2][2]==hums))&&((col[1][0]=

=hums)||(col[2][1]==hums))&&(col[2][0]==' '))

col[2][0]=comps;

else

if((col[1][1]!=hums)&&((col[0][2]==hums)||(col[2][0]==hums))&&((col[2][1]=

=hums)||(col[1][2]==hums))&&(col[2][2]==' '))

col[2][2]=comps;

else

if((col[1][1]!=hums)&&((col[0][2]==hums)||(col[2][0]==hums))&&((col[0][1]=

=hums)||(col[1][0]==hums))&&(col[0][0]==' '))

col[0][0]=comps;

else if((col[1][1]!=comps)&&(col[2][2]==' '))

col[2][2]=comps;

else if((col[1][1]!=comps)&&(col[0][2]==' '))

col[0][2]=comps;

else if(col[0][0]==' ')

col[0][0]=comps;

else if(col[2][2]==' ')

col[2][2]=comps;

else if(col[0][1]==' ')

col[0][1]=comps;

else if(col[1][2]==' ')

col[1][2]=comps;

else if(col[0][2]==' ')

col[0][2]=comps;

else if(col[2][0]==' ')

col[2][0]=comps;

else if(col[1][0]==' ')

col[1][0]=comps;

else if(col[2][1]==' ')

col[2][1]=comps;

}

for(int i=0;i<8;i++)

{if(my[i]==3)

end=1;

}

}

star:

draw(col);

box(" ");

if(end!=1)

{

box("play");

madu=getche();

if((int(madu)<49)||(int(madu)>57))

{box("INVALID ENTRY!");for(long double jk=0;jk<99999999;jk++);goto 

star;}

inpu=int(madu)-48;

p=(inpu-1)/3;

switch(inpu%3)

{case 0:q=2;break;

 case 1:q=0;break;

 case 2:q=1;break;

 }

if(col[p][q]!=' ')

{box("Space is already occupied!");for(long double

jk=0;jk<99999999;jk++);goto star;}

col[p][q]=hums;

}

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

{dang[j]=0;my[j]=0;}

for(int i=0,l=2;i<3;i++,l--)

{

if(col[i][i]==hums)

 dang[0]++;

else if(col[i][i]==comps)

 my[0]++;

if(col[i][l]==hums)

 dang[1]++;

else if(col[i][l]==comps)

 my[1]++;

}

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

{

 for(int k=0;k<3;k++)

     {

      if(col[j][k]==hums)

dang[j+2]++;

       else if(col[j][k]==comps)

my[j+2]++;

       if(col[k][j]==hums)

dang[j+5]++;

       else if(col[k][j]==comps)

my[j+5]++;

     }

}

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

{if((my[j]==3)||(dang[j]==3))

 end=1;

}

}while((end!=1));

draw(col);

for(int asd=0;asd<6;asd++)

{many=many+1;

 if((my[0]==3)||(dang[0]==3))

  {exii=0;

  if(many%2==1)

   for(int m=0,n=0;m<3;m++,n++)

   { setfillstyle(1,BLUE);floodfill(193+m*85,118+n*85,15); }

  else

   for(int m=0,n=0;m<3;m++,n++)

   { setfillstyle(1,BLACK);floodfill(193+m*85,118+n*85,15); }}

 else if((my[1]==3)||(dang[1]==3))

  {exii=0;

  if(many%2==1)

   for(int m=0,n=2;m<3;m++,n--)

   { setfillstyle(1,BLUE);floodfill(193+m*85,118+n*85,15); }

  else

   for(int m=0,n=2;m<3;m++,n--)

   { setfillstyle(1,BLACK);floodfill(193+m*85,118+n*85,15); }}

   else for(j=2;j<8;j++)

  {if(((my[j]==3)||(dang[j]==3))&&(j<5))

   {exii=0;

  if(many%2==1)

   for(int m=0,n=j-2;m<3;m++)

    { setfillstyle(1,BLUE);floodfill(193+m*85,118+n*85,15); }

  else

   for(int m=0,n=j-2;m<3;m++)

    { setfillstyle(1,BLACK);floodfill(193+m*85,118+n*85,15); }}

  else if((my[j]==3)||(dang[j]==3))

   {exii=0;

  if(many%2==1)

   for(int m=0,n=j-5;m<3;m++)

    { setfillstyle(1,BLUE);floodfill(193+n*85,118+m*85,15); }

  else

   for(int m=0,n=j-5;m<3;m++)

    { setfillstyle(1,BLACK);floodfill(193+n*85,118+m*85,15); }}

  }

for(long double jk=0;jk<9999999;jk++);

if(exii==1)break;

}

for(int m=0;m<8;m++)

 { if(my[m]==3)

  result=1;

 }

for(m=0;m<8;m++)

 { if(dang[m]==3)

  result=2; }

switch(result)

{case 1:box("You loose! Want to try again(y/n)");break;

 case 2:box("You win! Want to try again(y/n)");break;

 default:box("The game is draw! Want to try again(y/n)");break;

}

input=getche();

}while(input=='Y'||input=='y');

clearviewport();

for(long double mas=0;mas<=99999999;mas++);

exit(0);

}



Comments