1. 程式人生 > >C# 控制檯實現的五子棋遊戲

C# 控制檯實現的五子棋遊戲

今天用到陣列在控制檯做了一個五子棋遊戲,實現如下: static void Main(string[] args)
        {
            string[,] QP = new string[17, 17];                                             //定義二維陣列QP同時設定棋盤大小
            while (true)
            {                 Console.Clear();
                int left = 16;
                int top = 8;
                for (int i = 0; i < QP.GetLength(0); i++)
                {
                    for (int j = 0; j < QP.GetLength(1); j++)                             //為陣列QP每個元素賦初值   用“□”代替棋盤網格         
                    {
                        QP[i, j] = "□";
                    }
                }
                for (int i = 0; i < QP.GetLength(0); i++)
                {
                    for (int j = 0; j < QP.GetLength(1); j++)
                    {
                        Console.Write(QP[i, j]);                                          //遍歷陣列QP 並將其列印在窗體 使介面看起來像是網格狀
                    }
                    Console.WriteLine();
                }                 bool mark = true;
                bool Jmark = true;
                while (Jmark)
                {
                    Console.SetCursorPosition(left, top);                               //設定游標初始位置
                    ConsoleKey key = Console.ReadKey(true).Key;                         //讀取輸入值                     switch (key)                                                        //switch語句控制游標的移動,上下左右共4個方向 可同時由方向鍵和“W”“S”“A”“D”2組組合鍵控制
                    {
                        case ConsoleKey.UpArrow:
                        case ConsoleKey.W:
                            if (top > 0)
                            {
                                top--;
                            }
                            break;
                        case ConsoleKey.DownArrow:
                        case ConsoleKey.S:
                            if (top < 16)
                            {
                                top++;
                            }
                            break;
                        case ConsoleKey.LeftArrow:
                        case ConsoleKey.A:
                            if (left > 0)
                            {
                                left = left - 2;
                            }
                            break;
                        case ConsoleKey.RightArrow:
                        case ConsoleKey.D:
                            if (left < 32)
                            {
                                left = left + 2;
                            }
                            break;
                        default:                                                       //預設值設定 當按件不為定義的2組組合鍵時,若當前游標位置不是“□”,則不能操作,
                            if (QP[top, left / 2] != "□")                             //若是“□”,則判斷mark值,為ture則列印"●",否則列印"○",同時陣列相應位置的值發聲替換
                            {
                                continue;                                               //以實現兩種棋子交替出現
                            }                             if (mark)
                            {
                                Console.ForegroundColor = ConsoleColor.Blue;
                                Console.Write("●");
                                QP[top, left / 2] = "●";
                            }
                            else
                            {
                                Console.Write("○");
                                QP[top, left / 2] = "○";
                            }
                            if (SF(QP, top, left / 2))                            //呼叫SF方法 判斷輸贏
                            {
                                Jmark = false;
                                Console.Beep();
                                System.Threading.Thread.Sleep(2000);
                            }
                            mark = !mark;
                            break;
                    }
                }
            }         }
        static bool SF(string[,] strarr, int x, int y)                          //自定義SF方法  判斷獲勝玩家
        {
            int xx = x;
            int yy = y;
            string ActChe = strarr[x, y];
            int i = 1;                                                          //i表示目前相連的同色棋子數 預設為1             //第一種情況,x不動,y在變化  即判斷y方向上是否獲勝
            while (true)
            {
                if (--yy >= 0)
                {
                    if (ActChe == strarr[xx, yy])
                    {
                        i++;                         if (i == 5)
                        {
                            return true;
                        }
                    }
                    else
                    {
                        break;
                    }
                }
                else
                {
                    break;
                }
            }
            xx = x;
            yy = y;
            while (true)
            {
                if (++yy < 17)
                {
                    if (ActChe == strarr[xx, yy])
                    {
                        i++;
                        if (i == 5)
                        {
                            return true;
                        }
                    }
                    else
                    {
                        break;
                    }
                }
                else
                {
                    break;
                }
            }
            //第二種情況,y不動,x在變化
            i = 1;
            xx = x;
            yy = y;             while (true)
            {
                if (--xx >= 0)
                {
                    if (ActChe == strarr[xx, yy])
                    {
                        i++;                         if (i == 5)
                        {
                            return true;
                        }
                    }
                    else
                    {
                        break;
                    }
                }
                else
                {
                    break;
                }
            }
            xx = x;
            yy = y;
            while (true)
            {
                if (++xx < 17)
                {
                    if (ActChe == strarr[xx, yy])
                    {
                        i++;
                        if (i == 5)
                        {
                            return true;
                        }
                    }
                    else
                    {
                        break;
                    }
                }
                else
                {
                    break;
                }
            }             //第三種情況,x,y同增同減
            i = 1;
            xx = x;
            yy = y;             while (true)
            {
                if (--xx >= 0 && --yy >= 0)
                {
                    if (ActChe == strarr[xx, yy])
                    {
                        i++;                         if (i == 5)
                        {
                            return true;
                        }
                    }
                    else
                    {
                        break;
                    }
                }
                else
                {
                    break;
                }
            }
            xx = x;
            yy = y;
            while (true)
            {
                if (++xx < 17 && ++yy < 17)
                {
                    if (ActChe == strarr[xx, yy])
                    {
                        i++;
                        if (i == 5)
                        {
                            return true;
                        }
                    }
                    else
                    {
                        break;
                    }
                }
                else
                {
                    break;
                }
            }
            //第四種情況 x加,y減,或y加,x減
            i = 1;
            xx = x;
            yy = y;             while (true)
            {
                if (--xx >= 0 && ++yy < 17)
                {
                    if (ActChe == strarr[xx, yy])
                    {
                        i++;                         if (i == 5)
                        {
                            return true;
                        }
                    }
                    else
                    {
                        break;
                    }
                }
                else
                {
                    break;
                }
            }
            xx = x;
            yy = y;
            while (true)
            {
                if (++xx < 17 && --yy > 0)
                {
                    if (ActChe == strarr[xx, yy])
                    {
                        i++;
                        if (i == 5)
                        {
                            return true;
                        }
                    }
                    else
                    {
                        break;
                    }
                }
                else
                {
                    break;
                }
            }
            return false;
        }