VasilijZ
VasilijZ

Reputation: 35

Php function call from another function

I am trying to make a text game in PHP but i have problem since i am programing in php for few days. I need to call function attack (I need $_mainAttack since it is combination of $_baseAttack and special attack) from defend function so i can calculate the health loss I have placed -5 just to see if it is working..

Also in health i need attack to be able to lower hp so i could calculate the hp loss. My do while loop is wrong and i need help to make it functional. I want when health goes lower than 0 to exit the loop. When it exits the loop it will print game over. I am stuck in endless loop and i have no idea how to fix this.

This is index.php:

<?php

include 'Duel.php';

$duel = new Duel();
$duel->attack();
$duel->defend();

?>

This is my class duel:

<?php

class Duel{

public $_maxHealth = 20;
public $_currentHealth;
public $_baseAttack, $_specialAttack, $_mainAttack;
public $_specialChance, $deflectChance;
public $_defense;

function __construct()
{
    echo 'begining of attack <br/>';
}


function attack()
{

    $_specialChance = rand(0, 20);

    $_specialAttack = 0;

    if ($_specialChance < 10) {
        $_specialAttack = 0;
    } elseif ($_specialChance < 15) {
        $_specialAttack = (int) rand(0, 5);
    } elseif ($_specialChance <= 20) {
        $_specialAttack = (int) rand(5, 10);
    }
    $_baseAttack = rand(1, 6);
    $_mainAttack = $_baseAttack + $_specialAttack;

    echo "Base attack is $_baseAttack:  and special attack is : $_specialAttack  attack is : $_mainAttack<br/>";        

}



function defend()
{
    $_maxHealth = 20;
    do{
        $deflectChance = rand(1, 10);
        $deflect = 0;

        if ($deflectChance < 5) {
             $deflect = 0;
             echo 'attack cannot be deflected';
        } 
        elseif ($deflectChance > 5) {
            $deflect = (int) rand(0, 3);
            echo "attack is deflected for {$deflect} damage";
        }

        $_currentHealth = $_maxHealth + $deflect - 5;

        echo "<br/>health is {$_currentHealth} <br/>";
    }while($_currentHealth > 0);
     if($_currentHealth > 0) echo "Game over";
}



} //end of class

Upvotes: 0

Views: 109

Answers (3)

Niroj Maharjan
Niroj Maharjan

Reputation: 99

You can try returning the main attack variable from the attack function and simply call it on the defend function.

Upvotes: 1

Furgas
Furgas

Reputation: 2844

You are always calculating $_currentHealth based on $_maxHealth, not the previous $_currentHealth.

Add before the loop:

$_currentHealth = $_maxHealth;

And change $_currentHealth = $_maxHealth + $deflect - 5; to:

$_currentHealth = $_currentHealth + $deflect - 5;

Upvotes: 1

user4417327
user4417327

Reputation:

you are calculation $_mainAttack but doesn't subtract it from your health, therefore your player can't die and you end within an endless loop.

Upvotes: 0

Related Questions