1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

Can Anyone Explain Me Some Functions Of A Program Code

Discussion in 'C++' started by hiteshlohani, May 24, 2006.

  1. hiteshlohani

    hiteshlohani New Member

    Joined:
    May 22, 2006
    Messages:
    1
    Likes Received:
    0
    Trophy Points:
    0
    A HAV A PROGRAM CODE OF TIC-TAC-TOE, AND I HAV IMPLEMENTED IT USING CLASS AND OBJECTS IN C++
    BUT I AM NOT GETTING SOME FUNCTIONS, CAN ANY PROGRAMMING GENIUS EXPLAIN ME THESE FUNCTIONS i.e findmove(),immediatewin(),findwinner
    the program is as follows:
    Code:
    #include<iostream.h>
    #include<conio.h>
    #include<stdlib.h>
    #include<graphics.h>
    #include<dos.h>
    typedef enum { NONE,COMPUTER, HUMAN } PlayerType;
    enum ValueType { CompLoss = -1, Draw, CompWin };
    
    /*----------------------------------------------------------------------------
    WINNING BOARD PATTERN
    ---------------------------------------------------------------------------*/
    const static int p[8][3] = {
    {0,1,2},
    {3,4,5},
    {6,7,8},
    {0,3,6},
    {1,4,7},
    {2,5,8},
    {0,4,8},
    {2,4,6}
    };
    class display
    {
    public:
    char b[];
    
    void InitializeBoard(char b[]);
    void MakeMove(char b[],int pos, PlayerType p) ;
    void disp_matrix(void) ;
    void UndoMove(char b[], int pos) ;
    void PrintBoard(char b[]) ;
    // void InitDisplay();
    PlayerType FindWinner(char b[]);
    int FullBoard(char b[]);
    void play_next(void);
    
    // void GetPlayerMove ();
    
    int ImmediateWin(char b[], PlayerType pl,int *BestMove);
    };
    void display::PrintBoard(char b[])
    {
    gotoxy(28,12);
    cout<<b[0];
    gotoxy(32,12);
    cout<<b[1];
    gotoxy(36,12);
    cout<<b[2];
    gotoxy(28,14);
    cout<<b[3];
    gotoxy(32,14);
    cout<<b[4];
    gotoxy(36,14);
    cout<<b[5];
    gotoxy(28,16);
    cout<<b[6];
    gotoxy(32,16);
    cout<<b[7];
    gotoxy(36,16);
    cout<<b[8];
    }
    
    int display::ImmediateWin(char b[], PlayerType pl,int *BestMove)
    {
    int i;
    PlayerType winner;
    
    for (i = 0; i < 9; i++)
    {
    if(b[i] == ' ')
    {
    MakeMove(b,i,pl);
    winner = FindWinner(b);
    if((winner == COMPUTER && pl == COMPUTER) || (winner == HUMAN && pl == HUMAN))
    {
    *BestMove = i;
    UndoMove(b,i);
    return 1;
    }
    UndoMove(b,i);
    }
    }
    
    /*for (i = 0; i < 9; i++)
    if (b[i] == ' ')
    *BestMove = i; */
    return 0;
    
    }
    
    
    
    
    /*----------------------------------------------------------------------------
    CHECK IF THE BOARD IS FULL
    ----------------------------------------------------------------------------*/
    
    int display::FullBoard(char b[])
    {
    int i;
    for (i = 0; i < 9; i++)
    if(b[i] == ' ')
    return 0;
    return 1;
    }
    
    /*----------------------------------------------------------------------------
    FIND THE WINNER
    ----------------------------------------------------------------------------*/
    
    PlayerType display::FindWinner(char b[])
    {
    int i;
    
    for (i = 0; i < 8; i++)
    if(b[p[i][0]] != ' ' && b[p[i][0]] == b[p[i][1]] && b[p[i][0]] == b[p[i][2]])
    return ((b[p[i][0]] == 'X')?COMPUTER:HUMAN);
    return NONE;
    }
    void display::InitializeBoard(char b[])
    {
    int i;
    for (i = 0; i < 9; i++)
    b[i] = ' ';
    }
    
    void display::MakeMove(char b[],int pos, PlayerType p)
    {
    if(p == COMPUTER)
    b[pos] = 'X';
    else
    b[pos] = '0';
    }
    
    
    void display::UndoMove(char b[], int pos)
    {
    b[pos] = ' ';
    }
    
    
    class playerublic display
    {
    public: int m;
    int GetPlayerMove(char b[]);
    };
    int player :: GetPlayerMove(char b[])
    {
    
    while(1)
    {
    gotoxy(20,22);
    cout<<"Enter your move: ";
    gotoxy(62,2);
    cout<<"MOVE=0 to exit ";
    gotoxy(38,22);
    cin>>m;
    if (m < 0 || m > 9)
    cout<<"Illegal move";
    if(m==0)
    exit(0);
    else if (b[m-1] != ' ')
    cout<<"The room is filled";
    else
    break;
    }
    return (m-1);
    }
    
    
    class computerublic display
    
    {
    public:
    void FindMove(char b[],PlayerType p,int *move,int *v);
    };
    void computer::FindMove(char b[],PlayerType p,int *move,int *v)
    {
    int opv;
    int i;
    int Dc;
    
    if (FullBoard(b))
    {
    *v = Draw;
    }
    else if (ImmediateWin(b,p,move))
    {
    if(p == COMPUTER)
    *v = CompWin;
    else
    *v = CompLoss;
    }
    else
    {
    if(p==COMPUTER)
    *v = CompLoss;
    else
    *v = CompWin;
    
    for (i = 0; i < 9; i++)
    {
    if (b[i] == ' ')
    {
    MakeMove(b,i,p);
    FindMove(b,((p==COMPUTER)?HUMAN:COMPUTER),&Dc,&opv );
    UndoMove(b,i);
    if ((p == COMPUTER) && (opv > *v))
    {
    *move = i;
    *v = opv;
    }
    else if ((p == HUMAN) && (opv < *v))
    {
    *move = i;
    *v = opv;
    }
    }
    }
    }
    }
    void main()
    {
    display d;
    player p;
    computer c;
    
    
    int s=DETECT,n;
    initgraph(&s,&n,"c:\\borlandc\\bgi");
    /*----------------------------------------------------------------------------
    DEFINE THE WELCOME PAGE
    ----------------------------------------------------------------------------*/
    
    start:
    char Board[9];
    int move,NumMoves;
    int value;
    PlayerType CurPlayer, winner;
    c.InitializeBoard(Board);
    NumMoves =0;
    setcolor(LIGHTBLUE);
    setlinestyle(0,1,3);
    line(235,170,235,250); /*virticle line*/
    line(265,170,265,250); /*virticle line*/
    line(200,200,300,200); /*horizental line*/
    line(200,230,300,230); /*horizental line*/
    {
    do
    {
    CurPlayer = HUMAN;
    
    move=p.GetPlayerMove(Board);
    
    
    
    c.MakeMove(Board,move,CurPlayer);
    
    
    c.PrintBoard(Board);
    NumMoves++;
    if((winner = d.FindWinner(Board)) != NONE)
    break;
    if (NumMoves >= 9)
    break;
    CurPlayer = COMPUTER;
    c.FindMove(Board,CurPlayer,&move,&value);
    c.MakeMove(Board,move, CurPlayer);
    NumMoves++;
    
    c.PrintBoard(Board);
    
    if((winner = d.FindWinner(Board)) != NONE)
    break;
    } while (NumMoves < 9 && winner == NONE);
    if (winner == COMPUTER)
    {
    gotoxy(4,11);
    cout<<"You Loose the Game";
    setlinestyle(0,1,1); /*for sad face*/
    circle(100,100,50);
    circle(70,85,5);
    circle(130,85,5);
    ellipse(100,130,0,180,10,5);
    
    }
    else if (winner == HUMAN)
    {
    gotoxy(6,11);
    cout<<"You won the game";
    outtextxy(200,400,"You are Amaizaing");
    
    }
    else
    {
    setcolor(RED);
    setlinestyle(0,1,1);
    gotoxy(12,11);
    cout<<"Draw";
    circle(100,100,50); /*for happy face*/
    circle(70,85,5);
    circle(130,85,5);
    ellipse(100,130,180,0,10,5);
    settextstyle(4,0,3);
    outtextxy(150,300,"Better Luck Next Time!");
    getch();
    
    } } //exit(0);
    
    char play;
    play='y';
    do
    {
    gotoxy(20,22);
    //sleep(1);
    cout<<"you want to play again(y/n):\a ";
    cin>>play;
    switch(play)
    {
    case 'y':
    case 'Y':
    goto start;
    case 'n':
    case 'N':
    setcolor(9);
    outtextxy(140,430,"Bye! Bye! Have a Nice Day!");
    //sleep(2);
    exit(0);
    break;
    default:
    cout<<"ENTER 'Y' OR 'N'";
    }
    }while (play == 'y' || play == 'Y');
    
    
    getch();
    }
     
  2. shabbir

    shabbir Administrator Staff Member

    Joined:
    Jul 12, 2004
    Messages:
    15,292
    Likes Received:
    365
    Trophy Points:
    83
    Please read the [thread=168]Before you make a query[/thread] thread.
     

Share This Page