Zły parametr w obiekcie.

Odpowiedz Nowy wątek
2019-08-13 16:25
0

Witam, nie do końca ogarnąłem jak użyć parametru, gdzie... Dobra może zademonstruje o co chodzi:
Tu cały kod ale można ominąć raczej:


<?php
// jestem głupi, teraz statystki na pewno zrobie w tablicy z key values, ale jak tak zacząłem to tak skończe :D

class Unit {

    public $name;
    public $hp;
    public $armor1;
    public $armor2;
    public $dmg1;
    public $dmg2;
    public $stat1;
    public $stat2;
    public $stat3;

    public function __construct($name, $hp, $armor1, $armor2, $dmg1, $dmg2, $stat1, $stat2, $stat3){
        $this->name = $name;
        $this->hp = $hp;
        $this->armor1 = $armor1;
        $this->armor2 = $armor2;
        $this->dmg1 = $dmg1;
        $this->stat1 = $stat1;
        $this->stat2 = $stat2;
        $this->stat3 = $stat3;
    }
}

class myHero extends Unit {

    public $avaiblePoints = 1; //przykładowo

    public function __construct($name, $hp, $armor1, $armor2, $dmg1, $dmg2, $stat1, $stat2, $stat3, $avaiblePoints){
        parent::__construct($name, $hp, $armor1, $armor2, $dmg1, $dmg2, $stat1, $stat2, $stat3);
        $this->avaiblePoints = $avaiblePoints;

    function addStat($stat_name){ //dobrze to?
        if($this->avaiblePoints >= 1){
            $stat_name++;
            $this->avaiblePoints--;

        }
    }

    }
}

$Hero = new myHero("xd", 100, 90, 40, 50, 60,  50, 20, 25, 1);

//przywołam teraz bohatera, moge później, ale wole mieć pewność że attackIt() niżej zadziała

class Monster extends Unit {

    public $rewardPoints = 0; //nie wiem czy to musze już przydzielać

    public function __construct($name, $hp, $armor1, $armor2, $dmg1, $dmg2, $stat1, $stat2, $stat3){ //później sobie te statystki odpuszcze u monsters
        parent::__construct($name, $hp, $armor1, $armor2, $dmg1, $dmg2, $stat1, $stat2, $stat3);

}

    function attackIt(){
        $i = 1;
        $revertHP = $Hero->hp;
        while($i > 0) { //nie wiem czy tak sie robi :D
            $dmgDone = rand($Hero->dmg1, $Hero-dmg2); 
            $dmgReceived = rand($this->dmg1, $this->dmg2);
            $this->hp =- $dmgDone;
            echo "Zadałeś" . $dmgDone . "obrażeń";
            $Hero->hp =- $dmgReceived;
            echo "Otrzymałeś" . $dmgReceived . "obrażeń";
            if ($this->hp < 0){
                echo "Wygrałeś!";
                $Hero->avaiblePoints = $this->rewardPoints;
                $Hero->hp = $revertHP;
                break;
                }
            elseif ($Hero->hp < 0) {
                echo "Przegrałeś!";
                $Hero->hp = $revertHP;
                break;
            }

            }

        }
    }

//Hero->addStat()
echo $Hero->name;
$Hero->addStat($Hero->stat1);
echo $Hero->stat1;

?>

Chodzi konkretnie o te fragmenty:


class myHero extends Unit {

    public $avaiblePoints = 1; for example

    public function __construct($name, $hp, $armor1, $armor2, $dmg1, $dmg2, $stat1, $stat2, $stat3, $avaiblePoints){
        parent::__construct($name, $hp, $armor1, $armor2, $dmg1, $dmg2, $stat1, $stat2, $stat3);
        $this->avaiblePoints = $avaiblePoints;
[....]
    function addStat($stat_name){  // O TUTAJ - jak tutaj sie odwołać, 
        if($this->avaiblePoints >= 1){
            $stat_name++;
            $this->avaiblePoints--;

[...]

$Hero->addStat($Hero->stat1);  //???

Proszę bez linczu :D

edytowany 2x, ostatnio: kakaisback, 2019-08-13 16:27

Pozostało 580 znaków

2019-08-13 17:03
0

przekazałeś kopię wartości do metody po czym ją zwiększyłeś o jeden ale na zewnątrz dalej jest poprzednia wartość, jeśli chcesz ją zmienić rzeczywiście to albo użyj referencji albo zwróć nową wartość.

Pozostało 580 znaków

2019-08-13 19:41
0

Call to undefined method myHero::addStat() <- nie ważne jaki paramtr podam.
kiedy ja dobrze z tego co widzę użyłem metody, sam już sie pogubiłem.

[...]
$Hero->addStat();
[...]
class myHero extends Unit {

    public $avaiblePoints = 1; //przykładowo

    public function __construct($name, $hp, $armor1, $armor2, $dmg1, $dmg2, $stat1, $stat2, $stat3, $avaiblePoints){
        parent::__construct($name, $hp, $armor1, $armor2, $dmg1, $dmg2, $stat1, $stat2, $stat3);
        $this->avaiblePoints = $avaiblePoints;

    function addStat($stat_name){ 
        if($this->avaiblePoints >= 1){
            $stat_name++;
            $this->avaiblePoints--;
            //return $stat_name; tak? wtedy na końcu dałbym żeby sprawdzić: $someVar = $Hero->addStat(stat1); $Hero->stat1 = $someVar; echo  $Hero->stat1;

        }
    }

Chciałem to zrobić, że zwróconą wartością, albo coś takiego, by zmieniała się w referencji, ale nie moge tego tu ogarnąć. Tzn, żeby przed $stat_name (nie parametr, to w metodzie) można było dodać THIS->, żeby od razu się zmieniało rzeczywiście.

edytowany 1x, ostatnio: kakaisback, 2019-08-13 19:42

Pozostało 580 znaków

2019-08-14 07:36

Zjadłeś jeden nawias }


class myHero extends Unit {

    public $avaiblePoints = 1; //przykładowo

    public function __construct($name, $hp, $armor1, $armor2, $dmg1, $dmg2, $stat1, $stat2, $stat3, $avaiblePoints){
        parent::__construct($name, $hp, $armor1, $armor2, $dmg1, $dmg2, $stat1, $stat2, $stat3);
        $this->avaiblePoints = $avaiblePoints;
      } // o tutaj powinno być

    function addStat($stat_name){ //dobrze to?
        if($this->avaiblePoints >= 1){
            $stat_name++;
            $this->avaiblePoints--;

        }
    }
}

Pozostało 580 znaków

2019-08-14 16:06
0

Nie wiem czemu nie działało, więc zrobiłem to tak:

$stat1Id = 1;
$stat2Id = 2;
$stat3Id = 3;
    function addStat($statID){ 
        if($this->avaiblePoints >= 1){
            if($statID == 1){
                $this->stat1++;
//$avaiblePoints--; w każdym if'ie, ale nie moge dobrze kodu wkleić idk why;/
            }
            elseif($statID == 2){
                $this->stat2++;
            }
            elseif($statID == 3){
                $this->stat3++;
            }
            }
        }
            }
        }
$Hero->addStat($stat1Id);
echo $Hero->stat1;

I takie coś działa :D.

edytowany 1x, ostatnio: kakaisback, 2019-08-14 16:19

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0