using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace WindowsFormsApp11 { public partial class Form1 : Form { //public static Nullable[,] grid = new Nullable[3, 3]; public static char[,] grid = new char[3, 3]; public static char CURRENT = 'X'; public static int x_wins = 0; public static int o_wins = 0; public static int W_UNIT; public static int H_UNIT; public static int X_BUFFER = 22; public Form1() { InitializeComponent(); W_UNIT = Canvas.Width / 3; H_UNIT = Canvas.Height / 3; for (int i = 0; i < 3; i++) for (int j = 0; j < 3; j++) grid[i, j] = ' '; } private void ClearGrid() { for (int i = 0; i < 3; i++) for (int j = 0; j < 3; j++) grid[i, j] = ' '; CURRENT = 'X'; Canvas.Refresh(); } private void Canvas_Paint(object sender, PaintEventArgs e) { Graphics g = e.Graphics; // Draw the Board using (Pen myPen = new Pen(Color.Gold)) { g.DrawLine(myPen, Canvas.Width / 3, 0, Canvas.Width / 3, Canvas.Height); g.DrawLine(myPen, (2 * Canvas.Width / 3), 0, (2 * Canvas.Width / 3), Canvas.Height); g.DrawLine(myPen, 0, Canvas.Height / 3, Canvas.Width, Canvas.Height / 3); g.DrawLine(myPen, 0, (2 * Canvas.Height / 3), Canvas.Width, (2 * Canvas.Height / 3)); for (int i = 0; i < 3; i++) for (int j = 0; j < 3; j++) { // Draw the X's and O's if (grid[j, i] == 'X') // Then draw an X { // Top-left to bottom-right g.DrawLine(myPen, (j * W_UNIT) + X_BUFFER, (i * Canvas.Height / 3) + X_BUFFER, W_UNIT + (j * Canvas.Width / 3) - X_BUFFER, H_UNIT + (i * Canvas.Height / 3) - X_BUFFER); // Bottom-left to top-right g.DrawLine(myPen, (j * W_UNIT) + X_BUFFER, H_UNIT + (i * Canvas.Height / 3) - X_BUFFER, W_UNIT + (j * W_UNIT) - X_BUFFER, (i * Canvas.Height / 3) + X_BUFFER); /* g.DrawLine(myPen, (j * Canvas.Width / 3), H_UNIT + (i * Canvas.Height / 3), W_UNIT + (j * Canvas.Width / 3), (i * Canvas.Height / 3)); */ } else if (grid[j, i] == 'O') { g.DrawEllipse(myPen, (j * W_UNIT) + X_BUFFER, (i * Canvas.Height / 3) + X_BUFFER, W_UNIT - (2 * X_BUFFER), H_UNIT - (2 * X_BUFFER)); } } } } private void Canvas_MouseDown(object sender, MouseEventArgs e) { /* * We can now know where the user has clicked on the Board MessageBox.Show("[" + e.X / (Canvas.Width / 3) + ", " + e.Y / (Canvas.Height / 3) + "]"); */ if (grid[e.X / (Canvas.Width / 3), e.Y / (Canvas.Height / 3)] == ' ') grid[e.X / (Canvas.Width / 3), e.Y / (Canvas.Height / 3)] = CURRENT; else return; if (CURRENT == 'X') CURRENT = 'O'; else CURRENT = 'X'; Canvas.Refresh(); // X == 88 // O == 79 int sum = 0; // Checking for rows for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { sum += (int)grid[j, i]; } if (sum == (88 *3)) { x_wins++; MessageBox.Show("Huzzah, the X's have won!\n" + "Current score: " + x_wins + " for X's\n" + " " + o_wins + " for O's"); ClearGrid(); } else if (sum == (79 * 3)) { o_wins++; MessageBox.Show("Huzzah, the O's have won!\n" + "Current score: " + x_wins + " for X's\n" + " " + o_wins + " for O's"); ClearGrid(); } sum = 0; } // Checking for columns for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { sum += (int)grid[i, j]; } if (sum == (88 * 3)) { x_wins++; MessageBox.Show("Huzzah, the X's have won!\n" + "Current score: " + x_wins + " for X's\n" + " " + o_wins + " for O's"); ClearGrid(); } else if (sum == (79 * 3)) { o_wins++; MessageBox.Show("Huzzah, the O's have won!\n" + "Current score: " + x_wins + " for X's\n" + " " + o_wins + " for O's"); ClearGrid(); } sum = 0; } // Checking for diagonals for (int i = 0; i < 3; i++) { sum += (int)grid[i, i]; } if (sum == (88 * 3)) { x_wins++; MessageBox.Show("Huzzah, the X's have won!\n" + "Current score: " + x_wins + " for X's\n" + " " + o_wins + " for O's"); ClearGrid(); } else if (sum == (79 * 3)) { o_wins++; MessageBox.Show("Huzzah, the O's have won!\n" + "Current score: " + x_wins + " for X's\n" + " " + o_wins + " for O's"); ClearGrid(); } sum = 0; for (int i = 0; i < 3; i++) { sum += (int)grid[2 - i, i]; } if (sum == (88 * 3)) { x_wins++; MessageBox.Show("Huzzah, the X's have won!\n" + "Current score: " + x_wins + " for X's\n" + " " + o_wins + " for O's"); ClearGrid(); } else if (sum == (79 * 3)) { o_wins++; MessageBox.Show("Huzzah, the O's have won!\n" + "Current score: " + x_wins + " for X's\n" + " " + o_wins + " for O's"); ClearGrid(); } sum = 0; /* int runningSum = (int)grid[0, 0] + (int)grid[1, 0] + (int)grid[2, 0]; if (runningSum == (88 *3)) // then X won else if (runningSum == (79 * 3)) // then O won */ /* if (grid[0, 0] == 'O' && grid[1, 0] == 'O' && grid[2, 0] == 'O') // then O won if (grid[0, 0] == 'X' && grid[1, 0] == 'X' && grid[2, 0] == 'X') // then X won */ } private void Form1_ResizeEnd(object sender, EventArgs e) { Canvas.Width = this.Width - (13 * 2); Canvas.Height = this.Height - (13 * 2); W_UNIT = Canvas.Width / 3; H_UNIT = Canvas.Height / 3; Canvas.Refresh(); } private void Form1_KeyDown(object sender, KeyEventArgs e) { DialogResult dr; if (e.KeyCode == Keys.Escape) { dr = MessageBox.Show("Would you like to exit the program?", "Exiting Program", MessageBoxButtons.YesNo); if (dr == DialogResult.Yes) Environment.Exit(0); // else, don't do anything } if (e.KeyCode == Keys.N && e.Control) // ctrl+N { dr = MessageBox.Show("Would you like to start a new game?", "New Game?", MessageBoxButtons.YesNo); if (dr == DialogResult.Yes) { ClearGrid(); } } } } }