Arhn - архитектура программирования

в то время как цикл не работает должным образом

Результат примерно такой:

  1. Вы нанесли врагу 8 урона, у врага осталось 92 хп.
  2. Враг нанес вам 8 урона, у вас осталось 86 хп.
  3. Вы нанесли врагу 5 единиц урона, у врага осталось 81 хп.
  4. Враг нанес вам 11 урона, у вас осталось 72 хп.
  5. Вы нанесли врагу 12 урона, у врага осталось 67 хп.
  6. Враг нанес вам 7 урона, у вас осталось 60 хп.
  7. Вы нанесли врагу 13 урона, у врага осталось 40 хп.
  8. Враг нанес вам 11 урона, у вас осталось 32 хп.
  9. Вы нанесли врагу 2 урона, у врага осталось 33 хп.
  10. Враг нанес вам 15 урона, у вас осталось 16 хп.
  11. Вы наносите врагу 15 единиц урона, у врага осталось 2 хп.
  12. Враг нанес вам 17 урона, у вас осталось -11 хп.

Вы умерли: -11 хп Враг победил!

HP врага: -8 Вы победили! Вы получаете 50 опыта!

У обоих по 100 л.с., и, как вы можете видеть в строке 2, пропущена одна «петля», так как противник нанес 8 урона и осталось 86 л.с.

Также как остановить цикл, когда один из них умирает, чтобы оба не могли умереть одновременно? Так что, если кто-то умирает, петля останавливается и определяется победитель.

Есть ли лучший способ определить начало от случайного?

<?php

$p_hp = 100;
$p_atk = 20;
$p_defence = 5;

$m_hp = 100;
$m_atk = 20;
$m_defence = 5;

if ($p_hp > 0) {

    $turn = rand(0,1);
    $hitnr = 0;

    while (($p_hp >= 0) && ($m_hp >= 0)) {

        $turn--;
        $hitnr++;

        $enemydef = $p_atk - $m_defence / 2;
        $my_damage = rand(1, $enemydef);

        $playerdef = $m_atk - $p_defence / 2;
        $enemy_damage = rand(1, $playerdef);

        $p_hp = $p_hp - $enemy_damage;
        $m_hp = $m_hp - $my_damage;

        // Player turn
        if ($turn % 2 == 0) {
            echo "<b>".$hitnr.".</b> Enemy hit you for  <font color='red'><b>".$enemy_damage . "</b></font> damage you have <b>".$p_hp." hp</b> left<br>";    

        // Monster turn    
        } else {
            echo "<b>".$hitnr.".</b> You hit enemy for  <font color='green'><b>".$my_damage . "</b></font> damage enemy has <b>".$m_hp." hp</b> left<br>";
        }

        if ($p_hp <= 0) {
            echo "<br>You died: ".$p_hp." hp<br><font color='red'><b>Enemy wins!</b></font>";
         }

        if ($m_hp <= 0) {
            echo "<br>Enemy hp is: ".$m_hp."<br><font color='green'><b>You win! You gain 50 exp!</b></font>";

        }
    }
} else {
    echo "You are dead. <a href='hospital.php'>Go to the hospital!</a>";
}

?>

  • Если ход игрока - то у большинства хп должно уменьшаться и наоборот, теперь за каждый ход вы уменьшаете хп обоих персонажей. 18.10.2014
  • Проверьте обе точки попадания на наличие отрицательных чисел, если одно из них соответствует истине, то прервите утверждение if ($EnemyHealth < 0 OR $PlayerHealth < 0){ break; } 18.10.2014

Ответы:


1

Если монстры (или игроки) не могут контратаковать, должно уменьшаться только HP цели:

$p_hp = 100;
$p_atk = 20;
$p_defence = 5;

$m_hp = 100;
$m_atk = 20;
$m_defence = 5;

if ($p_hp >= 0) {

    $turn = rand(0,1);
    $hitnr = 0;

    while (($p_hp >= 0) && ($m_hp >= 0)) {

        $turn--;
        $hitnr++;

        $enemydef = $p_atk - $m_defence / 2;
        $my_damage = rand(1, $enemydef);

        $playerdef = $m_atk - $p_defence / 2;
        $enemy_damage = rand(1, $playerdef);

        // Monster turn
        if ($turn % 2 == 0) {
            $p_hp = $p_hp - $enemy_damage;
            echo "<b>".$hitnr.".</b> Enemy hit you for  <font color='red'><b>".$enemy_damage . "</b></font> damage you have <b>".$p_hp." hp</b> left<br>";    

        // Player turn    
        } else {
            $m_hp = $m_hp - $my_damage;
            echo "<b>".$hitnr.".</b> You hit enemy for  <font color='green'><b>".$my_damage . "</b></font> damage enemy has <b>".$m_hp." hp</b> left<br>";
        }

        if ($p_hp <= 0) {
            echo "<br>You died: ".$p_hp." hp<br><font color='red'><b>Enemy wins!</b></font>";
         }

        if ($m_hp <= 0) {
            echo "<br>Enemy hp is: ".$m_hp."<br><font color='green'><b>You win! You gain 50 exp!</b></font>";

        }
    }
} else {
    echo "You are dead. <a href='hospital.php'>Go to the hospital!</a>";
}

?>
18.10.2014
  • Это помогло, но мне пришлось изменить while (($p_hp ›= 0) && ($m_hp ›= 0)) { на while (($p_hp › 0) && ($m_hp › 0)) { Потому что, если кто-то нажмет 0, это зациклился бы 3 раза так Вы умерли: 0 хп Враг победил!32. Вы нанесли врагу 5 урона, у врага осталось 4 хп Вы умерли: 0 хп Враг победил!33. Враг нанес вам 13 урона, у вас осталось -13 хп. Вы умерли: -13 хп. Враг победил! 18.10.2014
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..