私はちょうど XNA を学んでいて、簡単な Break The Blocks ゲームの作成から始めました。画面上部のブロックを表すために 2 次元配列を使用しています
bricks = new Bricks[18,16];
for (int y = 0; y < 16; y++)
{
for(int x = 0; x < 18; x++)
{
bricks[x, y] = new Bricks(BrickTexture, new Rectangle(x * BrickTexture.Width, y * BrickTexture.Height, 38, 18), Color.Red);
if (y == 2 || y == 3)
{
bricks[x, y] = new Bricks(BrickTexture, new Rectangle(x * BrickTexture.Width, y * BrickTexture.Height, 38, 18), Color.Blue);
}
if (y == 4 || y == 5)
{
bricks[x, y] = new Bricks(BrickTexture, new Rectangle(x * BrickTexture.Width, y * BrickTexture.Height, 38, 18), Color.Green);
}
if (y == 6 || y == 7)
{
bricks[x, y] = new Bricks(BrickTexture, new Rectangle(x * BrickTexture.Width, y * BrickTexture.Height, 38, 18), Color.White);
}
if (y == 8 || y == 9)
{
bricks[x, y] = new Bricks(BrickTexture, new Rectangle(x * BrickTexture.Width, y * BrickTexture.Height, 38, 18), Color.Pink);
}
if (y == 10 || y == 11)
{
bricks[x, y] = new Bricks(BrickTexture, new Rectangle(x * BrickTexture.Width, y * BrickTexture.Height, 38, 18), Color.Purple);
}
if (y == 12 || y == 13)
{
bricks[x, y] = new Bricks(BrickTexture, new Rectangle(x * BrickTexture.Width, y * BrickTexture.Height, 38, 18), Color.Navy);
}
}
}
これがブロックの構築方法であり、foreach ループで画面に描画されます。
foreach (Bricks brick in bricks)
{
brick.Draw(spriteBatch);
}
私の Update メソッドでは、ループごとに別のループを使用して、ボールがそれらのいずれかと衝突したかどうか、および画面からレンガを削除する必要があるかどうかを確認します。for そのため、衝突方法は次のとおりです。
foreach (Bricks brick in bricks)
{
brick.CheckBrickBallCollision(ball);
}
public void CheckBrickBallCollision(Ball ball)
{
if (isVisible && ball.Ball2.Intersects(position))
{
isVisible = false;
ball.direction.X *= 0.85f;
ball.direction.Y *= -1;
}
}
私の問題は、すべてのレンガがなくなるとゲームに勝ち、ゲームの状態を変更することで勝った画面が表示されるようにする方法です。
どんなアイデアも本当に役に立ちます