Задание вроде очень простое. Все сделал. Но принимать не хочет. В упор не вижу в чем может быть проблема.

Задание 4.

Общий класс игровых объектов GameObject уже есть. Пришло время создать классы
конкретных типов игровых объектов.
4.1.    Часть игровых объектов могут двигаться (игрок и ящики), а часть нет, например, стены
и дома.
4.1.1.  Добавь интерфейс Movable в пакет model.
4.1.2.  Интерфейс Movable должен иметь метод void move(int x, int y).
4.2.    Добавь enum Direction в пакет model. Он должен содержать следующие значения:
LEFT, RIGHT, UP и DOWN. Этот тип будет использоваться для описания направления
движения объектов.
4.3.    Игровые объекты типа “дом” не поддерживают логики столкновений (игрок или
ящики могут свободно передвигаться по ним). Что касается остальных объектов, то
они не должны проходить свозь друг друга, они должны сталкиваться. Например,
ящик нельзя протолкнуть сквозь стену.
4.3.1.  Добавь абстрактный класс CollisionObject в пакет model.
4.3.2.  Класс CollisionObject должен быть унаследован от GameObject.
4.3.3.  Добавь в класс CollisionObject:
4.3.3.1.    Конструктор, принимающий int x и int y.
4.3.3.2.    Метод boolean isCollision(GameObject gameObject, Direction direction).
Этот метод должен возвращаться true, если при перемещении текущего
объекта в направлении direction на FIELD_SELL_SIZE произойдет
столкновение с объектом gameObject, переданным в качестве параметра.
Иначе – возвращать false. Столкновением считать совпадение координат x и y.

CollisionObject

package com.javarush.test.level34.lesson15.big01.model;

public abstract class CollisionObject extends GameObject {
    public CollisionObject(int x, int y) {
        super(x, y);
    }

    public boolean isCollision(GameObject gameObject, Direction direction)
{
    switch (direction)
    {
        case RIGHT:
            if(getX() + Model.FIELD_SELL_SIZE == gameObject.getX() && getY() == gameObject.getY())
                return true;
        case LEFT:
            if(getX() - Model.FIELD_SELL_SIZE == gameObject.getX() && getY() == gameObject.getY())
                return true;
        case UP:
            if(getX() == gameObject.getX() && getY() - Model.FIELD_SELL_SIZE == gameObject.getY())
                return true;
        case DOWN:
            if(getX() == gameObject.getX() && getY() + Model.FIELD_SELL_SIZE == gameObject.getY())
                return true;
    }
    return false;
}
}

GameObject

package com.javarush.test.level34.lesson15.big01.model;

import java.awt.*;

public abstract class GameObject {
    private int x;
    private int y;
    private int width;
    private int height;

    public GameObject(int x, int y) {
        this.x = x;
        this.y = y;
        this.width = Model.FIELD_SELL_SIZE;
        this.height = Model.FIELD_SELL_SIZE;
    }

    public GameObject(int x, int y, int width, int height) {
        this.x = x;
        this.y = y;
        this.width = width;
        this.height = height;
    }

    public abstract void draw(Graphics graphics);

    public int getX() {
        return x;
    }

    public void setX(int x) {
        this.x = x;
    }

    public int getY() {
        return y;
    }

    public void setY(int y) {
        this.y = y;
    }

    public int getWidth() {
        return width;
    }

    public void setWidth(int width) {
        this.width = width;
    }

    public int getHeight() {
        return height;
    }

    public void setHeight(int height) {
        this.height = height;
    }
}

Movable

package com.javarush.test.level34.lesson15.big01.model;

public interface Movable {
    void move(int x, int y);
}

Direction

package com.javarush.test.level34.lesson15.big01.model;

public enum Direction {

    LEFT,
    RIGHT,
    UP,
    DOWN

}

задан 16 Дек '16, 15:44

lexel's gravatar image

lexel
1626
одобрено: 43%

изменено 18 Дек '16, 08:02


Заменил switch на if else тоже не проходит

public boolean isCollision(GameObject gameObject, Direction direction){

        if (direction == Direction.LEFT) {
            setX(getX() - Model.FIELD_SELL_SIZE);
        } else if (direction == Direction.RIGHT) {
            setX(getX() + Model.FIELD_SELL_SIZE);
        } else if (direction == Direction.UP) {
            setY(getY() + Model.FIELD_SELL_SIZE);
        } else if (direction == Direction.DOWN){
            setY(getY() - Model.FIELD_SELL_SIZE);
        }

        return (getX() == gameObject.getX()) && (getY() == gameObject.getY());
    }
ссылка

опубликован 17 Дек '16, 03:47

lexel's gravatar image

lexel
1626
одобрено: 43%

up - down +

ссылка

опубликован 17 Дек '16, 16:33

truefirefox's gravatar image

truefirefox
4.5k110
одобрено: 34%

изменено 17 Дек '16, 16:33

нет break в switch блоке, соотв. проверяется ВСЕ случаи, независимо от выбранного направления

(18 Дек '16, 15:25) truefirefox

изменил метод isCollision в первом сообщении. Такой тоже не принимает

(18 Дек '16, 08:03) lexel

надо проверить, а потом перемещать (если получится), а ты сразу перемещаешь

(17 Дек '16, 16:46) truefirefox

попробовал на switch заменить и так же пускает

(17 Дек '16, 16:43) lexel

Изменил метод. НЕ помогло

public boolean isCollision(GameObject gameObject, Direction direction){
        if (direction == Direction.LEFT) {
            setX(getX() - Model.FIELD_SELL_SIZE);
        } else if (direction == Direction.RIGHT) {
            setX(getX() + Model.FIELD_SELL_SIZE);
        } else if (direction == Direction.UP) {
            setY(getY() - Model.FIELD_SELL_SIZE);
        } else if (direction == Direction.DOWN){
            setY(getY() + Model.FIELD_SELL_SIZE);
        }
        return (getX() == gameObject.getX()) && (getY() == gameObject.getY());
    }

(17 Дек '16, 16:40) lexel

У меня константа FIELD_SELL_SIZE не в классе Model а в классе GameObject

ссылка

опубликован 12 Янв, 05:59

lis's gravatar image

lis
901
одобрено: 30%

Ваш ответ
включить просмотр

Следить за вопросом

По Email:

После авторизации вы сможете подписаться на любые обновления здесь

Основы Markdown

  • *italic* or _italic_
  • **bold** or __bold__
  • ссылка:[текст](http://url.com/ "заголовок")
  • изображение?![alt текст](/path/img.jpg "заголовок")
  • нумерованный список: 1. Foo 2. Bar
  • Для того чтобы добавить разрыв строки просто добавьте два пробела.
  • основные HTML тэги, также поддерживаются

Тэги:

×3,548

Задан: 16 Дек '16, 15:44

Просмотров: 137 раз

Отредактирован: 12 Янв, 05:59