maurodix Skrevet 3. januar 2009 Del Skrevet 3. januar 2009 (endret) 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 3. januar 2009 av maurodix Lenke til kommentar
GeirGrusom Skrevet 3. januar 2009 Del Skrevet 3. januar 2009 Bruk gjerne string.IsNullOrEmpty for å sjekke om en string er tom. Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå