我正在使用C#进行蛇游戏。我同时画了四个形状(圆形,方形,矩形,三角形)。如果我将目标传递给Square,那么蛇必须到达Square。如果用户将蛇移动到目标并击中,则Win否则失败。
对于矩形,圆形,方形IntersectsWith()工作正常。但对于三角形,它不起作用。有什么帮助我吗? 这是我的代码
if (snakes.SnakeRec[i].IntersectsWith(food.foodSquare))
{
Win();
}
if ((snakes.SnakeRec[i].IntersectsWith(food.foodCircle))|| (snakes.SnakeRec[i].IntersectsWith(food.foodRec)))
{
restart();
}
工作正常 但这不会起作用
if (snakes.SnakeRec[i].IntersectsWith(food.foodTrianglePoints))
{
//cannot convert from 'System.Drawing.Point[]' to 'System.Drawing.Rectangle'
}
答案 0 :(得分:1)
IntersectsWith
肯定仅在Rectangles
之间工作,不是三角形,也不是圆形,也不是ellispis,除非碰巧在边界重叠..
然而,只要可以将它们分配给Region
,就可以找到几乎任意复杂形状的交点。创建Region
的一种简单方法是使用GraphicsPath
..
您可以将各种形状添加到GraphicsPath
,就像绘制它们一样。
如果你的两个形状都有Regions
,你可以Intersect
然后测试Region
是Empty
。
这是一个使用你的形状的例子;它需要知道绘制形状的控件或形式;我们称之为Control surface
..:
using (Graphics g = surface.CreateGraphics())
{
GraphicsPath gp1 = new GraphicsPath();
GraphicsPath gp2 = new GraphicsPath();
GraphicsPath gp3 = new GraphicsPath();
GraphicsPath gp4 = new GraphicsPath();
gp1.AddRectangle(fsnakes.SnakeRec[i]);
gp2.AddPolygon(food.foodTrianglePoints);
gp3.AddEllipse(food.foodCircle);
gp4.AddRectangle(food.foodRec);
Region reg1 = new Region(gp1);
Region reg2 = new Region(gp2);
Region reg3 = new Region(gp3);
reg2.Intersect(reg1);
reg3.Intersect(reg1);
reg4.Intersect(reg1);
if (!reg2.IsEmpty(g)) Win();
if (!reg3.IsEmpty(g) || !reg4.IsEmpty(g)) restart();
}