Odčítání od proměnné nefunguje – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Odčítání od proměnné nefunguje – PHP – Fórum – Programujte.comOdčítání od proměnné nefunguje – PHP – Fórum – Programujte.com

 

novkar
~ Anonymní uživatel
2 příspěvky
29. 5. 2019   #1
-
0
-

Ahoj, snažím se vytvořit stránku se soubojovými prvky a už nevím kde je chyba.

Potřebuju aby se mi proměnné $hp1 a $hp2 odčítaly. Nevím proč klasické $x=$x-$y nefunguje.

Napadlo mě použít SESSION, ale stále nedochází k odčítání. Snad mi poradíte, díky.

Tady je kod:

// prohra

function prohra($hp1,$dmg1) {
$hp1=$hp1-$dmg1;
echo "Protivník ti ubral za: ".$dmg1;
echo "<br>";
echo "Tvoje HP: ".$hp1;
if ($hp1<=0) {
echo "<br>";
echo "Umřel jsi :)))";
konec1($hp1);
}
}

// vyhra

function vyhra($hp2,$dmg) {
$hp2=$hp2-$dmg;
echo "Ubral jsi protivníkovi za: ".$dmg;
echo "<br>";
echo "Protivníkovi HP: ".$hp2;
if ($hp2<=0) {
echo "<br>";
echo "Porazil jsi protivníka!";
konec2($hp2);
}
}
 

// rozhodnutí co se stane

$c=mt_rand(1,12);
if ($c<="4") {
prohra($_SESSION["hp1"],$_SESSION["dmg1"]);
} elseif ($c>=5 and $c<=8) {
nic();
}
elseif ($c>="9") {
vyhra($_SESSION["hp2"],$_SESSION["dmg"]);
}
break;

 

($dmg a $dmg1 jsou načteny a jdou použít)

Nahlásit jako SPAM
IP: 83.208.194.–
gna
~ Anonymní uživatel
1891 příspěvků
30. 5. 2019   #2
-
0
-

Parametry se funkci předávají hodnotou nebo odkazem. Pokud použiješ odkaz (referenci) deklarovaný pomocí &, tak se změnou hodnoty parametru bude měnit hodnota původní proměnné.

function prohra(&$hp1,$dmg1) {
Nahlásit jako SPAM
IP: 213.211.51.–
peter
~ Anonymní uživatel
4014 příspěvků
30. 5. 2019   #3
-
0
-

Pridal jsem tam par komentaru, aby bylo videt, ktery stav nastal a a ty hp uvnitr prejmenoval. Ale, podle meho to normalne odcita.
Samozrejme, problem by mohlo byt, ze ty to sice odectes, ale vysledek nechas uvnitr. Takze, bud je treba pouzit odkaz viz gna a nebo nejak sikovne return.

<?php
function konec1($hp) {echo 'konec1';}	// pridano
function konec2($hp) {echo 'konec2';}	// pridano
function nic() {echo 'nic';}	// pridano


// prohra

function prohra($hp, $dmg) {	// vnitrni promenne jsem prejmenoval na hp a dmg pro zjednoduseni
echo "Prohra - hp, dmg = ".$hp.', '.$dmg.'<br>';	// pridano
$hp = $hp - $dmg;
echo "Protivník ti ubral za: ".$dmg;
echo "<br>";
echo "Tvoje HP: ".$hp;
if ($hp<=0) {
echo "<br>";
echo "Umřel jsi :)))";
konec1($hp);
}
}

// vyhra

function vyhra($hp, $dmg) {	// vnitrni promenne jsem prejmenoval na hp a dmg pro zjednoduseni
echo "Vyhra - hp, dmg = ".$hp.', '.$dmg.'<br>';	// pridano
$hp = $hp - $dmg;
echo "Ubral jsi protivníkovi za: ".$dmg;
echo "<br>";
echo "HP2: ".$hp;
if ($hp<=0) {
echo "<br>";
echo "Porazil jsi protivníka!";
konec2($hp);
}
}
 

// rozhodnutí co se stane

$c = mt_rand(1, 12);
echo "random = $c<br>";	// pridano
if ($c<=4) {	// upraveno
//prohra($_SESSION["hp1"],$_SESSION["dmg1"]);
prohra(10, 4);	// upraveno
} elseif ($c>=5 and $c<=8) {
nic();
}
elseif ($c>=9) {	// upraveno
//vyhra($_SESSION["hp2"],$_SESSION["dmg"]);
vyhra(15, 1);	// upraveno
}
//break;	// odstraneno

?>
Nahlásit jako SPAM
IP: 2001:718:2601:258:4dbc:3838:5a25:f2e0...–
Kit+15
Guru
30. 5. 2019   #4
-
0
-

#1 novkar
Předávání parametrů odkazem se v zájmu zachování duševního zdraví už nedělá. Použij return s hodnotou nebo přejdi na objekty.

Nahlásit jako SPAM
IP: 37.188.183.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
novkar
~ Anonymní uživatel
2 příspěvky
30. 5. 2019   #5
-
0
-

#2 gna
Díky moc, "&" to vyřešilo

Nahlásit jako SPAM
IP: 77.240.176.–
Kit+15
Guru
30. 5. 2019   #6
-
0
-

#5 novkar
Vítej v pekle.

Nahlásit jako SPAM
IP: 37.48.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
peter
~ Anonymní uživatel
4014 příspěvků
31. 5. 2019   #7
-
0
-

#4 Kit
Mnooo, jsou vyjimecne pripady, kdy to ma smysl, treba parser nebo, kdyz potrebujes usporit pamet.
Ale souhlas, ze u ulohy do skoly pro par bajtu pameti to prilis smysl nema :) Ale, v tom kodu, jak ho ma napsany, mi to prijde jako elegantin reseni bez nutnosti ho cely prepisovat. To zas jako u gna ocenuji.

Nahlásit jako SPAM
IP: 2001:718:2601:258:4dbc:3838:5a25:f2e0...–
Kit+15
Guru
31. 5. 2019   #8
-
0
-

#7 peter
Jenže v praxi s tím neuspěje, s tímto by ho z práce brzy vyhodili. PHP není C, aby se v něm dělaly takové nebezpečné akce. Úspora paměti se nekoná, schválně si to vyzkoušej.

Řešením by bylo spravovat to jako objekt.

Nahlásit jako SPAM
IP: 81.19.3.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 43 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý