2

我正在制作一个 C# 国际象棋游戏,因此我可以更多地练习使用该语言进行编码。我使用的是 Windows 窗体,我使用的是 45x45 .png 图标。我已经制作了我的图片框,以便板上的每个位置都是 50x50 像素,使图片框/板成为 400x400 正方形。我想弄清楚的是,如何初始化棋盘,以便我可以使用 Rectangle 类型的 2D 数组移动棋子。这样,板上的每个位置都是一个定义为 50x50 正方形的矩形。到目前为止我的代码,如果我遗漏了一些重要的东西,请告诉我:

class Board//this class represents the board 
{
    private Rectangle[,] chessBoard = new Rectangle[8, 8]; //a 2d array of rectangles


    public void initBoard()//this method will initialize the picturebox/board
    {
        for (int x = 0; x < 8; x++)
        {
            for (int y = 0; y < 8; y++)
            {
                chessBoard[x, y] = new Rectangle(x * 50, y * 50, 50, 50);


            }
        }

    }

} 
4

1 回答 1

3

我建议虽然您的方法可能会让您到达那里,但大多数国际象棋游戏不会对图像使用单独的 png,而是您将拥有一个具有 2x6 平铺矩阵的单个图像,并使用图像中的偏移量来选择正确的平铺。您可以将板存储为 64 个元素的一维数组。它的默认启动安排可能类似于...

board = [00,01,02,03,04,02,01,00,
         05,05,05,05,05,05,05,05,
         -1,-1,-1,-1,-1,-1,-1,-1,
         -1,-1,-1,-1,-1,-1,-1,-1,
         -1,-1,-1,-1,-1,-1,-1,-1,
         -1,-1,-1,-1,-1,-1,-1,-1,
         15,15,15,15,15,15,15,15,
         10,11,12,13,14,12,11,10]

其中 -1 是空白方块,00-15 是碎片图像的偏移索引。如:

00 10 = wr br
01 11 = wk bk
02 12 = wb bb
03 13 = wq bq
04 14 = wK bK
05 15 = wp bp

当玩家移动时,您只需调用一个方法来确定移动是否合法,如果是,目的地是否被占用?捕获!否则设置 board[destination] = board[origin],设置 board[origin] = -1。

可能需要仔细检查我对 K 和 Q 的位置,希望我说得通:)

于 2013-06-28T19:56:24.277 回答