C#实现五子棋小游戏

主界面如图:

各种结果判断:

if (IsBegin)
            {
                try
                {
                    int x = (e.X + MianSet.CellWidth / 2) / MianSet.CellWidth;
                    int y = (e.Y + MianSet.CellWidth / 2) / MianSet.CellWidth;
                    if (ChessBack[x, y] != 0)
                        return;
                    Chess.DrawChess(type, pictureBox1, graphic, e);
                    ChessBack[x, y] = type ? 1 : 2;
                    if (IsFull() && !Victory(x, y))
                    {
                        if (MessageBox.Show("游戏结束,平局") == DialogResult.OK)
                            InitalizeQP();
                        return;
                    }
                    if (Victory(x, y))
                    {
                        string victer = type ? "红" : "蓝";
                        if (MessageBox.Show(victer + "方胜利!", "结果") == DialogResult.OK)
                            InitalizeQP();
                        return;
                    }
                    type = !type;//换人
                    labMes.Text = type ? "红方行动" : "蓝方行动";
                }
                catch { }
            }

结果判断算法:

private bool LeanVic(int x, int y)//斜着同色五连珠
        {
            int L1 = x - 4;// (x - 4) > 0 ? x - 4 : 0;
            int L2 = y - 4;// (y - 4) > 0 ? y - 4 : 0;
            int val = ChessBack[x, y];
            for (int i = L1, j = L2; i < 16 && j < 16; i++, j++)
            {
                if (ChessBack[x, y] == val && ChessBack[x + 1, y + 1] == val && ChessBack[x + 2, y + 2] == val && ChessBack[x + 3, y + 3] == val && ChessBack[x + 4, y+ 4] == val)
                    return true;
            }
            for (int i = L1, j = L2; i < 16 && j < 16; i++, j++)
            {
                if (ChessBack[x, y] == val && ChessBack[x + 1, y - 1] == val && ChessBack[x + 2, y - 2] == val && ChessBack[x + 3, y - 3] == val && ChessBack[x + 4, y - 4] == val)
                    return true;
            }
            for (int i = L1, j = L2; i < 16 && j < 16; i++, j++)
            {
                if (ChessBack[x, y] == val && ChessBack[x - 1, y + 1] == val && ChessBack[x - 2, y + 2] == val && ChessBack[x - 3, y + 3] == val && ChessBack[x - 4, y + 4] == val)
                    return true;
            }
            return false;
        }
        private bool ColVic(int x, int y)//一列同色五连珠
        {
            int col = (y - 4) > 0 ? y - 4 : 0;
            int val = ChessBack[x, y];
            for (int i = col; i < 16; i++)
            {
                if (ChessBack[x, i] == val && ChessBack[x, i + 1] == val && ChessBack[x, i + 2] == val && ChessBack[x, i + 3] == val && ChessBack[x, i + 4] == val)
                    return true;
            }
            return false;
        }

        private bool RowVic(int x, int y)//一行同色五连珠
        {
            int row = (x - 4) > 0 ? x - 4 : 0;
            int val = ChessBack[x, y];
            for (int i = row; i < 16; i++)
            {
                if (ChessBack[i, y] == val && ChessBack[i + 1, y] == val && ChessBack[i + 2, y] == val && ChessBack[i + 3, y] == val && ChessBack[i + 4, y] == val)
                    return true;
            }
            return false;
        }

        private bool IsFull()//填满棋盘
        {
            bool full = true;
            for (int i = 0; i < 20; i++)
            {
                for (int j = 0; j < 20; j++)
                {
                    if (ChessBack[i, j] == 0)
                    {
                        full = false;
                    }
                }
            }
            return full;
        }
源码地址
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你懂的11

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值