#ifndef __TICTACTOE_H__
#define __TICTACTOE_H__


#define getrandom( min, max ) ((rand() % (int)(((max) + 1) - (min))) + (min))


#define TIE 0
#define X   1
#define Y   2

#define VALID 0
#define SCORE 1

#define WINNER     10
#define BLOCK      8
#define ALMOST_WIN 6


#define ALMOST_WIN_PATTERNS 24
#define FULL_CARD 511

#define TOTAL_WIN_PATTERNS 8




class TicTacToeGame
{
  public:
    TicTacToeGame();
    virtual ~TicTacToeGame();
    int PlayTicTacToeGame();
    void SetWinPatterns(unsigned long * _winPatterns, 
                        unsigned long * _almostWinPatterns);

  private:
    void PlaceToken(unsigned long * _playerPos, unsigned long _oppPos);
    void PlaceRandomToken(unsigned long * _playerPos, unsigned long _oppPos);
    int CheckMove (int _newPos, unsigned long _myPos, unsigned long _oppPos);
    int CheckForWinner (unsigned long _xLoc, unsigned long yLoc);

    int winner;
    unsigned long xLoc;
    unsigned long yLoc;
    unsigned long * winPatterns;
    unsigned long * almostWinPatterns;

};










#endif