我正在创建一个非常简单的游戏,有助于在玩游戏时理解儿童的简单逻辑。现在还处于初期阶段。
首先看下面的图片
Maroon彩色方块现在是玩家对象,它是一个40x40的图片框 背景是一个带有背景图像的600x600面板,我绘制了第一张地图(我想稍后制作更多地图,这将是第一张“教程地图”)
我现在有4个按钮:
一个人会向前移动玩家 - 现在它只会让玩家向上移动
一个人将向后移动玩家 - 现在它只会将玩家方向向下移动
一个人会让玩家正确 - 尚未运作
一个人会让玩家离开 - 还没有运作
我已经让我的玩家永远不会离开小组,无论如何:
我想知道如果前面有一面墙(绿色正方形),我怎么能让我的玩家不会移动。 - 现在它穿过绿墙,我希望它只能在白色的田野上移动。
我应该使用某种物体并将它们作为墙壁放在那里吗?
感谢您的帮助!
答案 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;
}
}