TicTacToeBoard.cpp
上传用户:laixiong
上传日期:2007-03-11
资源大小:2994k
文件大小:4k
源码类别:

Symbian

开发平台:

C/C++

  1. /*
  2. * ==============================================================================
  3. *  Name        : TicTacToeBoard.cpp
  4. *  Part of     : TicTacToe
  5. *  Description : 
  6. *  Version     : 
  7. *
  8. *  Copyright (c) 2005 Nokia Corporation.
  9. * ==============================================================================
  10. */
  11. // INCLUDE FILES
  12. #include "TicTacToeBoard.h"
  13. // EXTERNAL DATA STRUCTURES
  14. // EXTERNAL FUNCTION PROTOTYPES  
  15. // CONSTANTS
  16. // MACROS
  17. // LOCAL CONSTANTS AND MACROS
  18. // MODULE DATA STRUCTURES
  19. // LOCAL FUNCTION PROTOTYPES
  20. // FORWARD DECLARATIONS
  21. // ============================ MEMBER FUNCTIONS ===============================
  22. // -----------------------------------------------------------------------------
  23. // TTicTacToeBoard::TTicTacToeBoard
  24. // C++ default constructor can NOT contain any code, that
  25. // might leave.
  26. // -----------------------------------------------------------------------------
  27. //
  28. TTicTacToeBoard::TTicTacToeBoard()
  29.     {
  30.     Reset();
  31.     }
  32. // Destructor
  33. TTicTacToeBoard::~TTicTacToeBoard()
  34.     {
  35.     }
  36. // -----------------------------------------------------------------------------
  37. // TTicTacToeBoard::Reset
  38. // Reset the board to initial state.
  39. // -----------------------------------------------------------------------------
  40. //
  41. void TTicTacToeBoard::Reset()
  42.     {
  43.     for ( TInt i = 0; i < KTicTacToeCells ; i++)
  44.         {
  45.         iCells[i] = ETttPlayerNone;
  46.         }
  47.     iCanMove = ETrue;
  48.     }
  49. // -----------------------------------------------------------------------------
  50. // TTicTacToeBoard::Player
  51. // Get the player who has taken a given cell.
  52. // -----------------------------------------------------------------------------
  53. //
  54. TTicTacToePlayer TTicTacToeBoard::Player(TInt aColumn, TInt aRow) const
  55.     {
  56.     TInt cell = aRow * KTicTacToeColumns + aColumn;
  57. if ( 0 <= cell && cell < KTicTacToeCells )
  58. {
  59. return iCells[cell];
  60. }
  61. return ETttPlayerNone;
  62.     }
  63. // -----------------------------------------------------------------------------
  64. // 
  65. // 
  66. // -----------------------------------------------------------------------------
  67. //
  68. TBool TTicTacToeBoard::Move(TInt aCell, TTicTacToePlayer aPlayer)
  69.     {
  70. if ( 0 <= aCell && aCell < KTicTacToeCells
  71.         && iCanMove && ETttPlayerNone == iCells[aCell] )
  72. {
  73. iCells[aCell] = aPlayer;
  74. return ETrue;
  75. }
  76. return EFalse;
  77.     }
  78. // -----------------------------------------------------------------------------
  79. // 
  80. // 
  81. // -----------------------------------------------------------------------------
  82. //
  83. TBool TTicTacToeBoard::HasWon(TTicTacToePlayer aPlayer)
  84.     {
  85.     if ( (iCells[0] == aPlayer && iCells[1] == aPlayer && iCells[2] == aPlayer)
  86.         || (iCells[3] == aPlayer && iCells[4] == aPlayer && iCells[5] == aPlayer)
  87.         || (iCells[6] == aPlayer && iCells[7] == aPlayer && iCells[8] == aPlayer)
  88.         || (iCells[0] == aPlayer && iCells[3] == aPlayer && iCells[6] == aPlayer)
  89.         || (iCells[1] == aPlayer && iCells[4] == aPlayer && iCells[7] == aPlayer)
  90.         || (iCells[2] == aPlayer && iCells[5] == aPlayer && iCells[8] == aPlayer)
  91.         || (iCells[0] == aPlayer && iCells[4] == aPlayer && iCells[8] == aPlayer)
  92.         || (iCells[2] == aPlayer && iCells[4] == aPlayer && iCells[6] == aPlayer) )
  93.         {
  94.         // The game is over
  95.         iCanMove = EFalse;
  96.         return ETrue;
  97.         }
  98.     return EFalse;
  99.     }
  100. // -----------------------------------------------------------------------------
  101. // 
  102. // 
  103. // -----------------------------------------------------------------------------
  104. //
  105. TBool TTicTacToeBoard::IsDraw()
  106.     {
  107.     // Check for empty cells
  108.     for ( TInt i = 0; i < KTicTacToeCells ; i++)
  109.         {
  110.         if ( ETttPlayerNone == iCells[i] )
  111.             {
  112.             return EFalse;
  113.             }
  114.         }
  115.     // The game is over
  116.     iCanMove = EFalse;
  117.     return ETrue;
  118.     }
  119. //  End of File