Как удалить элементы из двумерного массива на основе случайных условий? - PullRequest
1 голос
/ 30 января 2011

У меня есть небольшая игра (5 классов), которая разрабатывается в XNA.Вокруг окна прыгают шары, движущиеся под прямым углом при столкновении с боковыми сторонами окна.Пользователь создает выделение, перетаскивая мышь в любом месте окна.Когда шатер создан и подтвержден, каждый раз, когда мяч попадает в шатер, его необходимо удалить.У меня есть шары в двумерном массиве, и я подумал, как убрать шары из этого типа массива.В настоящее время я делаю следующее:

Rectangle ball = new Rectangle((moveBallX - 4), (moveBallY - 4), moveBallX, moveBallY);
Rectangle marquee = new Rectangle(tempInitialX, tempInitialY, tempWidth, tempHeight);
if (ball.Intersects(marquee))
{
    balls[rowIndex, columnIndex].SetRed(0);
    balls[rowIndex, columnIndex].SetGreen(0);
    balls[rowIndex, columnIndex].SetBlue(0);
}

Это делает шары, которые входят в область выделения, черными, так что они становятся невидимыми.Я хочу сделать с кодом другие вещи, такие как отображение количества оставшихся на доске шаров, поэтому было бы полезно удалить элементы из массива.

Спасибо за ваше время.

Ответы [ 2 ]

1 голос
/ 30 января 2011

Вы можете установить точку в массиве, где находится шар, до null. Это быстро и просто (изменение размера массива не требуется), но вам придется изменить все свои циклы, чтобы сначала проверять наличие нулей.

Таким образом, код будет выглядеть примерно так:

if (ball.Intersects(marquee))
{
    var deadBall = balls[rowIndex, columnIndex];
    balls[rowIndex, columnIndex] = null;

    deadBall.SetRed(0);
    deadBall.SetGreen(0);
    deadBall.SetBlue(0);
}

Имейте в виду, что вы можете отслеживать количество мячей в отдельной переменной; это проще (и быстрее), чем подсчет количества ненулевых шаров в вашем массиве.

0 голосов
/ 21 февраля 2011

Если вам нужно удалить предметы, используйте список, если нет необходимости иметь массив шариков статического размера.Вы упомянули, что они подпрыгивают по экрану, поэтому нет необходимости держать их в строках / столбцах.Я бы также изменил ваш класс Ball, добавив в него еще несколько функций, например:

public class Ball
{
    int X;
    int Y;
    Color color;

    public Ball( int x, int y, Color c )
    {
        X = x; Y = y; color = c;
    }

    // Whatever else you have in your ball class goes here

    public bool Intersects( Rectangle rect )
    {
        return new Rectangle( this.X - 4, this.Y - 4, this.X, this.Y ).Intersects( rect );
    }


    public void MakeInvisible()
    {
        color = new Color( 0, 0, 0, 0 );
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...