当我想让我的图片框在c#中发生碰撞时,我该怎么办?

时间:2016-10-29 11:09:58

标签: c#

我正在创建一个非常简单的游戏,有助于在玩游戏时理解儿童的简单逻辑。现在还处于初期阶段。

首先看下面的图片

The picture

Maroon彩色方块现在是玩家对象,它是一个40x40的图片框 背景是一个带有背景图像的600x600面板,我绘制了第一张地图(我想稍后制作更多地图,这将是第一张“教程地图”)

我现在有4个按钮:

一个人会向前移动玩家 - 现在它只会让玩家向上移动

一个人将向后移动玩家 - 现在它只会将玩家方向向下移动

一个人会让玩家正确 - 尚未运作

一个人会让玩家离开 - 还没有运作

我已经让我的玩家永远不会离开小组,无论如何:

我想知道如果前面有一面墙(绿色正方形),我怎么能让我的玩家不会移动。 - 现在它穿过绿墙,我希望它只能在白色的田野上移动。

我应该使用某种物体并将它们作为墙壁放在那里吗?

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

你有面板,由225个40x40正方形划分。所以你的面板有15个正方形宽度和15个正方形高度。您可以创建一个15x15矩阵,其中每个单元格可以是0或1(0是一个coridor,1是一个墙):

int[,] Matrix = new int[15, 15];

此矩阵将代表您的世界碰撞。按下按钮后,您应检查新的玩家位置,如果它与矩阵碰撞或超出界限:

private void Window_KeyDown(object sender, KeyEventArgs e)
{
    switch (e.Key)
    {
        case Key.Right:
            if ((int)PlayerLocation.X + 1 != Matrix.GetLength(1) && Matrix[(int)PlayerLocation.Y, (int)PlayerLocation.X + 1] == 0)
            {
                PlayerLocation = new Point(PlayerLocation.X + 1, PlayerLocation.Y);
                MovePlayer();
            }
            break;
        case Key.Left:
            if ((int)PlayerLocation.X != 0 && Matrix[(int)PlayerLocation.Y, (int)PlayerLocation.X - 1] == 0)
            {
                PlayerLocation = new Point(PlayerLocation.X - 1, PlayerLocation.Y);
                MovePlayer();
            }
            break;
        case Key.Up:
            if ((int)PlayerLocation.Y != 0 && Matrix[(int)PlayerLocation.Y - 1, (int)PlayerLocation.X] == 0)
            {
                PlayerLocation = new Point(PlayerLocation.X, PlayerLocation.Y - 1);
                MovePlayer();
            }
            break;
        case Key.Down:
            if ((int)PlayerLocation.Y + 1 != Matrix.GetLength(0) && Matrix[(int)PlayerLocation.Y + 1, (int)PlayerLocation.X] == 0)
            {
                PlayerLocation = new Point(PlayerLocation.X, PlayerLocation.Y + 1);
                MovePlayer();
            }
            break;
    }
}