用C#寫出一個控制台五子棋程序。學習C#中遇到的比較有意思的程序。


 首先,在Main方法中定義棋盤的行數列數,int hang,lie = 15;然后定義數組,string[ , ] qipan = new string[hangshu,lieshu];

然后寫一個下棋的方法  (其中用*代表白棋,#代表黑棋)

static void Xiaqi (string[,] qipan,int hang,int lie,bool baizixia)

{

    qipan[hang, lie] = baizixia ? "*":"#";   

}

  ? "*":"#"; 這個是三目運算符,條件為真結果為問號后面的,條件為假,結果為冒號后面的,因為要判斷白子黑子下棋的順序,所以在方法中定義一個bool 值,再利用三目運算符進行判斷。這樣就很方便的判斷是誰下了。

判斷誰下之后要寫一個與用戶交互的方法,所以:

static void Jiaohu(bool baizixia, out int hanghao , out int liehao)定義一個bool變量,因為只有黑白下兩種情況,接下來要寫一個if語句

{

     if(baizixia)

     {

        Console.WriteLine("請白子下,輸入落子行號");

        hanghao = int.Parse(Console.ReadLine());    

         Console.WriteLine("請白子下,輸入落子列號");

        liehao = int.Parse(Console.ReadLine());      

     }

     else

     {      

        Console.WriteLine("請黑子下,輸入落子行號");

        hanghao = int.Parse(Console.ReadLine());    

         Console.WriteLine("請黑子下,輸入落子列號");

        liehao = int.Parse(Console.ReadLine());  

      }

}這樣用戶交互就寫完了。

然后我們要一個檢查落子的方法,判斷下過的地方不能再下了以及是否超出棋盤界限,用if語句判斷

 static bool Jianchaluozi(string[,] qipan, int hanghao, int liehao, int hangshu, int lieshu)

{     

         if (hanghao >= hangshu || liehao >= lieshu)
         {
           Console.WriteLine("該位置已經不在棋盤內,請重新落子");
           return false;
         }

 

         else
         {
           if (qipan[hanghao, liehao] == "+")//空位置
               {
                 return true;//符合規則
               }
           else
             {
                Console.WriteLine("該位置已經有棋子了,請重新落子");
                return false;//不符合規則
              }
         }

}

這樣判斷棋子位置的方法就寫完了

然后做一個棋盤的界面,輸出棋盤,利用for循環來控制棋盤行列的輸出。

static void Xianshiqipan(string[,] qipan, int hangshu, int lieshu)
{
   Console.WriteLine(" 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14");
   for (int i = 0; i < hangshu; i++)
   {
     Console.Write(i < 10 ? i + " 行:" : i + "行:");
     for (int j = 0; j < lieshu; j++)
      {
       Console.Write(qipan[i, j] + " ");
        }
      Console.WriteLine();
    }
}

接下來要寫判斷勝負的方法,判斷勝負有四種,一種是橫行5個,一種是豎行5個,然后左斜行5個,右斜行5個。可以寫四個if語句

 

static int Panduanshengfu(string[,] qipan, int hangshu, int lieshu)
{

for (int i = 0; i < hangshu; i++)
{
for (int j = 0; j < lieshu - 4; j++)
{

 

#region 橫行
if (j < lieshu - 4)
{
       if (qipan[i, j] == "#" && qipan[i, j + 1] == "#" && qipan[i, j + 2] == "#" && qipan[i, j + 3] == "#" && qipan[i, j + 4] == "#")
             {
                //橫行黑子贏
                 return -1;
             }
       if (qipan[i, j] == "*" && qipan[i, j + 1] == "*" && qipan[i, j + 2] == "*" && qipan[i, j + 3] == "*" && qipan[i, j + 4] == "*")
              {
                //橫行白子贏
                 return 1;
               }

}
#endregion

#region 豎行
if (i < hangshu - 4)
{
          if (qipan[i, j] == "#" && qipan[i + 1, j] == "#" && qipan[i + 2, j] == "#" && qipan[i + 3, j] == "#" && qipan[i + 4, j] == "#")
            {
              //豎行黑子贏
              return -1;
             }
          if (qipan[i, j] == "*" && qipan[i + 1, j] == "*" && qipan[i + 2, j] == "*" && qipan[i + 3, j] == "*" && qipan[i + 4, j] == "*")
             {
                //豎行白子贏
               return 1;
              }
}
#endregion

#region 右斜
if (i < hangshu - 4 && j < lieshu - 4)
{
          if (qipan[i, j] == "#" && qipan[i + 1, j + 1] == "#" && qipan[i + 2, j + 2] == "#" && qipan[i + 3, j + 3] == "#" && qipan[i + 4, j + 4] == "#")
            {
              //黑子贏
              return -1;
             }
          if (qipan[i, j] == "*" && qipan[i + 1, j + 1] == "*" && qipan[i + 2, j + 2] == "*" && qipan[i + 3, j + 3] == "*" && qipan[i + 4, j + 4] == "*")
            {
             //白子贏
            return 1;
            }
}
#endregion

#region 左斜
if (i < hangshu - 4 && j >= 4)
{
           if (qipan[i, j] == "#" && qipan[i + 1, j - 1] == "#" && qipan[i + 2, j - 2] == "#" && qipan[i + 3, j - 3] == "#" && qipan[i + 4, j - 4] == "#")
            {
              //豎行黑子贏
              return -1;
             }
            if (qipan[i, j] == "*" && qipan[i + 1, j - 1] == "*" && qipan[i + 2, j - 2] == "*" && qipan[i + 3, j - 3] == "*" && qipan[i + 4, j - 4] == "*")
             {
              //豎行白子贏
              return 1;
              }
}
#endregion

}

}
return 0;
}

接着讓棋盤以+號輸出,

static void InitQipan(string[,] qipan, int hangshu, int lieshu)
{
for (int i = 0; i < hangshu; i++)
{
for (int j = 0; j < lieshu; j++)
{
qipan[i, j] = "+";
}
}
}

最后寫一個方法來控制游戲

static void GameManager(string[,] qipan, int hangshu, int lieshu)
{
//首先初始化
InitQipan(qipan, hangshu, lieshu);
//顯示棋盤
Xianshiqipan(qipan, hangshu, lieshu);
//循環控制輪流下棋
bool baizixia = true;
while (true)
{
//交互
int hanghao, liehao;
jiaohu(baizixia, out hanghao, out liehao);
//檢查規則
if (Jianchaluozi(qipan, hanghao, liehao, hangshu, lieshu))
{
//下棋
Xiaqi(qipan, hanghao, liehao, baizixia);
//顯示棋盤
Xianshiqipan(qipan, hangshu, lieshu);
//判斷勝負
int shengfu = Panduanshengfu(qipan, hangshu, lieshu);
if (shengfu == -1)
{
Console.WriteLine("黑棋贏");
InitQipan(qipan, hangshu, lieshu);
Xianshiqipan(qipan, hangshu, lieshu);
}
else if (shengfu == 1)
{
Console.WriteLine("白棋贏");
InitQipan(qipan, hangshu, lieshu);
Xianshiqipan(qipan, hangshu, lieshu);
}
}

else
{
Console.WriteLine("落子不符合規則,請重新落子");
}
//交換棋手
baizixia = !baizixia;
}
}

寫完這個方法后在Main方法中調用這個game方法,就完成了。

這個五子棋盤是我在學習C#過程的第一個難度比較大的程序,在老師的指導下一步一步寫了下來,在博客中復盤了一下,還是有許多不太懂的地方,這個五子棋盤融合了for循環,if語句,方法的調用,以及各種情況的方法書寫。是一個比較完整的學習C#的作業。我會繼續努力,將這個五子棋學好。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM