首先,在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#的作業。我會繼續努力,將這個五子棋學好。