Hello Im needing help in completing this TicTacToe assignmen
Hello I\'m needing help in completing this Tic-Tac-Toe assignment in C# Windows Form Application. I\'m using Visual Studio 2015 Community edition. I need help finishing the coding part, everything left in the comments is what is needed, thanks!!! I have attached a picture of the GUI and below is the code that needs to be worked on.
namespace TicTacToe
{
public partial class TTTForm : Form
{
public TTTForm()
{
InitializeComponent();
}
const string USER_SYMBOL = \"X\";
const string COMPUTER_SYMBOL = \"O\";
const string EMPTY = \"\";
const int SIZE = 5;
// constants for the 2 diagonals
const int TOP_LEFT_TO_BOTTOM_RIGHT = 1;
const int TOP_RIGHT_TO_BOTTOM_LEFT = 2;
// constants for IsWinner
const int NONE = -1;
const int ROW = 1;
const int COLUMN = 2;
const int DIAGONAL = 3;
// This method takes a row and column as parameters and
// returns a reference to a label on the form in that position
private Label GetSquare(int row, int column)
{
int labelNumber = row * SIZE + column + 1;
return (Label)(this.Controls[\"label\" + labelNumber.ToString()]);
}
// This method does the \"reverse\" process of GetSquare
// It takes a label on the form as it\'s parameter and
// returns the row and column of that square as output parameters
private void GetRowAndColumn(Label l, out int row, out int column)
{
int position = int.Parse(l.Name.Substring(5));
row = (position - 1) / SIZE;
column = (position - 1) % SIZE;
}
// This method takes a row (in the range of 0 - 4) and returns true if
// the row on the form contains 5 Xs or 5 Os.
// Use it as a model for writing IsColumnWinner
private bool IsRowWinner(int row)
{
Label square = GetSquare(row, 0);
string symbol = square.Text;
for (int col = 1; col < SIZE; col++)
{
square = GetSquare(row, col);
if (symbol == EMPTY || square.Text != symbol)
return false;
}
return true;
}
//* TODO: finish all of these that return true
private bool IsAnyRowWinner()
{
return true;
}
private bool IsColumnWinner(int col)
{
return true;
}
private bool IsAnyColumnWinner()
{
return true;
}
private bool IsDiagonal1Winner()
{
return true;
}
private bool IsDiagonal2Winner()
{
Label square = GetSquare(0, (SIZE - 1));
string symbol = square.Text;
for (int row = 1, col = SIZE - 2; row < SIZE; row++, col--)
{
square = GetSquare(row, col);
if (symbol == EMPTY || square.Text != symbol)
return false;
}
return true;
}
private bool IsAnyDiagonalWinner()
{
return true;
}
private bool IsFull()
{
return true;
}
// This method determines if any row, column or diagonal on the board is a winner.
// It returns true or false and the output parameters will contain appropriate values
// when the method returns true. See constant definitions at top of form.
private bool IsWinner(out int whichDimension, out int whichOne)
{
// rows
for (int row = 0; row < SIZE; row++)
{
if (IsRowWinner(row))
{
whichDimension = ROW;
whichOne = row;
return true;
}
}
// columns
for (int column = 0; column < SIZE; column++)
{
if (IsColumnWinner(column))
{
whichDimension = COLUMN;
whichOne = column;
return true;
}
}
// diagonals
if (IsDiagonal1Winner())
{
whichDimension = DIAGONAL;
whichOne = TOP_LEFT_TO_BOTTOM_RIGHT;
return true;
}
if (IsDiagonal2Winner())
{
whichDimension = DIAGONAL;
whichOne = TOP_RIGHT_TO_BOTTOM_LEFT;
return true;
}
whichDimension = NONE;
whichOne = NONE;
return false;
}
// I wrote this method to show you how to call IsWinner
private bool IsTie()
{
int winningDimension, winningValue;
return (IsFull() && !IsWinner(out winningDimension, out winningValue));
}
// This method takes an integer in the range 0 - 4 that represents a column
// as it\'s parameter and changes the font color of that cell to red.
private void HighlightColumn(int col)
{
for (int row = 0; row < SIZE; row++)
{
Label square = GetSquare(row, col);
square.Enabled = true;
square.ForeColor = Color.Red;
}
}
// This method changes the font color of the top right to bottom left diagonal to red
// I did this diagonal because it\'s harder than the other one
private void HighlightDiagonal2()
{
for (int row = 0, col = SIZE - 1; row < SIZE; row++, col--)
{
Label square = GetSquare(row, col);
square.Enabled = true;
square.ForeColor = Color.Red;
}
}
// This method will highlight either diagonal, depending on the parameter that you pass
private void HighlightDiagonal(int whichDiagonal)
{
if (whichDiagonal == TOP_LEFT_TO_BOTTOM_RIGHT)
HighlightDiagonal1();
else
HighlightDiagonal2();
}
//* TODO: finish these 2
private void HighlightRow(int row)
{
}
private void HighlightDiagonal1()
{
}
//* TODO: finish this
private void HighlightWinner(string player, int winningDimension, int winningValue)
{
switch (winningDimension)
{
case ROW:
break;
case COLUMN:
break;
case DIAGONAL:
HighlightDiagonal(winningValue);
resultLabel.Text = (player + \" wins!\");
break;
}
}
//* TODO: finish these 2
private void ResetSquares()
{
}
private void MakeComputerMove()
{
}
// Setting the enabled property changes the look and feel of the cell.
// Instead, this code removes the event handler from each square.
// Use it when someone wins or the board is full to prevent clicking a square.
private void DisableAllSquares()
{
for (int row = 0; row < SIZE; row++)
{
for (int col = 0; col < SIZE; col++)
{
Label square = GetSquare(row, col);
DisableSquare(square);
}
}
}
// Inside the click event handler you have a reference to the label that was clicked
// Use this method (and pass that label as a parameter) to disable just that one square
private void DisableSquare(Label square)
{
square.Click -= new System.EventHandler(this.label_Click);
}
// You\'ll need this method to allow the user to start a new game
private void EnableAllSquares()
{
for (int row = 0; row < SIZE; row++)
{
for (int col = 0; col < SIZE; col++)
{
Label square = GetSquare(row, col);
square.Click += new System.EventHandler(this.label_Click);
}
}
}
//* TODO: finish the event handlers
private void label_Click(object sender, EventArgs e)
{
int winningDimension = NONE;
int winningValue = NONE;
Label clickedLabel = (Label)sender;
}
private void button1_Click(object sender, EventArgs e)
{
}
private void button2_Click(object sender, EventArgs e)
{
}
}
Solution
namespace TicTacToe
{
public partial class TTTForm : Form
{
public TTTForm()
{
InitializeComponent();
}
const string USER_SYMBOL = \"X\";
const string COMPUTER_SYMBOL = \"O\";
const string EMPTY = \"\";
const int SIZE = 5;
// constants for the 2 diagonals
const int TOP_LEFT_TO_BOTTOM_RIGHT = 1;
const int TOP_RIGHT_TO_BOTTOM_LEFT = 2;
// constants for IsWinner
const int NONE = -1;
const int ROW = 1;
const int COLUMN = 2;
const int DIAGONAL = 3;
// This method takes a row and column as parameters and
// returns a reference to a label on the form in that position
private Label GetSquare(int row, int column)
{
int labelNumber = row * SIZE + column + 1;
return (Label)(this.Controls[\"label\" + labelNumber.ToString()]);
}
// This method does the \"reverse\" process of GetSquare
// It takes a label on the form as it\'s parameter and
// returns the row and column of that square as output parameters
private void GetRowAndColumn(Label l, out int row, out int column)
{
int position = int.Parse(l.Name.Substring(5));
row = (position - 1) / SIZE;
column = (position - 1) % SIZE;
}
// This method takes a row (in the range of 0 - 4) and returns true if
// the row on the form contains 5 Xs or 5 Os.
// Use it as a model for writing IsColumnWinner
private bool IsRowWinner(int row)
{
Label square = GetSquare(row, 0);
string symbol = square.Text;
for (int col = 1; col < SIZE; col++)
{
square = GetSquare(row, col);
if (symbol == EMPTY || square.Text != symbol)
return false;
}
return true;
}
//* TODO: finish all of these that return true
private bool IsAnyRowWinner()
{
for (int row = 1; row < SIZE; row++)
{
if(IsRowWinner(row)){
return true;
}
}
return false;
}
private bool IsColumnWinner(int col)
{
Label square = GetSquare(0,col);
string symbol = square.Text;
for (int row = 1; row < SIZE; row++)
{
square = GetSquare(col, row);
if (symbol == EMPTY || square.Text != symbol)
return false;
}
return true;
}
private bool IsAnyColumnWinner()
{
for (int col = 1; col < SIZE; col++)
{
if(IsColumnWinner(col)){
return true;
}
}
return false;
}
private bool IsDiagonal1Winner()
{
Label square = GetSquare((SIZE - 1),0);
string symbol = square.Text;
for (int row = SIZE, row = SIZE - 2; col < SIZE; row--, col++)
{
square = GetSquare(row, col);
if (symbol == EMPTY || square.Text != symbol)
return false;
}
return true;
}
private bool IsDiagonal2Winner()
{
Label square = GetSquare(0, (SIZE - 1));
string symbol = square.Text;
for (int row = 1, col = SIZE - 2; row < SIZE; row++, col--)
{
square = GetSquare(row, col);
if (symbol == EMPTY || square.Text != symbol)
return false;
}
return true;
}
private bool IsAnyDiagonalWinner()
{
if(IsDiagonal1Winner){
return true;
}
if(IsDiagonal2Winner){
return true;
}
return false;
}
private bool IsFull()
{
return true;
}
// This method determines if any row, column or diagonal on the board is a winner.
// It returns true or false and the output parameters will contain appropriate values
// when the method returns true. See constant definitions at top of form.
private bool IsWinner(out int whichDimension, out int whichOne)
{
// rows
for (int row = 0; row < SIZE; row++)
{
if (IsRowWinner(row))
{
whichDimension = ROW;
whichOne = row;
return true;
}
}
// columns
for (int column = 0; column < SIZE; column++)
{
if (IsColumnWinner(column))
{
whichDimension = COLUMN;
whichOne = column;
return true;
}
}
// diagonals
if (IsDiagonal1Winner())
{
whichDimension = DIAGONAL;
whichOne = TOP_LEFT_TO_BOTTOM_RIGHT;
return true;
}
if (IsDiagonal2Winner())
{
whichDimension = DIAGONAL;
whichOne = TOP_RIGHT_TO_BOTTOM_LEFT;
return true;
}
whichDimension = NONE;
whichOne = NONE;
return false;
}
// I wrote this method to show you how to call IsWinner
private bool IsTie()
{
int winningDimension, winningValue;
return (IsFull() && !IsWinner(out winningDimension, out winningValue));
}
// This method takes an integer in the range 0 - 4 that represents a column
// as it\'s parameter and changes the font color of that cell to red.
private void HighlightColumn(int col)
{
for (int row = 0; row < SIZE; row++)
{
Label square = GetSquare(row, col);
square.Enabled = true;
square.ForeColor = Color.Red;
}
}
// This method changes the font color of the top right to bottom left diagonal to red
// I did this diagonal because it\'s harder than the other one
private void HighlightDiagonal2()
{
for (int row = 0, col = SIZE - 1; row < SIZE; row++, col--)
{
Label square = GetSquare(row, col);
square.Enabled = true;
square.ForeColor = Color.Red;
}
}
// This method will highlight either diagonal, depending on the parameter that you pass
private void HighlightDiagonal(int whichDiagonal)
{
if (whichDiagonal == TOP_LEFT_TO_BOTTOM_RIGHT)
HighlightDiagonal1();
else
HighlightDiagonal2();
}
//* TODO: finish these 2
private void HighlightRow(int row)
{
for(int col=0;col<SIZE;col++){
Label square = GetSquare(row, col);
square.Enabled = true;
square.ForeColor = Color.Red;
}
}
private void HighlightDiagonal1()
{
for (int row = SIZE-1, col =0; row < SIZE; row++, col--)
{
Label square = GetSquare(row, col);
square.Enabled = true;
square.ForeColor = Color.Red;
}
}
//* TODO: finish this
private void HighlightWinner(string player, int winningDimension, int winningValue)
{
switch (winningDimension)
{
case ROW:
HighlightRow(winningValue);
resultLabel.Text = (player + \" wins!\");
break;
case COLUMN:
HighlightColumn(winningValue);
resultLabel.Text = (player + \" wins!\");
break;
case DIAGONAL:
HighlightDiagonal(winningValue);
resultLabel.Text = (player + \" wins!\");
break;
}
}
//* TODO: finish these 2
private void ResetSquares()
{
for(int row=0;row<SIZE;row++){
for(int col=0;col<SIZE;col++){
Label square = GetSquare(row, col);
DisableSquare(square);
square.ForeColor = Color.White;
}
}
}
// Setting the enabled property changes the look and feel of the cell.
// Instead, this code removes the event handler from each square.
// Use it when someone wins or the board is full to prevent clicking a square.
private void DisableAllSquares()
{
for (int row = 0; row < SIZE; row++)
{
for (int col = 0; col < SIZE; col++)
{
Label square = GetSquare(row, col);
DisableSquare(square);
}
}
}
// Inside the click event handler you have a reference to the label that was clicked
// Use this method (and pass that label as a parameter) to disable just that one square
private void DisableSquare(Label square)
{
square.Click -= new System.EventHandler(this.label_Click);
}
// You\'ll need this method to allow the user to start a new game
private void EnableAllSquares()
{
for (int row = 0; row < SIZE; row++)
{
for (int col = 0; col < SIZE; col++)
{
Label square = GetSquare(row, col);
square.Click += new System.EventHandler(this.label_Click);
}
}
}
//* TODO: finish the event handlers
private void label_Click(object sender, EventArgs e)
{
int winningDimension = NONE;
int winningValue = NONE;
Label clickedLabel = (Label)sender;
}
private void button1_Click(object sender, EventArgs e)
{
int winningDimension = NONE;
int winningValue = NONE;
Label clickedLabel = (Label)sender;
}
private void button2_Click(object sender, EventArgs e)
{
exit(1);
}
}
}









