Я не могу вычесть одну переменную из другой - PullRequest
1 голос
/ 03 ноября 2011

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

<head>
    <script>
    var playerHealth=100;
    var enemyHealth=100;
    var strength=10;

    function begin(){
        document.getElementById('playerhealth').innerHTML = playerHealth;
        document.getElementById('enemyhealth').innerHTML = enemyHealth;
        }

    function hitEnemy(){
        var attack=Math.floor(Math.random()*20 + strength);
        var enemyHealth = enemyHealth - attack;
        document.getElementById('damage').innerHTML = attack;   
        document.getElementById('enemyhealth').innerHTML = enemyHealth;
        }

    </script>
</head>
<body onload="begin()">
        <input type="button" name="doit" id="doit" value="Attack!" onclick="hitEnemy();">
        <br /><span>playerhealth</span>
        <div style="font-size:3em;" id="playerhealth"></div>
        <span>enemyhealth</span>
        <div style="font-size:3em;" id="enemyhealth"></div>
        <br />
        <span>You Did:</span><span style="font-size:3em;" id="damage"></span><span>damage</span>

</body>

Это может иметь какое-то отношение к тому, чтобы не быть уверенным, что они целые, но я не уверен, как это сделать.

Ответы [ 3 ]

3 голосов
/ 03 ноября 2011

потому что вы переопределяете вражескую переменную здоровья внутри функции hitEnemy.Удалите переменную, чтобы исправить это.

 function hitEnemy(){
        var attack=Math.floor(Math.random()*20 + strength);
        enemyHealth = enemyHealth - attack;
        document.getElementById('damage').innerHTML = attack;   
        document.getElementById('enemyhealth').innerHTML = enemyHealth;
        }
3 голосов
/ 03 ноября 2011

Вот самая насущная проблема.Вам необходимо удалить var из enemyHealth декалярации внутри hitEnemy.Это создает новую переменную с именем enemyHealth intsead модификации первой.

enemyHealth = enemyHealth - parseFloat(attack);

Кроме того, вы должны звонить begin в конце каждого hitEnemy звонка, чтобы обновить счет.Вот рабочая версия кода

0 голосов
/ 03 ноября 2011

Добавить к ответу Джареда ...

var enemyHealth = enemyHealth - attack;

- сокращение от ...

var enemyHealth;
enemyHealth = enemyHealth - attack;

Во-первых, enemyHealth определяется как undefined* в рамкахhitEnemy.Теперь существует две переменные с именем enemyHealth, но внутренняя "затеняет" внешнюю, делая невозможным обращение к внешней.Итак, attack вычитается из undefined, производя NaN.

*, что звучит бессмысленно, я знаю

...