Как я могу сбросить сетку (игровое поле), нажав на кнопку (уже есть пустой обработчик событий)?Я пытался добавить Refresh
, Invalidate
, но это не работает.Я не могу поместить X или O в место, где они были расположены до сброса (с помощью Invalidate
), и счетчик выигрышей продолжает работать после каждого клика.Я не могу использовать кнопки или изображения, только рисую и определяя координаты, поэтому это усложняет задачу (по крайней мере, мне так кажется)
Вот мой код:
public partial class Form1 : Form
{
int win;
int move = 0;
int[,] mas = new int[3, 3];
int draw = 0;
int xwin = 0;
int owin = 0;
public Form1()
{
InitializeComponent();
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
g.DrawLine(new Pen(Color.Black, 4.0f), 100, 100, 100, 700);
g.DrawLine(new Pen(Color.Black, 4.0f), 100, 100, 700, 100);
g.DrawLine(new Pen(Color.Black, 4.0f), 700, 100, 700, 700);
g.DrawLine(new Pen(Color.Black, 4.0f), 100, 700, 700, 700);
g.DrawLine(new Pen(Color.Black, 4.0f), 100, 300, 700, 300);
g.DrawLine(new Pen(Color.Black, 4.0f), 100, 500, 700, 500);
g.DrawLine(new Pen(Color.Black, 4.0f), 300, 100, 300, 700);
g.DrawLine(new Pen(Color.Black, 4.0f), 500, 100, 500, 700);
}
private void Form1_MouseClick(object sender, MouseEventArgs e)
{
{
Graphics g = this.CreateGraphics();
if (move % 2 == 0)
{
if ((e.X > 100) && (e.X < 300) && (e.Y > 100) && (e.Y < 300) && (mas[0, 0] == 0))
{
g.DrawLine(new Pen(Color.Black, 4.0f), 105, 105, 295, 295);
g.DrawLine(new Pen(Color.Black, 4.0f), 105, 295, 295, 105);
move++;
mas[0, 0] = 1;
}
if ((e.X > 300) && (e.X < 500) && (e.Y > 100) && (e.Y < 300) && (mas[0, 1] == 0))
{
g.DrawLine(new Pen(Color.Black, 4.0f), 305, 105, 495, 295);
g.DrawLine(new Pen(Color.Black, 4.0f), 305, 295, 495, 105);
move++;
mas[0, 1] = 1;
}
if ((e.X > 500) && (e.X < 700) && (e.Y > 100) && (e.Y < 300) && (mas[0, 2] == 0))
{
g.DrawLine(new Pen(Color.Black, 4.0f), 505, 105, 695, 295);
g.DrawLine(new Pen(Color.Black, 4.0f), 505, 295, 695, 105);
move++;
mas[0, 2] = 1;
}
if ((e.X > 100) && (e.X < 300) && (e.Y > 300) && (e.Y < 500) && (mas[1, 0] == 0))
{
g.DrawLine(new Pen(Color.Black, 4.0f), 105, 305, 295, 495);
g.DrawLine(new Pen(Color.Black, 4.0f), 105, 495, 295, 305);
move++;
mas[1, 0] = 1;
}
if ((e.X > 300) && (e.X < 500) && (e.Y > 300) && (e.Y < 500) && (mas[1, 1] == 0))
{
g.DrawLine(new Pen(Color.Black, 4.0f), 305, 305, 495, 495);
g.DrawLine(new Pen(Color.Black, 4.0f), 495, 305, 305, 495);
move++;
mas[1, 1] = 1;
}
if ((e.X > 500) && (e.X < 700) && (e.Y > 300) && (e.Y < 500) && (mas[1, 2] == 0))
{
g.DrawLine(new Pen(Color.Black, 4.0f), 505, 305, 695, 495);
g.DrawLine(new Pen(Color.Black, 4.0f), 505, 495, 695, 305);
move++;
mas[1, 2] = 1;
}
if ((e.X > 100) && (e.X < 300) && (e.Y > 500) && (e.Y < 700) && (mas[2, 0] == 0))
{
g.DrawLine(new Pen(Color.Black, 4.0f), 105, 505, 295, 695);
g.DrawLine(new Pen(Color.Black, 4.0f), 105, 695, 295, 505);
move++;
mas[2, 0] = 1;
}
if ((e.X > 300) && (e.X < 500) && (e.Y > 500) && (e.Y < 700) && (mas[2, 1] == 0))
{
g.DrawLine(new Pen(Color.Black, 4.0f), 305, 505, 495, 695);
g.DrawLine(new Pen(Color.Black, 4.0f), 305, 695, 495, 505);
move++;
mas[2, 1] = 1;
}
if ((e.X > 500) && (e.X < 700) && (e.Y > 500) && (e.Y < 700) && (mas[2, 2] == 0))
{
g.DrawLine(new Pen(Color.Black, 4.0f), 505, 505, 695, 695);
g.DrawLine(new Pen(Color.Black, 4.0f), 505, 695, 695, 505);
move++;
mas[2, 2] = 1;
}
}
else
{
if ((e.X > 100) && (e.X < 300) && (e.Y > 100) && (e.Y < 300) && (mas[0, 0] == 0))
{
g.DrawEllipse(new Pen(Color.Black, 4.0f), 105, 105, 190, 190);
move++;
mas[0, 0] = 2;
}
if ((e.X > 300) && (e.X < 500) && (e.Y > 100) && (e.Y < 300) && (mas[0, 1] == 0))
{
g.DrawEllipse(new Pen(Color.Black, 4.0f), 305, 105, 190, 190);
hod++;
mas[0, 1] = 2;
}
if ((e.X > 500) && (e.X < 700) && (e.Y > 100) && (e.Y < 300) && (mas[0, 2] == 0))
{
g.DrawEllipse(new Pen(Color.Black, 4.0f), 505, 105, 190, 190);
move++;
mas[0, 2] = 2;
}
if ((e.X > 100) && (e.X < 300) && (e.Y > 300) && (e.Y < 500) && (mas[1, 0] == 0))
{
g.DrawEllipse(new Pen(Color.Black, 4.0f), 105, 305, 190, 190);
move++;
mas[1, 0] = 2;
}
if ((e.X > 300) && (e.X < 500) && (e.Y > 300) && (e.Y < 500) && (mas[1, 1] == 0))
{
g.DrawEllipse(new Pen(Color.Black, 4.0f), 305, 305, 190, 190);
move++;
mas[1, 1] = 2;
}
if ((e.X > 500) && (e.X < 700) && (e.Y > 300) && (e.Y < 500) && (mas[1, 2] == 0))
{
g.DrawEllipse(new Pen(Color.Black, 4.0f), 505, 305, 190, 190);
move++;
mas[1, 2] = 2;
}
if ((e.X > 100) && (e.X < 300) && (e.Y > 500) && (e.Y < 700) && (mas[2, 0] == 0))
{
g.DrawEllipse(new Pen(Color.Black, 4.0f), 105, 505, 190, 190);
move++;
mas[2, 0] = 2;
}
if ((e.X > 300) && (e.X < 500) && (e.Y > 500) && (e.Y < 700) && (mas[2, 1] == 0))
{
g.DrawEllipse(new Pen(Color.Black, 4.0f), 305, 505, 190, 190);
move++;
mas[2, 1] = 2;
}
if ((e.X > 500) && (e.X < 700) && (e.Y > 500) && (e.Y < 700) && (mas[2, 2] == 0))
{
g.DrawEllipse(new Pen(Color.Black, 4.0f), 505, 505, 190, 190);
move++;
mas[2, 2] = 2;
}
}
if ((mas[0, 0] == 1 && mas[0, 1] == 1 && mas[0, 2] == 1))
{
win = 1;
g.DrawLine(new Pen(Color.Red, 6.0f), 105, 200, 695, 200);
xwin += 1;
}
if ((mas[1, 0] == 1 && mas[1, 1] == 1 && mas[1, 2] == 1))
{
win = 1;
g.DrawLine(new Pen(Color.Red, 6.0f), 105, 400, 695, 400);
xwin += 1;
}
if ((mas[2, 0] == 1 && mas[2, 1] == 1 && mas[2, 2] == 1))
{
win = 1;
g.DrawLine(new Pen(Color.Red, 6.0f), 105, 600, 695, 600);
xwin += 1;
}
if ((mas[0, 0] == 1 && mas[1, 0] == 1 && mas[2, 0] == 1))
{
win = 1;
g.DrawLine(new Pen(Color.Red, 6.0f), 200, 105, 200, 695);
xwin += 1;
}
if ((mas[0, 1] == 1 && mas[1, 1] == 1 && mas[2, 1] == 1))
{
win = 1;
g.DrawLine(new Pen(Color.Red, 6.0f), 400, 105, 400, 695);
xwin += 1;
}
if ((mas[0, 2] == 1 && mas[1, 2] == 1 && mas[2, 2] == 1))
{
win = 1;
g.DrawLine(new Pen(Color.Red, 6.0f), 600, 105, 600, 695);
xwin += 1;
}
if ((mas[0, 0] == 1 && mas[1, 1] == 1 && mas[2, 2] == 1))
{
win = 1;
g.DrawLine(new Pen(Color.Red, 6.0f), 105, 105, 695, 695);
xwin += 1;
}
if ((mas[0, 2] == 1 && mas[1, 1] == 1 && mas[2, 0] == 1))
{
g.DrawLine(new Pen(Color.Red, 6.0f), 695, 105, 105, 695);
xwin += 1;
}
if ((mas[0, 0] == 2 && mas[0, 1] == 2 && mas[0, 2] == 2))
{
win = 2;
g.DrawLine(new Pen(Color.Blue, 6.0f), 105, 200, 695, 200);
owin += 1;
}
if ((mas[1, 0] == 2 && mas[1, 1] == 2 && mas[1, 2] == 2))
{
win = 2;
g.DrawLine(new Pen(Color.Blue, 6.0f), 105, 400, 695, 400);
owin += 1;
}
if ((mas[2, 0] == 2 && mas[2, 1] == 2 && mas[2, 2] == 2))
{
win = 2;
g.DrawLine(new Pen(Color.Blue, 6.0f), 105, 600, 695, 600);
owin += 1;
}
if ((mas[0, 0] == 2 && mas[1, 0] == 2 && mas[2, 0] == 2))
{
win = 2;
g.DrawLine(new Pen(Color.Blue, 6.0f), 200, 105, 200, 695);
owin += 1;
}
if ((mas[0, 1] == 2 && mas[1, 1] == 2 && mas[2, 1] == 2))
{
win = 2;
g.DrawLine(new Pen(Color.Blue, 6.0f), 400, 105, 400, 695);
owin += 1;
}
if ((mas[0, 2] == 2 && mas[1, 2] == 2 && mas[2, 2] == 2))
{
win = 2;
g.DrawLine(new Pen(Color.Blue, 6.0f), 600, 105, 600, 695);
owin += 1;
}
if ((mas[0, 0] == 2 && mas[1, 1] == 2 && mas[2, 2] == 2))
{
win = 2;
g.DrawLine(new Pen(Color.Blue, 6.0f), 105, 105, 695, 695);
owin += 1;
}
if ((mas[0, 2] == 2 && mas[1, 1] == 2 && mas[2, 0] == 2))
{
win = 2;
g.DrawLine(new Pen(Color.Blue, 6.0f), 695, 105, 105, 695);
owin += 1;
}
if ((hod >= 9) && (win == 0))
{
MessageBox.Show("Draw");
draw += 1;
}
label1.Text = "X won : " + xwin;
label2.Text = "O won : " + owin;
label3.Text = "Draws: " + draw;
}
}
private void button1_Click(object sender, EventArgs e)
{
}
}
}