如何用二维数组作为参数编写函数?

时间:2014-11-20 03:43:52

标签: c# arrays function multidimensional-array

我是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等......

但我不知道如何编写颜色功能。我在哪里声明变量mn?我希望它们分别对应变量i和j。

我甚至不确定如何在Main中调用该函数。我是写color[board[i,j]]还是color[board, i, j]还是其他什么?

2 个答案:

答案 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();
}

注意:我认为NoneWhite和&amp; Black是变量,否则如果您将它们视为字符串文字,则它们需要使用双引号。