zoukankan      html  css  js  c++  java
  • 一个连珠五子棋判断是否取胜的方法(二)

            /// <summary>
            /// 是否赢
            /// </summary>
            /// <param name="arrCol">棋盘中的所有棋子</param>
            /// <param name="p">要检索的棋子的位置</param>
            /// <param name="maxNum">返回连续棋子的最大个数</param>
            /// <returns>是否赢</returns>
            public virtual bool Win(Color[,] arrColor, Point p, out int maxNum)
            {
                maxNum = 0;//标识连续白子或者黑子的最大个数,连续五子取胜,连续六子及六子以上视为自杀
                bool bo = false;//标识是否取胜
                int lenX = arrColor.GetLength(0) - 1;//棋盘行边界索引
                int lenY = arrColor.GetLength(1) - 1;//棋盘列边界索引
                int num = 0;//临时标识变量
                Color color = arrColor[p.X, p.Y];//要检索的棋子的颜色


                for (int i = 0; i < 9; i++)//从左上角 到 右下角 的九子范围内检索连续的棋子  连续五子取胜、连续六子及六子以上视为自杀
                {
                    //设定要检索的棋子的位置
                    int x = p.X - 4 + i;
                    int y = p.Y - 4 + i;

                    this.TreateMaxNum(new Point(x, y), lenX, lenY, arrColor, color, ref maxNum, ref bo, ref num);//检索连续棋子的最大个数
                }
                num = 0;//归零

                for (int i = 0; i < 9; i++)//从 左下角 到 右上角 的九子范围内检索连续的棋子
                {
                    int x = p.X + 4 - i;
                    int y = p.Y - 4 + i;
                    this.TreateMaxNum(new Point(x, y), lenX, lenY, arrColor, color, ref maxNum, ref bo, ref num);
                }
                num = 0;


                for (int i = 0; i < 9; i++)//从 左 到 右 的九子范围内检索连续的棋子
                {
                    int x = p.X - 4 + i;
                    int y = p.Y;
                    this.TreateMaxNum(new Point(x, y), lenX, lenY, arrColor, color, ref maxNum, ref bo, ref num);
                }
                num = 0;

                for (int i = 0; i < 9; i++)//从 上 到 下 的九子范围内检索连续的棋子
                {
                    int x = p.X;
                    int y = p.Y - 4 + i;
                    this.TreateMaxNum(new Point(x, y), lenX, lenY, arrColor, color, ref maxNum, ref bo, ref num);
                }
                return bo;
            }


            /// <summary>
            /// 检索连续的最大值
            /// 
            /// 这个方法的参数太多了,我记得有人说过方法的参数最好不要超过五个,请问各位前辈、这种情况该怎么处理呀?
            /// </summary>
            /// <param name="p">要检索的棋子的位置</param>
            /// <param name="lenX">棋盘的横向边界</param>
            /// <param name="lenY">棋盘的竖向边界</param>
            /// <param name="arrCol">棋盘所有棋子</param>
            /// <param name="col">要检索的棋子的颜色</param>
            /// <param name="maxNum">标识连续白子或者黑子的最大个数,连续五子取胜,连续六子及六子以上视为自杀</param>
            /// <param name="bo">是否取胜</param>
            /// <param name="num">中间变量</param>
            private void TreateMaxNum(Point p, int lenX, int lenY, Color[,] arrCol, Color col, ref int maxNum, ref bool bo, ref int num)
            {
                if (p.X < 0 || p.X > lenX || p.Y < 0 || p.Y > lenY)// 索引出界
                    return;
                if (arrCol[p.X, p.Y] == col)//是否与要检索的棋子的颜色一致
                {
                    num++;//颜色一致、连续棋子的个数加一
                    if (num == 5)//标识连续五子胜
                    {
                        if (num > maxNum)//(*****)
                        {
                            maxNum = num;//将连续棋子的个数赋值于maxNum
                        }
                        bo = true;//取胜
                    }
                    else if (num > 5)//标识六子及六子以上自杀
                    {
                        if (num > maxNum)//(*****)
                        {
                            maxNum = num;//将连续棋子的个数赋值于maxNum
                        }
                        bo = false;//此时为自杀
                    }
                }
                else//***//
                {
                    num = 0;//归零
                }
            }



    返回导读目录,阅读更多随笔



    分割线,以下为博客签名:

    软件臭虫情未了
    • 编码一分钟
    • 测试十年功


    随笔如有错误或不恰当之处、为希望不误导他人,望大侠们给予批评指正。

  • 相关阅读:
    PRCT-1302 the OCR has an invalid ip address
    函数listen
    函数bind
    函数socket
    lamp。查看版本
    yii 日期插件
    UCenter 的目录结构
    API接口
    返回标签数据示例 (PHP)
    应用接口函数
  • 原文地址:https://www.cnblogs.com/08shiyan/p/1778668.html
Copyright © 2011-2022 走看看