Advertisement
4_2005-2006 Games #165369

A simple Tic-Tac-Toe game.

This is a simple Tic-Tac-Toe game that uses a 2D array. It illustrates how to constract a simple game. There are no bells and whistles, this is plain and simple C++.

AI

AI Summary: This codebase represents a historical implementation of the logic described in the metadata. Our preservation engine analyzes the structure to provide context for modern developers.

Source Code
original-source
/*****************************************************************************
 * Author: Ethan Croteau
 * Creation Date: 7/31/02
 * Description: This is a simple console app that allows you to play Tic-Tac-Toe.
 * Compile: This is ANSI C++, it was compiled with Borland CPP 5.5.
 *****************************************************************************/
#include <iostream.h>
using namespace std;
class TicTacToe
{
  public:
  TicTacToe();
  int PlayerMove(int i);
  void NextPlayer();
  void WinCheck();
  void DrawBoard();
  private:
  int board[3][3];
  int turn; // player1 == 1, player2 == 2
  int gameOver;
  void PlayGame();
};
/*****************************************************************************
 * Clear the board, set turn for player1, set gameOver to false, draw the board,
 * then away we go!
 *****************************************************************************/
TicTacToe::TicTacToe()
{
  for(int i = 0; i < 3; i++)
    for(int j = 0; j < 3; j++)
     board[i][j] = 0;  // 0 means empty
  turn = 1; // player1
  gameOver = 0;
  DrawBoard();
  PlayGame();
}
/*****************************************************************************
 * i is the board position that the player selects.
 * Calculate the x and y coordinates.
 * Ensure board position is valid. Check if game has been won. Switch Players. Update board.
 * Return: 0 if move was made, otherwise return the value stored in the board position.
 *****************************************************************************/
int TicTacToe::PlayerMove(int i)
{
  int x = (i - 1)/3;
  int y = ((i + 2) % 3);
  int returnVal = board[x][y];
  if (returnVal == 0)
    {
    board[x][y] = turn;
    WinCheck();
    if (!gameOver)
      NextPlayer();
    }
  else
    cout << "Invalid move, try again.\n";
  DrawBoard();
  return returnVal;
}
/*****************************************************************************
 * If turn equals 1, set it equal to 2. Otherwise set it equal to 1.
 * The switches the active player.
 *****************************************************************************/
void TicTacToe::NextPlayer()
{
  if (turn == 1)
    turn = 2;
  else
    turn = 1;
}
/*****************************************************************************
 * If the game has been won, set gameOver equal to turn.
 * Turn always contains a value that is boolean true: 1 or 2.
 *****************************************************************************/
void TicTacToe::WinCheck()
{
  if ((board[0][0] == turn) && (board[1][0] == turn) && (board[2][0] == turn))
    gameOver = turn;
  else
  if ((board[0][1] == turn) && (board[1][1] == turn) && (board[2][1] == turn))
    gameOver = turn;
  else
  if ((board[0][2] == turn) && (board[1][2] == turn) && (board[2][2] == turn))
    gameOver = turn;
  else
  if ((board[0][0] == turn) && (board[0][1] == turn) && (board[0][2] == turn))
    gameOver = turn;
  else
  if ((board[1][0] == turn) && (board[1][1] == turn) && (board[1][2] == turn))
    gameOver = turn;
  else
  if ((board[2][0] == turn) && (board[2][1] == turn) && (board[2][2] == turn))
    gameOver = turn;
  else
  if ((board[0][0] == turn) && (board[1][1] == turn) && (board[2][2] == turn))
    gameOver = turn;
  else
  if ((board[0][2] == turn) && (board[1][1] == turn) && (board[2][0] == turn))
    gameOver = turn;
}
/*****************************************************************************
 * If the game has been won, set gameOver equal to turn.
 * Turn always contains a value that is boolean true: 1 or 2.
 *****************************************************************************/
void TicTacToe::PlayGame()
{
  int i;
  while (gameOver!=turn)
  {
    //DrawBoard();
    cout << "Player[" << turn << "] Please enter move: ";
    cin >> i;
    PlayerMove(i);
  }
  cout << "Player[" << turn << "] Wins!" << endl;
}
/*****************************************************************************
 * Display the game board using ASCII characters.
 *****************************************************************************/
void TicTacToe::DrawBoard()
{
  int temp[9];
  int k = 0;
  for(int i = 0; i < 3; i++)
    for(int j = 0; j < 3; j++)
    {
    if (board[i][j] == 0)
      temp[k] = k+49;
    else
       {
        if (board[i][j] == 1)
         temp[k] = 88;
        else
         temp[k] = 79;
       }
    k++;
    }
  cout << "+---+---+---+\n";
  cout <<"| " << (char)temp[0] << " | " << (char)temp[1] << " | " << (char)temp[2] << " | \n";
  cout << "+---+---+---+\n";
  cout <<"| " << (char)temp[3] << " | " << (char)temp[4] << " | " << (char)temp[5] << " | \n";
  cout << "+---+---+---+\n";
  cout <<"| " << (char)temp[6] << " | " << (char)temp[7] << " | " << (char)temp[8] << " | \n";
  cout << "+---+---+---+\n";
}
/*****************************************************************************
 * Instantiate a TicTacToe object, which effectively starts your game play.
 *****************************************************************************/
int main()
{
  TicTacToe Game;
  return 0;
}
Original Comments (3)
Recovered from Wayback Machine