2016-08-27 50 views
0

私はC#を使ってスネークゲームを作っています。私は4つの図形(円、正方形、長方形、三角形)を同時に描きます。私がスクエアとして目標を通過すると、ヘビは広場に到達しなければなりません。ユーザーがスネークをターゲットに移動してヒットした場合、Winは失敗します。IntersectsWith()メソッドを描画三角形に使用する

矩形、円、正方形の場合は、IntersectsWith()は正常に動作します。しかし、三角形のために働いていません。何か助けてくれますか? はここ しかし、これは

if (snakes.SnakeRec[i].IntersectsWith(food.foodTrianglePoints)) 
{ 
     //cannot convert from 'System.Drawing.Point[]' to 'System.Drawing.Rectangle'          
} 
+0

.NET 'IntersectsWith'方法が長方形で動作するので、カスタムシェイプが交差するかどうかをテストするために独自のコードを記述する必要があります。ちなみに、2016年の試合では、ヘビやサークルが長方形であると仮定するのはあまり意味がありません...ところで、あなたが学校に十分長く入っていると仮定すると、交差点を見つけることは数学的に複雑ではありません... Googleを使用すると、[円と四角の交点(C#)](http://eex-dev.net/index.php?id=100) – Phil1970

答えて

1

IntersectsWithは確かのみ仕事Rectangles間、ない三角形や円もellispisは、重複はどうなるのない限り動作しません私のコード

if (snakes.SnakeRec[i].IntersectsWith(food.foodSquare)) 
{ 
    Win(); 
} 
if ((snakes.SnakeRec[i].IntersectsWith(food.foodCircle))|| (snakes.SnakeRec[i].IntersectsWith(food.foodRec))) 
{ 
    restart(); 
} 

は罰金作品です境界で..

しかし、非常に任意に複雑な形の交差点を見つけるためのトリックがある限りRegionに割り当てることができます。 Regionを作成する1つの簡単な方法は、あなたがあなたの両方のためのRegionsを持っている場合は...

それらを引くほとんどあなたのような、GraphicsPathに図形のすべての種類を追加することができますGraphicsPath ...

を使用しています図形をIntersectにして、RegionEmptyであるかどうかをテストします。

あなたの図形を使用した例です。シェイプが描画されているコントロールやフォームを知る必要があります。さんは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(); 
} 
+0

Thnkz #TaWのようなコードを見つけることができます。私は別の方法を見つけました。長方形と三角形のポイントをポイント配列に分割し、Contain()メソッドを使用してうまくいきました。 – Bhagya

+0

よろしくお願いします。私は長方形が三角形に決して含まれていないと仮定します.. – TaW

関連する問題