首先,在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#的作业。我会继续努力,将这个五子棋学好。
原文地址:https://www.cnblogs.com/zzy476710623/p/9304223.html