我是C#的新手。
我有一个名为“board”的二维数组:
short[,] board = new short[8,8];
我正在使用一个名为“color”的函数,如果一个白棋子在广场[i,j]上,则返回“White”,如果黑棋子在广场上则为“Black”[i,j] ,如果square [i,j]为空,则为“None”。
if(color[board[i,j]]==White)
{
do something
}
static string color(short[,,,,] t)
{
string Color;
if(t[m,n]==X)
{
Color=None;
}
if(t[m,n]==WP || t[m,n]==WN || t[m,n]==WB || t[m,n]==WR || t[m,n]==WQ || t[m,n]==WK)
{
Color=White;
}
if(t[m,n]==BP || t[m,n]==BN || t[m,n]==BB || t[m,n]==BR || t[m,n]==BQ || t[m,n]==BK)
{
Color=Black;
}
return Color;
}
X,WP,BP,WN,BN等......,这些只是我之前宣布的并代表棋子的东西:X = Nothing,WP = White Pawn,BP = Black Pawn,WN = White kNight ,BN =黑色kNight等......
但我不知道如何编写颜色功能。我在哪里声明变量m
和n
?我希望它们分别对应变量i和j。
我甚至不确定如何在Main中调用该函数。我是写color[board[i,j]]
还是color[board, i, j]
还是其他什么?
答案 0 :(得分:1)
要简化此问题,您需要更改颜色方法的签名。我会成功的
public static string Color(short piece)
{
string color = String.Empty;
//Because we are passing in the short array value we don't
//need to get it from the array we can just use it eg:
if(piece == WP)
color = "White";
//Your other if statements go here
return color;
}
然后调用您将使用的方法
if (Color(board[i][j]) == "White")
{
//Do stuff
}
我想要注意的一些额外的事情,方法的C#命名约定是以大写字母开头,如果你使用ENUM来表示片段而不是短常量,你的代码可能会更好。
编辑:
如果您使用ENUM,它将看起来像这样
enum Pieces { WP, WN, WB /* etc... */ }
这是一个更好的解决方案,因为每件作品都没有与之相关的明确值,所有这些都是自动完成的。此外,它很整洁,因为你在课程开始时没有10行代码解释所有部分,这更简洁,更简洁。
答案 1 :(得分:0)
尝试这样做:
static string color(short[,] t, int m, int n)
{
var colors = new Dictionary<string, short[]>()
{
{ None, new [] { X } },
{ White, new [] { WP, WN, WB, WR, WQ, WK } },
{ Black, new [] { BP, BN, BB, BR, BQ, BK } },
};
return
colors
.Where(x => x.Value.Contains(t[m, n]))
.Select(x => x.Key)
.FirstOrDefault();
}
注意:我认为None
,White
和&amp; Black
是变量,否则如果您将它们视为字符串文字,则它们需要使用双引号。