2014-02-16 3 views
0

Итак, некоторая справочная информация, я новичок в программировании и до сих пор училась, поэтому я приношу свои извинения за мои тривиальные ошибки. Я делаю свою собственную игру на основе текста только для дальнейшей практики и т.д.while цикл не заканчивается, когда требуется

Вот ссылка на весь на раздаточном для больше контекста: https://www.dropbox.com/sh/uxy7vafzt3fwikf/B-FQ3VXfsR

я в настоящее время пытаюсь реализовать боевую систему для моей игры, и Я сталкиваюсь с проблемой последовательности боя, которая не заканчивается, когда это необходимо. «Боевая последовательность» представляет собой цикл в то время следующим образом:

public void startCombat() 
{ 

    inCombat = true; 

    while(inCombat != false)// && herohealth > 0 && monsterhealth > 0) 
    { 
     checkAlive(); 
     heroHitMonster(); 
     checkAlive(); 
     monsterHitHero();   
    }   

    attackinghero.setHeroHealth(herohealth); 
    attackedmonster.setMonsterHealth(monsterhealth); 
} 

где метод checkAlive() выглядит следующим образом:

public void checkAlive() 
{  
    if(herohealth <= 0) 
    {    
     System.out.println("You have died."); 
     attackinghero.clearInventory(); 
     inCombat = false; 

    } 

    else if(monsterhealth <= 0) 
    {   
     System.out.println("You have killed the "+attackedmonster.getmonsterName()+"!"); 
     inCombat = false; 
     combatlocation.removeMonster(attackedmonster.getmonsterName()); 
    }  

    else 
    { 
     // 
    } 
} 

Я пытаюсь заставить его закончить боевую последовательность, когда либо «hero» или «monster» health становится < = 0, однако в данный момент он заканчивает цикл while и, следовательно, производит результат попадания героя, даже если он убил монстра в своем первом попадании.

Это то, что в настоящее время «печатается на экране»

крыса теряет 5 здоровья! Вы убили крысу!

Герой теряет 1 здоровье!

Любая помощь очень ценится, спасибо заранее.

+0

не ваш ответ, но хорошая практика программирования: использование в то время как (inCombat) вместо того, чтобы время (inCombat ! = false). – Batty

+0

Вы получаете сообщения «Ты умер» и/или «Ты убил ..»? Также, если вы на 100% подтвердили, что цикл не выходит? –

+0

Это не решение, но, возможно, делает ваш код менее загадочным. Вы должны знать, что 'if (x! = False)' совпадает с 'if (x == true)', который является таким же, как 'if (x)' поэтому, возможно, измените 'while (inCombat! = False)' to 'while (inCombat)'? – Pshemo

ответ

0

checkAlive не должен быть недействительным, он должен быть логическим и должен возвращаться inCombat, а в вашей функции startCombat вы должны делать inCombat = checkAlive();

0

Вы должны закончить цикл в конце checkAlive вместо изменения логического значения. Если вы убили монстра при первом ударе, вы все равно выполняете монстрHitHero() даже, если монстр убит. Функция удара должна быть обусловлена ​​жизнью героев/монстров.

0

Цикл while будет оцениваться только после обоих действий. Вам нужен способ разбить цикл после того, как герой попадает в монстра. Я бы лично изменить checkAlive метода возвращает логическое значение, и положить методы хита, если заявления в то время цикла:

if(checkAlive()) 
{ 
    heroHitMonster(); 
} 
if(checkAlive()) 
{ 
    monsterHitHero(); 
} 
Смежные вопросы