Categories: Programming

Programming | Part#13

Надеюсь, что цветные круги у всех получились. Продолжаем начатое

13

На данный момент у вас должно все выглядеть как то вот так. Образно зеленые круги — наши овощи/фрукты, которые мы добавим позже, красные — монстры.

Сегодня мы сделаем так, чтобы при запуске нашей игры, наш круг не пересекался с другими, т.е. сделаем зону безопасности.

Добавим в GameManager следующие строчки:

private void initEnemyCircles() {
    SimpleCircle mainCircleArea = mainCircle.getCircleArea();
    circles = new ArrayList<EnemyCircle>();
    for (int i = 0; i< MAX_CIRCLES; i++)
    {
        EnemyCircle circle;
        do {circle= EnemyCircle.getRandomCircle(); } while (circle.isIntersect(mainCircleArea));
                circles.add(circle);
    }
    calculateAndSetCirclesColor();
}

Т.е. определим CircleArea — наша область в которой нельзя создавать никакие другие круги кроме нашего (в начале игры).
Определим ее как:

public SimpleCircle getCircleArea() {
    return new SimpleCircle(x,y,rad*3);
}

И добавим метод isIntersect — расчет радиуса области:

public boolean isIntersect(SimpleCircle circle) {
    return rad + circle.rad >= Math.sqrt(Math.pow(x-circle.x,2) + Math.pow(y-circle.y, 2));
}

Добавим движение всем остальным кругам (пока что случайное с рандомной скоростью, как сделать границы и изменить скорость думайте сами, там все по аналогии):
GameManager

public void onTouchEvent(int x, int y) {
    mainCircle.moveMainCircleWhenTouchAt(x, y);
    moveCircles();
}

private void moveCircles() {
    for (EnemyCircle circle: circles) {
        circle.moveOnStep();
    }
}

EnemyCircle:

public void moveOnStep() {
    x += dx;
    y += dy;

}
public EnemyCircle(int x, int y, int rad, int dx, int dy)
{
    super(x,y,rad);
    this.dx = dx;
    this.dy = dy;
}
int dx = 1+random.nextInt(RANDOM_SPEED);
int dy = 1+random.nextInt(RANDOM_SPEED);

Запускаем, проверяем, все работает, но круги вылетают за пределы экрана — как править читайте выше (сами — ручками). Увидимся через две недели=)
 

 

 

Article info



Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *