2015-04-04 2 views
0

Итак, я беру класс Java на высоком уровне, и мой учитель не помогает ... , поэтому мы узнаем об абстракции, и я уже сделал это с моим «чужим» классом, который движется, он столкнутся с одним движением вперед, а другой - назад, переключив два изображения ... Однако, когда они показали код в примере, он казался слишком сложным, и мне было интересно, просто ли я что-то упустил.Абстракция с переменными

Мой код

private String avatarRight = "Alien.png"; 
private String avatarLeft = "Alien1.png"; 
/** 
    * Act - do whatever the Alien wants to do. This method is called whenever 
    * the 'Act' or 'Run' button gets pressed in the environment. 
    */ 
public void act() 
{ 
    movement(avatarRight, avatarLeft); 
    gatherPart(); 
} 

(суперкласса, содержащий метод движения)

/** 
* Sets up the movement keys and facing for the Object 
*/ 
public void movement(String avatarRight,String avatarLeft) 
{ 
    if (atWorldEdge() == false) 
     { 
     if (Greenfoot.isKeyDown("w")) 
     { 
      setLocation(getX(), getY()-2); 
     } 
     if (Greenfoot.isKeyDown("d")) 
     { 
      setImage(avatarRight); 
      setLocation(getX()+2, getY()); 
     } 
     if (Greenfoot.isKeyDown("s")) 
     { 
      setLocation(getX(), getY()+2); 
     } 
     if (Greenfoot.isKeyDown("a")) 
     { 
      setImage(avatarLeft); 
      setLocation(getX()-2, getY()); 
     } 
     } 
    else 
     { 
     } 
} 

Их Код

{ 
    private GreenfootImage image1; 
    private GreenfootImage image2; 
    private boolean isKeyDown; 
    private String key; 
    private String sound; 
    /** 
    * Create a Duke and initialize his two images. Link Duke to a specific keyboard 
    * key and sound. 
    */ 
    public Duke(String keyName, String soundFile) 
    { 
     key = keyName; 
     sound = soundFile 
     image1 = new GreenfootImage("Duke.png") 
     image3 = new GreenfootImage("duke2.png") 
     setImage(image1); 
    } 

} 

Где я просто говорю avatarRight = "этот образ"

они говорят, ключ = имя_раздела

ключ = «ключ»

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

private int rotation; 
public Capsule(int rot) 
{ 
    rotation = rot 
    setRotation(rotation); 
} 

но ниже один работает прекрасно , насколько я могу судить. Есть ли причина, почему я хотел бы сделать код выше, а не ниже одной

public Capsule(int rot) 
{ 
    setRotation(rot); 
} 
+0

Вы сравниваете конструктор с кодом движения. Я не понимаю, на какой части сложнее. Я скажу, что ваш код движения не идеален, потому что вы можете легко привязать определенное движение к определенному ключу и избегать всех проверок, что, по-видимому, означает, что комментарии в «их» кодексе подразумевают, что они планируют. – ChiefTwoPencils

+0

Хорошо, что делает с тех пор. Итак, как бы вы улучшили код? так урок показал нам, чтобы написать код движения hte. – power5000

+0

Хорошо, тогда не беспокойтесь об этой части. Можете ли вы уточнить, что, по вашему мнению, сложнее в их отношении. Это конструктор, поэтому, если вы собираетесь сравнивать их, похоже, вам придется сравнивать одни и те же вещи, например, конструкторы, методы, переменные и т. Д. Главное, что я вижу, это ссылки на изображения и вы этого не делаете. Их было бы лучше, потому что вам придется извлекать файл каждый раз, когда вы устанавливаете изображение; не так ли? IOW, они 'setImage (image)' и вы 'setImage (string)'. – ChiefTwoPencils

ответ

0

ОК, основываясь на комментариях я склонен сказать, что вы не сравнивая одни и те же вещи.

Где я просто говорю avatarRight = «изображения», они говорят, ключ = KEYNAME ключ = «ключ»

Это не кажется, чтобы быть точно точным. Где вы говорите

private String avatarRight = "Alien.png"; и private String avatarLeft = "Alien1.png";

Они имеют PNG жестко закодированы в конструкторе как "Duke.png" и "duke2.png", который, кстати, содержит ошибку, потому что, насколько я могу видеть, что нет image3.

Значит, keyName не соответствует действительности, так как вы говорите. Возможно, вам следует еще раз изучить код, чтобы узнать, как они используют key или предоставить одинаковый код для обоих примеров, чтобы мы могли видеть различия.

Посмотрев на него, возможно, есть карта где-то, и key будет использоваться для доступа к конкретному alien или другому типу игрового объекта.


Чтобы обратиться к редактированию.

Есть ли причина, почему я хотел бы сделать выше код, а не один ниже

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

+0

Хорошо, я понимаю, что вы имеете в виду, я пытался сравнить яблоки с апельсинами. на первый взгляд казалось, что код делал то же самое, но они не были. поэтому я был смущен благодарю вас за разъяснения. – power5000

+0

@ power5000, что-то не так с ним сейчас? – ChiefTwoPencils

+0

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

Смежные вопросы