蓝色图片框=播放器图片框
新游戏按钮= btn创建
首先,迷宫的形状在gdi+中实现。
如何实现玩家移动的功能,但如果遇到墙,如何实现不移动的功能?
private void btnCreate_Click(object sender, EventArgs e)
{
int wid = 15;
int hgt = 15;
CellWidth = picMaze.ClientSize.Width / (wid+2);
CellHeight = picMaze.ClientSize.Height / (hgt+2);
Xmin = (picMaze.ClientSize.Width - wid * CellWidth) / 2;
Ymin = (picMaze.ClientSize.Height - hgt * CellHeight) / 2;
MazeNode[,] nodes = MakeNodes(wid, hgt);
MakeRandomMaze(nodes[0, 0]);
DisplayMaze(nodes);
PlayerPictureBox.Visible = true;
arrivePicturBox.Visible = true;
PlayerPictureBox.Location = new Point(70,51);
}
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
switch (keyData)
{
case Keys.Left:
PlayerPictureBox.Left -= 5;
break;
case Keys.Right:
PlayerPictureBox.Left += 5;
break;
case Keys.Up:
PlayerPictureBox.Top -= 5;
break;
case Keys.Down:
PlayerPictureBox.Top += 5;
break;
default: return base.ProcessCmdKey(ref msg, keyData);
}
return true;
}
1条答案
按热度按时间cetgtptt1#
你需要在一个矩形和一个(在你的例子中,它是一个正方形)和一条线段。尽管所有的形状都是轴对齐的,但算法相当复杂。它涉及到大量的矢量数学和计算几何技巧。我认为你可能不想学习背后的数学。因此,我不解释算法。如果你想,你可以问另一个关于它如何工作的问题。
实现是我自己的实现。它不是基于任何关于主题的论文或外部示例源代码。它可能没有优化好。请记住这一点。
我已经创建了一个
LineSegment
类来保存行信息,如果您要使用我的算法,我建议您根据需要使用该类或扩展它。PS:* 我必须承认,我认为碰撞算法会很简单,但它已经演变成一个复杂得多的算法,特别是对于一个初学者的碰撞数学。*
下面是Winforms应用程序的例子,你可以根据自己的需要修改它。