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,336
    Likes Received:
    377
    Trophy Points:
    83
    Please read the [thread=168]Before you make a query[/thread] thread.
     

Share This Page

  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice