照片矩阵

时间:2018-05-08 14:16:03

标签: c# winforms

所以我有一个代码通过资源Image foodWorld = Resources.orange将图像注入我的项目中,我想从这张照片中制作一个矩阵,所以它看起来像这样:

Matrix

我有这段代码,但我不知道如何绘制矩阵。此外,我不知道这是否是吸引它的正确方法:

this.Width = 400;
this.Height = 300;

Bitmap b = new Bitmap(this.Width, this.Height);

for(int i = 0; i < this.Height; i++)
{
    for(int j = 0; j < this.Width; j ++)
    {
        //fill the matrix
    }
}

1 个答案:

答案 0 :(得分:1)

我对WinForms不太熟悉,但在WPF中,我是这样做的:

var columns = 15;
var rows = 10;

var imageWidth = 32;
var imageHeight = 32;

var grid = new Grid();
for (int i = 0; i < rows; i++)
{
    for (int j = 0; j < columns; j++)
    {
        //Get the image in your project; I'm not sure how this is done in WinForms
        var b = new Bitmap(imageWidth, imageHeight);

        //Display it
        var pictureBox = new PictureBox();
        pictureBox.Image = b;

        //Set the position
        Grid.SetColumn(j, pictureBox);
        Grid.SetRow(i, pictureBox);

        //Insert into the "matrix"
        grid.Children.Add(pictureBox);
    }
}

对于移动Pacman,重复上述操作,但仅限一张图像。存储对当前位置的引用以及按下某些键时,

  • 为其边缘设置动画,直到它看起来在相邻的单元格中(例如,如果每个单元格宽度为16像素且pacman应位于任何给定单元格的中心,则将右边距设置为16像素到把它放到右边的单元格中等等。)
  • 移动到另一个单元格后,根据上一次移动的方向设置新的行和列。
  • 如果新位置有水果,请将水果放在该位置并将其从Grid中移除。假设myGrid.Children[currentRow * totalColumns + currentColumn]currentRow都是从零开始的,您可以使用currentColumn来获取它。
  • 对必须移动的每个单元格重复。

这意味着矩阵将具有固定大小,但在WPF中,有一个Viewbox,这对于这些类型的场景很方便。另外,将pacman的z-index设置为大于水果,以便它始终位于顶部。