C# 实现简单的五子棋程序

gitee网址

https://gitee.com/kittysmith5/gobang/blob/master/WindowsFormsApplication1/Form1.cs

核心源代码

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 WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        private readonly int size;
        private int X, Y;
        private readonly int[,] chess;
        private int counter;
        private int q1;
        private int q2;


        public Form1()
        {
            InitializeComponent();
            this.size = 15;
            this.chess = new int[this.size, this.size];
            this.counter = 0;
        }


        private void DrawLines()
        {
            Graphics g = CreateGraphics();
            for (int i = 0; i < size; i++)
            {
                g.DrawLine(new Pen(Color.Black), new Point(50, 50 + i * 20),
                    new Point(50 + (size - 1) * 20, 50 + i * 20));
                g.DrawLine(new Pen(Color.Black), new Point(50 + i * 20, 50),
                    new Point(50 + i * 20, 50 + (size - 1) * 20));

            }
        }

        private void Form1_Shown(object sender, EventArgs e)
        {
            DrawLines();
        }



        private void DrawCircle(int c, int x, int y)
        {
            Graphics g1 = this.CreateGraphics();
            if (c % 2 == 1)
                g1.FillEllipse(Brushes.White, x - 9, y - 9, 18, 18);//来实心圆
            else
                g1.FillEllipse(Brushes.Black, x - 9, y - 9, 18, 18);//来实心圆
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void Form1_MouseClick(object sender, MouseEventArgs e)
        {
            X = Y = 0;
            q1 = q2 = 0;
            for (int i = 0; i < size; i++)
            {
                if (e.X >= i * 20 + 50 - 8 && e.X <= i * 20 + 50 + 8)
                {
                    X = i * 20 + 50;
                    q1 = i;
                }
                if (e.Y >= i * 20 + 50 - 8 && e.Y <= i * 20 + 50 + 8)
                {
                    Y = i * 20 + 50;
                    q2 = i;
                }
            }

            if (X >= 0 * size + 50 - 9 && X <= 50 + (size - 1) * 20 &&
                Y >= 0 * size + 50 - 9 && Y <= 50 + (size - 1) * 20 &&
                chess[q2, q1] == 0 && counter % 2 == 0)
            {
                chess[q2, q1] = 1;
                DrawCircle(counter, X, Y);
                counter++;
            }
            if (X >= 0 * size + 50 - 9 && X <= 50 + (size - 1) * 20 &&
                Y >= 0 * size + 50 - 9 && Y <= 50 + (size - 1) * 20 &&
                 chess[q2, q1] == 0 && counter % 2 != 0)
            {
                chess[q2, q1] = 2;
                DrawCircle(counter, X, Y);
                counter++;
            }

            /*判断胜负开始*/

            //横向判断
            for (int i = 0; i < size; i++)
            {
                for (int j = 0; j < size - 4; j++)
                {
                    if (chess[i, j] == 1 && chess[i, j + 1] == 1 && chess[i, j + 2] == 1
                        && chess[i, j + 3] == 1 && chess[i, j + 4] == 1)
                    {
                        MessageBox.Show("Black Win!");
                        Application.Exit();
                    }
                    if (chess[i, j] == 2 && chess[i, j + 1] == 2 && chess[i, j + 2] == 2
                        && chess[i, j + 3] == 2 && chess[i, j + 4] == 2)
                    {
                        MessageBox.Show("White Win!");
                        Application.Exit();
                    }
                }
            }
            //纵向判断
            for (int i = 0; i < size; i++)
            {
                for (int j = 0; j < size - 4; j++)
                {
                    if (chess[j, i] == 1 && chess[j + 1, i] == 1 && chess[j + 2, i] == 1
                        && chess[j + 3, i] == 1 && chess[j + 4, i] == 1)
                    {
                        MessageBox.Show("Black Win!");
                        Application.Exit();
                    }
                    if (chess[j, i] == 2 && chess[j + 1, i] == 2 && chess[j + 2, i] == 2
                        && chess[j + 3, i] == 2 && chess[j + 4, i] == 2)
                    {
                        MessageBox.Show("White Win!");
                        Application.Exit();
                    }
                }
            }
            //主对角线
            for (int i = 0; i < size - 4; i++)
            {
                for (int j = 0; j < size - 4; j++)
                {
                    if (chess[i, j] == 1 && chess[i + 1, j + 1] == 1 && chess[i + 2, j + 2] == 1
                        && chess[i + 3, j + 3] == 1 && chess[i + 4, j + 4] == 1)
                    {
                        MessageBox.Show("Black Win!");
                        Application.Exit();
                    }
                    if (chess[i, j] == 2 && chess[i + 1, j + 1] == 2 && chess[i + 2, j + 2] == 2
                        && chess[i + 3, j + 3] == 2 && chess[i + 4, j + 4] == 2)
                    {
                        MessageBox.Show("White Win!");
                        Application.Exit();
                    }
                }
            }
            //副对角线
            for (int i = 0; i < size - 4; i++)
            {

                for (int j = 4; j < size; j++)
                {
                    if (chess[i, j] == 1 && chess[i + 1, j - 1] == 1 && chess[i + 2, j - 2] == 1
                        && chess[i + 3, j - 3] == 1 && chess[i + 4, j - 4] == 1)
                    {
                        MessageBox.Show("Black Win!");
                        Application.Exit();
                    }
                    if (chess[i, j] == 2 && chess[i + 1, j - 1] == 2 && chess[i + 2, j - 2] == 2
                        && chess[i + 3, j - 3] == 2 && chess[i + 4, j - 4] == 2)
                    {
                        MessageBox.Show("White Win!");
                        Application.Exit();
                    }

                }
            }
            /*判断胜负结束*/
        }
    }
}
posted @ 2021-04-21 12:37  KittySmith  阅读(906)  评论(0编辑  收藏  举报