首页 > Windows开发 > 详细

用C#写出一个控制台五子棋程序。学习C#中遇到的比较有意思的程序。

时间:2018-07-13 12:56:15      阅读:38      评论:0      收藏:0      [点我收藏+]

标签:ret   继续   reg   static   两种   manager   学习   game   string   

 首先,在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#的作业。我会继续努力,将这个五子棋学好。

 

用C#写出一个控制台五子棋程序。学习C#中遇到的比较有意思的程序。

标签:ret   继续   reg   static   两种   manager   学习   game   string   

原文:https://www.cnblogs.com/zzy476710623/p/9304223.html

(0)
(0)
   
举报
评论 一句话评论(0
0条  
登录后才能评论!
© 2014 bubuko.com 版权所有 鲁ICP备09046678号-4
打开技术之扣,分享程序人生!
             

鲁公网安备 37021202000002号