2013-09-18 4 views
-3

У меня возникают проблемы с этим кодом, если кто-то может указать мне в правильном направлении, я был бы очень благодарен. Застряли на нем в течение нескольких дней!Как заставить корабль перестать двигаться, когда он выходит за пределы?

В основном я пытаюсь остановить движение корабля, когда он достиг границы. Граница 6 и -6.

Вот код. Спасибо :)

public void move (int direction) //if position exceeds 5 then playership will 
           //no long move in that direction. 
{ 
    if (position > 5) 
    { 
     .... ?? What to write here? 

    } 
    else if (position < -5) 
    { 
     .... ?? What to write here? 

    } 

    position = position + direction; 
    gun1.move(direction); 
    gun2.move(direction); 

} 

ответ

2

Вопрос зависит. Если вы хотите, чтобы остановить объект, когда он достигает своей границы, то некоторые вещи, как ...

// Move first 
position = position + direction; 

// Boundary check second... 
if (position > 5) 
{ 
    position = 5; 
} 
else if (position < -5) 
{ 
    position = -5; 
} 

gun1.move(direction); 
gun2.move(direction); 

Если вы хотите «подпрыгивать» стен ...

// Move first 
position = position + direction; 

// Boundary check second... 
if (position > 5) 
{ 
    position = 5; 
    direction *= -1 
} 
else if (position < -5) 
{ 
    position = -5; 
    direction *= -1 
} 

gun1.move(direction); 
gun2.move(direction); 

Может работать - Трудно сказать, без каких-либо больше контекста ...

+0

Спасибо, это сработало :) И в выражении if я просто положил: position = 5; и position = -5; Спасибо: D – user2790104

2

Это будет держать игрока на границе, даже если он пытается выйти из границы

public void move (int direction) //if position exceeds 5 then playership will 
           //no long move in that direction. 
{ 
    if (position > 5) 
    { 
     position = 5; 

    } 
    else if (position < -5) 
    { 
     position = -5; 

    } 

    position = position + direction; 
    gun1.move(direction); 
    gun2.move(direction); 

} 
+0

Единственная проблема заключается в том, что движение затем применяется после проверки границы, что означает, что объект может выйти за пределы по крайней мере за один цикл ... – MadProgrammer

+0

@MadProgrammer - я думаю, что этот ответ предполагает, что границы - от -6 до 6 _inclusive_, тогда как вы принимаете _exclusive_. ОП не совсем ясно, является ли «достижением» отношение <или ≤. – DaoWen

+0

Точка, считая направление +/- 1 ... – MadProgrammer

0

Ваш метод должен передать статус (перемещенный или не перемещенный) в вызывающий код. Вы можете сделать это 2 способами:

1 возвращающегося кода состояния

public int move (int direction) //if position exceeds 5 then playership will 
           //no long move in that direction. 
{ 
    if (position > 5 || position <-5) 
    { 
     return -1; //status code for no movement 

    } 

2 бросает исключение, когда Дэ судно не может двигаться

public void move (int direction) throws InvalidArgumentException//if position exceeds 5 then playership will 
           //no long move in that direction. 
{ 
    if (position > 5 || position <-5) 
    { 
     throw new InvalidArgumentException("Cannot move!"); //status code for no movement 

    } 

вызывающий код может обрабатывать statuscode/exception, как он сочтет нужным.

+0

Почему? Хотя я не буду спорить с идеей, какой у вас контекст, как работает двигатель OP? – MadProgrammer

+0

Исходя из предположения, что API move() и вызывающий код не тесно связаны. И если они такие, их не должно быть. 'move()' должен вести себя стандартным образом, независимо от того, как он используется. Вы не согласны? – rocketboy

+0

Как я уже сказал, я не согласен с этой идеей, просто как это поможет OP ответить на их вопрос;) – MadProgrammer

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