HiveBrain v1.2.0
Get Started
← Back to all entries
patterncsharpModerate

Tic-Tac-Toe game in C#

Submitted by: @import:stackexchange-codereview··
0
Viewed 0 times
tacgametictoe

Problem

I've been learning C#, and today I made a simple Tic Tac Toe game. The code is pretty long, and I'm almost 100% positive that this can be done so much better. Please provide some advice, suggestions, and criticism.

```
byte _clicks = 1;
bool but1clicked, but2clicked, but3clicked, but4clicked, but5clicked, but6clicked, but7clicked, but8clicked, but9clicked = false;

public void ResetGame()
{
but1.Text = null;
but2.Text = null;
but3.Text = null;
but4.Text = null;
but5.Text = null;
but6.Text = null;
but7.Text = null;
but8.Text = null;
but9.Text = null;

but1clicked = false;
but2clicked = false;
but3clicked = false;
but4clicked = false;
but5clicked = false;
but6clicked = false;
but7clicked = false;
but8clicked = false;
but9clicked = false;
}

public void Check()
{
if (but1.Text == "X" && but2.Text == "X" && but3.Text == "X")
{
MessageBox.Show("Game Over! X Wins!");
ResetGame();
}
else if (but4.Text == "X" && but5.Text == "X" && but6.Text == "X")
{
MessageBox.Show("Game Over! X Wins!");
ResetGame();
}
else if (but7.Text == "X" && but8.Text == "X" && but9.Text == "X")
{
MessageBox.Show("Game Over! X Wins!");
ResetGame();
}
else if (but1.Text == "X" && but4.Text == "X" && but7.Text == "X")
{
MessageBox.Show("Game Over! X Wins!");
ResetGame();
}
else if (but2.Text == "X" && but5.Text == "X" && but8.Text == "X")
{
MessageBox.Show("Game Over! X Wins!");
ResetGame();
}
else if (but3.Text == "X" && but6.Text == "X" && but9.Text == "X")
{
MessageBox.Show("Game Over! X Wins!");
ResetGame();
}
else if (but1.Text == "X" && bu

Solution

The buttons should be an array, if so you will replace btn with buttons[1]. Using the array will allow replacing this:

if (but1clicked == true &&
        but2clicked == true &&
        but3clicked == true && 
        but4clicked == true && 
        but5clicked == true && 
        but6clicked == true && 
        but7clicked == true && 
        but8clicked == true && 
        but9clicked == true)


With this:

if (buttons.All(button => button.clicked))


I assume that each button should have a clicked method. You will need some more modifications for this to work.

About the win lose checks, I suggest

triples = ( (0, 1, 2), (3, 4, 5) ..)
def wins(symbol) {
    return triples.Any(triple => triple.All(index => buttons[index] == symbol))
 }


All of this is pseudocode, but should be implementable with no problems.

Code Snippets

if (but1clicked == true &&
        but2clicked == true &&
        but3clicked == true && 
        but4clicked == true && 
        but5clicked == true && 
        but6clicked == true && 
        but7clicked == true && 
        but8clicked == true && 
        but9clicked == true)
if (buttons.All(button => button.clicked))
triples = ( (0, 1, 2), (3, 4, 5) ..)
def wins(symbol) {
    return triples.Any(triple => triple.All(index => buttons[index] == symbol))
 }

Context

StackExchange Code Review Q#101705, answer score: 10

Revisions (0)

No revisions yet.