如何通过tic-tac-toe游戏中的按钮重置网格?

问题描述 投票:1回答:1

如何通过单击按钮(已经有空事件处理程序)重置网格(游戏区域)?我试图添加RefreshInvalidate但它不起作用。我无法在重置之前将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)
    {

    }
}
}
c# .net visual-studio paint tic-tac-toe
1个回答
0
投票

您需要重置mas阵列,以跟踪在您接受新点击之前点击的位置。

© www.soinside.com 2019 - 2024. All rights reserved.