winform 五子棋 判断输赢 分类: WinForm 2014-08-07 20:55 256人阅读 评论(0) 收藏

时间:2023-03-09 02:17:44
winform 五子棋 判断输赢                                                    分类:            WinForm             2014-08-07 20:55    256人阅读    评论(0)    收藏

新手上路,高手勿进!

利用数组,根据新旧数组值的不同,获取那个点是什么棋子;

说明:

棋盘:15*15;

定义4个全局变量:

string[,] stroldlist = new string[15, 15];//初始的List

        public string[,] strlist = new string[15, 15]; //0 :未下,1:黑子 2:白子

int icount = 0;//五子连线算赢

          string abc = "";//获取是白子还是黑子,1=黑子  2=白子  0=无子

自我感觉这种方法好笨,但是实在想不到什么好方法了。

代码如下:

#region 判断输赢

public void
PanDuan()
{

            //赋值

            for (int i = 0; i < 225; i++) {

                strlist[i / 15, i % 15] = sandwich[i].btn.Text;

                if (stroldlist[i / 15, i % 15] != strlist[i / 15, i % 15]) {

                    stroldlist[i / 15, i % 15] = strlist[i / 15, i % 15];//把新数组赋值给旧数组

                    icount = i;

                    abc = strlist[i / 15, i % 15];              

                }

            }





            //检查输赢,共有四中情况,横、竖、左斜、右斜

            int ix = icount / 15;//X轴

            int iy = icount % 15;//y轴

          //  PublicClass.ShowMessage(ix+"--------"+iy);

            int count = 0;//五个点相连为赢

            // int kstart = 0;//五子连开始的点

            //四种情况,横、竖、左斜、右斜





            //横(左上角坐标为0,0)       "|"

            int k_shu_min = ix - 4 < 0 ? 0 : ix - 4;

            int k_shu_max = ix + 4 < 15 ? ix + 4 : 14;

            for (int k = k_shu_min; k <= k_shu_max; k++) {

                if (strlist[k, iy] == abc) {

                    count++;

                    if (count >= 5) {

                        if (abc == "1") {

                            PublicClass.ShowMessage("黑子胜!");

                        }

                        if (abc == "2") {

                            PublicClass.ShowMessage("白子胜!");

                        }

                        return;

                    }

}else {

                    count = 0;

                }

}

            count = 0;//count值清0





            //竖            "一"

            int k_heng_min = iy - 4 < 0 ? 0 : iy - 4;

            int k_heng_max = iy + 4 < 15 ? iy + 4 : 14;

            for (int k = k_heng_min; k <= k_heng_max; k++) {

                if (strlist[ix, k] == abc) {

                    count++;

                    if (count >= 5) {

                        if (abc == "1") {

                            PublicClass.ShowMessage("黑子胜!");

                        }

                        if (abc == "2") {

                            PublicClass.ShowMessage("白子胜!");

                        }

                        return;

                    }

                }else {

                    count = 0;

                }

            }         

           count = 0;





           //左斜          "/"

           int k_left_min = ix - 4 < 0 ? 0 : ix - 4;

           int k_left_max = ix + 4 < 15 ? ix + 4 : 14;

           for (int k = k_left_min; k <= k_left_max; k++) {

               int ky = 0;

               if (ix + iy > 14) {

                   ky = ix + iy - k >= 14 ? 14 : ix + iy - k;

               } else {

                   ky = ix + iy - k <= 0 ? 0 : ix + iy - k;

               }

               if (strlist[k, ky] == abc) {

                   count++;

                   if (count >= 5) {

                       if (abc == "1") {

                           PublicClass.ShowMessage("黑子胜!");

                       }

                       if (abc == "2") {

                           PublicClass.ShowMessage("白子胜!");

                       }

                       return;

                   }

               }else {

                    count = 0;

                }

           }

           count = 0;





           //右斜           "\"

           int k_right_min = iy - 4 < 0 ? 0 : iy - 4;

           int k_right_max = iy + 4 < 15 ? iy + 4 : 14;

           for (int k = k_right_min; k <= k_right_max; k++) {

               int kx = 0;

               if (ix < iy) {                  

                   kx = ix - iy + k <= 0 ? 0 : ix - iy + k;    

               } else {

                   kx = ix - iy + k >= 14 ? 14 : ix - iy + k;           

               }

               // PublicClass.ShowMessage(kx+"---"+k);

               if (strlist[kx, k] == abc) {

                   count++;

                   if (count >= 5) {

                       if (abc == "1") {

                           PublicClass.ShowMessage("黑子胜!");

                       }

                       if (abc == "2") {

                           PublicClass.ShowMessage("白子胜!");

                       }

                       return;

                   }

               }else {

                    count = 0;

                }

           }

           count = 0;

        }

        #endregion

版权声明:本文为博主原创文章,未经博主允许不得转载。