Gå til innhold

Anbefalte innlegg

Driver og leker litt med en utgave av tic tac toe i c#

 

Har tidliger hatt en hvor spilleområde var 9 buttons som man kunne velge x og o på. har på denne gått over til en dynmaisk visning av disse.

 

Har også lagt til feilkontroll, så når man pröver å skrive O der det står X skal man få en feilmelding. men det er her feilen ligger.

den forteller at det står en X eller en O uansett hvor man velger, selvom ruten er tom.

 

er det noen som kan hjelpe meg med hvor jeg har gjort denne feilen?

 

når jeg har fått til denne delen, skal jeg separere logikken og det som har med GUI og gjöre, plus at jeg skal lage en dataspiller. men det kan vi se på senere.

 


private void Form1_Load(object sender, System.EventArgs e)
{


for (int i = 0; i < markings.Length; i++)
this.markings[i].Click += new System.EventHandler(this.Marking);

InitTicTacToe();
}


private void butPlay_Click(object sender, System.EventArgs e)
{
InitTicTacToe();
}

private void InitTicTacToe()
{
for (int i = 0; i < markings.Length; i++)
{
markings[i].Text = "";
markings[i].ForeColor = Color.Black;
markings[i].BackColor = Color.LightGray;
markings[i].Font = new System.Drawing.Font("Microsoft Sans Serif", 24F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
}
this.isX = true;
this.IsGameOver = false;
}

private void Marking(object sender, System.EventArgs e)
{

Label mark = (Label)sender;

if (this.IsGameOver)
{
MessageBox.Show("Select Game and then new!", "GAMEOVER", MessageBoxButtons.OK);
return;
}

if (mark.Text != "") // if is it empty
{
MessageBox.Show("Button already has value!", "ERROR", MessageBoxButtons.OK);
return;
}

if (isX) // put the character in the Text property
{
mark.Text = "X";

}
else
{
mark.Text = "O";

}

isX = !isX; // prepare for next character

this.IsGameOver = winningComb.checkWinner(markings);
}


/*
* Closes the program
*
*/
private void exitToolStripMenuItem_Click(object sender, EventArgs e)
{
this.Close();
}

/*
* Take away all the markings on the board
* and calls the init function to start a new game
*
*/
private void startGame_Click(object sender, EventArgs e)
{
foreach (Label mark in markings)
{
mark.Text = "";
}

InitTicTacToe();
}


/*
* The check for 2 player
*
*/
private void pvpCheck(object sender, EventArgs e)
{
playerVsPlayer.Checked = true;
playerVsCom.Checked = false;
}

/*
* The check for 1 player
*
*/
private void pvcCheck(object sender, EventArgs e)
{
playerVsPlayer.Checked = false;
playerVsCom.Checked = true;
}


}
public class winningComb
{
// Winners contains all the array locations of
// the winning combination -- if they are all
// either X or O (and not blank)
static private int[,] Winners = new int[,]
{
{0,1,2},
{3,4,5},
{6,7,8},
{0,3,6},
{1,4,7},
{2,5,8},
{0,4,8},
{2,4,6}
};

/*
*checkWinner determines if X or O has won.
* once a winner has been determined, play stops.
*/
static public bool checkWinner(Label[] myControls)
{
bool gameOver = false;
for (int i = 0; i < 8; i++)
{
int a = Winners[i, 0], b = Winners[i, 1], c = Winners[i, 2];

Label b1 = myControls[a], b2 = myControls[b], b3 = myControls[c];

if (b1.Text == "" || b2.Text == "" || b3.Text == "")
continue;

if (b1.Text == b2.Text && b2.Text == b3.Text)
{
b1.BackColor = b2.BackColor = b3.BackColor = Color.LightCoral;
b1.Font = b2.Font = b3.Font = new System.Drawing.Font("Microsoft Sans Serif", 32F, FontStyle.Italic & FontStyle.Bold, GraphicsUnit.Point, ((System.Byte)(0)));
gameOver = true;
break;
}
}
return gameOver;
}


}
}

Endret av maurodix
Lenke til kommentar
Videoannonse
Annonse

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...