В классе Arkanoid должен быть реализован метод checkEndGame() в соответствии с условием задачи.
Метод checkEndGame должен устанавливать значение поля isGameOver в true, если координата y шарика (ball) больше высоты игрового поля (height).
package com.javarush.task.task24.task2413;
/*
Нам понадобятся приватные поля:
а) speed (скорость шарика) типа double;
б) direction (направление движения в градусах: от 0 до 360) типа double;
в) dx (расстояние по x, которое проходит шарик за один шаг. вычисляется на основе speed и direction) типа double;
г) dy (расстояние по y, которое проходит шарик за один шаг. вычисляется на основе speed и direction) типа double;
д) isFrozen ("истина" если шарик "заморожен" - не двигается) типа boolean.
Не забудь добавить геттеры для всех полей этого класса, кроме isFrozen (его мы будем использовать только внутри класса Ball).
А еще сделай-ка конструктор:
а) параметры - x, y, speed, direction;
б) радиус (для вызова родительского класса) всегда равен 1;
в) не забудь установить isFrozen в true - в начале игры шарик никуда не летит.
*/
public class Ball extends BaseObject {
private double speed;
private double direction; //направление движения в градусах: от 0 до 360
private double dx; //расстояние по x, которое проходит шарик за один шаг. вычисляется на основе speed и direction
private double dy; //расстояние по y, которое проходит шарик за один шаг. вычисляется на основе speed и direction
private boolean isFrozen = true;
public double getSpeed() {
return speed;
}
public double getDirection() {
return direction;
}
public double getDx() {
return dx;
}
public double getDy() {
return dy;
}
public Ball(double x, double y, double speed, double direction) {
super( x, y, 1 );
this.speed = speed;
this.direction = direction;
}
/*
Во-вторых надо реализовать метод draw(Canvas canvas):
на объекте canvas необходимо вызвать метод setPoint с параметрами (x, y, 'O')
*/
@Override
void draw(Canvas canvas) {
canvas.setPoint( x, y, 'O' );
}
/*
Во-первых надо реализовать метод move(), унаследованный от BaseObject:
а) x должен увеличиваться на dx каждый ход
б) y должен увеличиваться на dy каждый ход
если шарик "заморожен", то x и y меняться не должны
*/
@Override
void move() {
if (!isFrozen) {
x += dx;
y += dy;
}
}
/*
В-третьих надо реализовать метод start()
Именно его вызов "размораживает" шарик.
Что для этого надо сделать - это ты уже сам реши.
*/
void start() {
isFrozen = false;
}
/*
Во-первых нужен метод setDirection,
который не только устанавливает значение переменной direction,
но и вычисляет новые значения переменных dx и dy.
Код должен выглядеть примерно так:
this.direction = direction;
double angle = Math.toRadians(direction);
dx = Math.cos(angle) * speed;
dy = -Math.sin(angle) * speed.
*/
public void setDirection (double direction) { //устанавливает движение и расстояния dx dy
this.direction = direction;
double angle = Math.toRadians( direction ); //преобразует градусы в радианы
dx = Math.cos(angle) * speed;
dy = -Math.sin(angle) * speed;
}
/*
Во-вторых шарик может удариться о стенку.
При этом он должен от нее отскочить.
Для этого нам понадобится еще один метод:
void checkRebound(int minx, int maxx, int miny, int maxy)
*/
void checkRebound(int minx, int maxx, int miny, int maxy) { //проверка ударяется ли мячик
}
}