Autor Zpráva
Alastor_Kopal
Profil
sobor pro vypití lektvaru
    elseif ($zivoty > "$maximum") {
    else
    {
      echo"<div style=\"color: red;\">Vypili jste lektvar zdraví (+10 životů)</div>";
      // uložíme změny do databáze
      if (isset($_SESSION["id"])) mysql_query ("update dobro set zdravi = '$zivoty',$misto = 'http://www.magic-quest.kx.cz/veci/nic.gif' where id='$id'", $connection);
$_SESSION['zdravi'] = "$zivoty";
include'ulozzdravi.php';
(tato sekce uloží změny do databáze a aktualizuje SESSION[zivoty]
a ulozzdravi.php ulozi zase to že v tom políčku kde je ten lektvar bude prázdno)

ulozzdravi.php
<?php
if($misto == "misto1"){
$_SESSION['misto1'] = "http://www.magic-quest.kx.cz/veci/nic.gif";}
elseif($misto == "misto2"){
$_SESSION['misto2'] = "http://www.magic-quest.kx.cz/veci/nic.gif";}
elseif($misto == "misto3"){
$_SESSION['misto3'] = "http://www.magic-quest.kx.cz/veci/nic.gif";}
elseif($misto == "misto4"){
$_SESSION['misto4'] = "http://www.magic-quest.kx.cz/veci/nic.gif";}
elseif($misto = "misto5"){
$_SESSION['misto5'] = "http://www.magic-quest.kx.cz/veci/nic.gif";}
elseif($misto == "misto6"){
$_SESSION['misto6'] = "http://www.magic-quest.kx.cz/veci/nic.gif";}
elseif($misto == "misto7"){
$_SESSION['misto7'] = "http://www.magic-quest.kx.cz/veci/nic.gif";}
elseif($misto == "misto8"){
$_SESSION['misto8'] = "http://www.magic-quest.kx.cz/veci/nic.gif";}
elseif($misto == "misto9"){
$_SESSION['misto9'] = "http://www.magic-quest.kx.cz/veci/nic.gif";}
?>


Databáze v pohodě - ukazatel životů - vpohodě ale SESSION[misto] - ten lektvar se oddělá jen když je v políčku (misto1) ale v ostatních ne celý kód prvního souboru je na http://www.magic-quest.kx.cz/hra/zdravi10.txt
tiso
Profil
Alastor_Kopal - miesto toho, aby si sa tu stále vypytoval na problémy pri programovaní hry, na čo nemáš dostatočné znalosti, mal by si sa naučiť základy programovania a samostatnosti.
fajzen
Profil
$misto = "misto1"
je priradenie
$misto == "misto1"
je porovnanie
Alastor_Kopal
Profil
Je aha promiňte
Nox
Profil
Alastor_Kopal
Hlavně si čti co napsal tiso a to do té doby, než pochopíš že má pravdu

Mj. takováto věc by se dala napsat třeba krátce do
if( preg_match("/misto\d+/",$misto) ){
  $_SESSION[$misto] = "...";
}

(případně v tvém případě asi rozepsat podmínku)
jelikož snad sám vidíš, jak moc se tam ty věci opakují
imploder
Profil
Mj. takováto věc by se dala napsat třeba krátce do 1
2
3

if( preg_match("/misto\d/",$misto) ){
$_SESSION[$misto] = "...";
}


jj, je to rozkopírovaný kód - 10x to samé. Když chceš něco změnit, musíš to udělat 10krát pro každou věc. To je špatně.
Měl bys to řešit jako pole. Tak nebude problém rozšířit inventář třeba na 50 míst, aniž bys musel nějak natahovat kód. Takhle to jde, když si chceš něco rychle vyzkoušet (možná tenhle případ, nevím), ale neměl bys to tak nechávat, byly by s tím jenom problémy. Taky na věc bys neměl odkazovat celou URL včetně domény, pak nepůjde hra bez úprav přesunout jinam. Jméno souboru bohatě stačí.

třeba takhle nějak by se daly lektvary ukládat (v proměnné $misto index inventáře, $pocet_mist celkový počet míst v inventáři, kam chceš lektvar uložit):
function uloz_vec($misto, $vec) {
  for($i=$misto; $i<($misto+$pocet_mist); $i++) { // vyhledání nejbližšího volného místa směrem doprava
    if($_SESSION["inventar"][$i%$pocet_mist] == "") { // místo je prázdné
      $_SESSION["inventar"][$i%$pocet_mist] = $vec; // uloží věc
      return ($i%$pocet_mist); // a vrátí pozici, kam byla uložena (pozn.: příkaz return ukončuje funkci)
    }
  }
  return -1; // nenašlo se místo, tak se vrátí chyba
}

$vysledek = uloz_vec(0, "lektvarxxx"); 
if($vysledek == -1) {
// v inventáři už nebylo místo
}
else {
// v pořádku, věc je v $_SESSION["inventar"][$vysledek]
}


Ty asi řešíš něco jiného, prostě vymazání místa po vypitém lektvaru, to by bylo:
$_SESSION["inventar"][$misto] = "";


Třeba tak nějak, můžeš to mít samozřejmě udělané jinak. Zkus si třeba nejdřív udělat návrh na papír, jak chceš mít věci ve hře uspořádané a co se s nima bude dělat.

P.S.: čísla se nepíšou do uvozovek, v
   elseif ($zivoty > "$maximum") {
je máš navíc.


EDIT: tak jo, for jsem předělal. pro Alastora: operátor % je modulo, tedy zbytek po celočíselném dělení; tedy např. 8%5 dá výsledek 3. Zajišťuje, že místo přetečení za konec pole se pokračuje na jeho začátku - prostě takové kruhové procházení.
Ten kód stejně řeší něco jiného (zařazení předmětu - např. lektvaru - na první volné místo od určité pozice), takže je beztak trochu off-topic. Ale třeba se taková funkce bude hodit.
imploder
Profil
aha, určité druhy lektvarů jsou na tomto fóru zakázané :)
no to je vlastně jedno, prostě nějaké jméno lektvaru
imploder
Profil
v tom for()u mám chybu (neprovedl by se), tak to radši udělej nějak podle sebe
tiso
Profil
imploder - ako prihlásený užívateľ môžeš editovať svoj príspevok (myslím, že 24 hodín), takže tú chybu v skripte si môžeš opraviť.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: