Autor Zpráva
Alastor_Kopal
Profil
Nevim jak nazvat tento topic

<?php
session_start();
include'db.php';

$smer = $_SESSION['smer'];
$radek = $_SESSION['radek'];
$sloupec = $_SESSION['sloupec'];
$overeni_lide = MySQL_Query("SELECT * FROM lide WHERE misto=20 and zdravi>0 ");
$overeni_prisery = MySQL_Query("SELECT * FROM potvory WHERE misto=20 and zdravi>0");


if($smer == 1){
$vysledek1 = $sloupec-20;
$vysledek2 = $sloupec-40;
$vysledek3 = $sloupec-60;


// 3

while($overeni_lide2 = MySQL_Fetch_Array($overeni_lide)):
if($radek == $overeni_lide2['radek'] and $vysledek3 == $overeni_lide2['sloupec']){echo $overeni_lide2['obrazek']; $idstojiciho1 = $overeni_lide2['id']; $rasa = 1;} else{}
endwhile;

while($overeni_prisery2 = MySQL_Fetch_Array($overeni_prisery)):
if($radek == $overeni_prisery2['radek'] and $vysledek2 == $overeni_prisery2['sloupec']){echo $overeni_prisery2['obrazek']; $idstojiciho1 = $overeni_prisery2['id']; $rasa = 2;} else{}
endwhile;

// 2

while($overeni_lide2 = MySQL_Fetch_Array($overeni_lide)):
if($radek == $overeni_lide2['radek'] and $vysledek2 == $overeni_lide2['sloupec']){echo $overeni_lide2['obrazek']; $idstojiciho1 = $overeni_lide2['id']; $rasa = 1;} else{}
endwhile;

while($overeni_prisery2 = MySQL_Fetch_Array($overeni_prisery)):
if($radek == $overeni_prisery2['radek'] and $vysledek2 == $overeni_prisery2['sloupec']){echo $overeni_prisery2['obrazek']; $idstojiciho1 = $overeni_prisery2['id']; $rasa = 2;} else{}
endwhile;

// 1

while($overeni_lide2 = MySQL_Fetch_Array($overeni_lide)):
if($radek == $overeni_lide2['radek'] and $vysledek1 == $overeni_lide2['sloupec']){echo $overeni_lide2['obrazek']; $idstojiciho1 = $overeni_lide2['id']; $rasa = 1;} else{}
endwhile;

while($overeni_prisery2 = MySQL_Fetch_Array($overeni_prisery)):
if($radek == $overeni_prisery2['radek'] and $vysledek1 == $overeni_prisery2['sloupec']){echo $overeni_prisery2['obrazek']; $idstojiciho1 = $overeni_prisery2['id']; $rasa = 2;} else{}
endwhile;

if(isset($idstojiciho1)){$stoji1 = $idstojiciho1; $kroku = 1;}

elseif(isset($idstojiciho2)){$stoji1 = $idstojiciho2; $kroku = 2;}

elseif(isset($idstojiciho2)){$stoji1 = $idstojiciho3; $kroku = 3;}

else{$rasa = 0;}
}

?>


Tento soubor by měl fungovat následovně

mám potvory a lidi (každý má svoji tabulku v databázi). každý z nich má polohu zapsanou v čísle dělitelném 20.

tomu scriptu dodám svoji polohu a chci se ho zeptat jestli poblíž někdo nestojí viz $vysledek1 = $sloupec-20; $vysledek1 =$sloupec-20; $vysledek2 = $sloupec-40;

Měl by mi vyplivnout

$rasa = 0 nebo 1 nebo 2 (0 - nikdo 1- člověk 2 - příšera)
$kroku = 1-3 kolik kroku je vzdálen
$stoji1 = databázové id stvoření

je mi blbý psát vám to do diskuse ale trápil jsem se nad tím scriptem dlouho ale neuvedl jsem ho do chodu. Nevíte jak na to ? Děkuji
fuckin
Profil
Alastor_Kopal:
Nevíte jak na to ?
Jak na co? Vždyť jsi ani neuvedl kde je ten problém a co ti nefunguje.

Napiš zde u jakých proměnných je problém, kde dostáváš špatné hodnoty apod.
Alastor_Kopal
Profil
$stoji1
$kroku

zdřejmě to nechce dojít do dolního větvení ř. 48-54

funguje to jen když se vzdálím o dva kroky - tedy 40
$vysledek2 = $sloupec-40;


Běh scriptu - toto by se mělo dít pokud by byl script v pořádku
odečtu od své polohy 20 - tím získám polohu 1 krok menší
(poté 40 a 60)

zkouším jestli na té poloze je člověk. Ne? jedu dál
zkouším jestli na té poloze je příšera. Ne ? jedu dál (tohle je tam 3.)

jestli jsme nic nenašli tak $rasa = 0;

jestli ano shromáždíme informace do proměnných
Konec scriptu
AM_
Profil
Alastor_Kopal:
zdřejmě to nechce dojít do dolního větvení ř. 48-54
když víš, kde je problém, vypiš si tam proměnné, na kterých to závisí. Chyby tohoto druhu si člověk nejlépe opraví sám analýzou toho, co se ve skriptu děje. Lidi tady jsou ochotní ostatním radit, ne ladit.
fuckin
Profil
Znas mnou nejpouzivanejsi funkci var_dump() ?
Alastor_Kopal
Profil
Já potřebuji poradit.

mám ještě ty ověření nějak podmínit ? (40-45)
tiso
Profil
Alastor_Kopal: hrozný algoritmus, hrozný zápis kódu, zbytočné else, hrozné názvy premenných, nesedia ti indexy:
riadok 25 $vysledek2 == má byť asi $vysledek3 ==
riadok 52 $idstojiciho2 má byť asi $idstojiciho3

Ak sa chceš učiť programovať, tak by si mal začať jednoduchšími vecami ako programovať hru. Tvoj popis, čo ten skript má robiť, je zbytočne zložitý, určite to ide jednoduchšie, i nadväzujúca časť. V programovaní treba najskôr rozmýšľať až potom skúšať niečo robiť.
Alastor_Kopal
Profil
Jo - všechno šlo jako po másle - tohle mě celkem vzalo. No nic budu se řídit vašimi radami.

popřemýšlím o tom a pak to zkusím znova
AM_
Profil
Alastor_Kopal:
Já potřebuji poradit.
ne, máš hotový kód a ptáš se, proč ti nefunguje (jedná se zjevně o špatně napsaný algoritmus, a ne nějakou "záludnou" a hlavně konkrétní chybu, kterou se svými znalostmi nechápeš). Tomu, co se musí udělat aby kód fungoval, se říká ladění.
Když už nic jiného, zkus se naučit pracovat v nějakém prostředí, které umí PHP debuggovat (např. netbeans), s možností krokování kódem chyby tohoto typu opravíš raz dva.
Alastor_Kopal
Profil
Jojo měli jste pravdu. Dneska jsem nad tím zapřemýšlel a dešel jsem k lepší syntaxi.

<?php
session_start();
include'db.php';

$smer = $_SESSION['smer'];
$radek = $_SESSION['radek'];
$sloupec = $_SESSION['sloupec'];

$overeni_lide = MySQL_Query("SELECT * FROM lide WHERE misto=20 and zdravi>0 ");
$overeni_lide2 = MySQL_Fetch_Array($overeni_lide);

$overeni_prisery = MySQL_Query("SELECT * FROM potvory WHERE misto=20 and zdravi>0");
$overeni_prisery2 = MySQL_Fetch_Array($overeni_prisery);


if($smer == 1){
$vysledek1 = $sloupec-20;
$vysledek2 = $sloupec-40;
$vysledek3 = $sloupec-60;


// 1

if($radek == $overeni_lide2['radek'] and $vysledek1 == $overeni_lide2['sloupec']){
$rasa = 1;
$idstojiciho = $overeni_lide2['id'];
$kroku = 1;
}

elseif($radek == $overeni_prisery2['radek'] and $vysledek1 == $overeni_prisery2['sloupec']){
$rasa = 2;
$idstojiciho = $overeni_prisery2['id'];
$kroku = 1;
}


// 2

elseif($radek == $overeni_lide2['radek'] and $vysledek2 == $overeni_lide2['sloupec']){
$rasa = 1;
$idstojiciho = $overeni_lide2['id'];
$kroku = 2;
}

elseif($radek == $overeni_prisery2['radek'] and $vysledek2 == $overeni_prisery2['sloupec']){
$rasa = 2;
$idstojiciho = $overeni_prisery2['id'];
$kroku = 2;
}


// 3

elseif($radek == $overeni_lide2['radek'] and $vysledek3 == $overeni_lide2['sloupec']){
$rasa = 1;
$idstojiciho = $overeni_lide2['id'];
$kroku = 3;
}

elseif($radek == $overeni_prisery2['radek'] and $vysledek3 == $overeni_prisery2['sloupec']){
$rasa = 3;
$idstojiciho = $overeni_prisery2['id'];
$kroku = 3;
}

else{$rasa = 0;}
}
?>


myslím že jsem si polepšil. Potovry už fungují ale lide se nezobrazují asi tam mám chybku - no nic budu hledat - děkuji moc všem za radu
tiso
Profil
Alastor_Kopal: nepolepšil... Na riadku 10/13 si vrátiš prvého človeka/potvoru z databázy, ostatných nespracovávaš. Asi preto ti nefungujú tí ľudia. Ak som správne pochopil tak tento skript je len pre jeden smer. Takto chceš spracovávať aj ostatné smery?
Alastor_Kopal
Profil
tiso:
tento skript je len pre jeden smer. Takto chceš spracovávať aj ostatné smery?
Ano - až bude funkční jeden směr tak zprovozním ostatní 3.

Na riadku 10/13 si vrátiš prvého človeka/potvoru z databázy, ostatných nespracovávaš. Asi preto ti nefungujú tí ľudia.
Nene, já právěže potřebuji JEN toho prvního. A tím prvním byl (při zkoušení) člověk a přesto ten script došel až do else tudíž - $rasa = 0;
tiso
Profil
Alastor_Kopal:
miesto:
if(...){
  $rasa=1;
}
else{
  $rasa=0;
}

sa dá písať:
$rasa=0;
if(...){
  $rasa=1;
}

Tie smery nepotrebuješ náhodou naraz? Alebo sa postava bude pozerať len jedným smerom? A čo takto políčka vedľa (onačené otáznikom)?
???U???
???U???
???U???
LLL.RRR
???D???
???D???
???D???

.=postava
U=up
L=left
R=right
D=down
Alastor_Kopal
Profil
tiso:
Tie smery nepotrebuješ náhodou naraz? Alebo sa postava bude pozerať len jedným smerom?
ne. Postava se vždy dívá JEN jedním směrem. Proto potřebuji zjistit jen jeden směr

A čo takto políčka vedľa (onačené otáznikom)?
ne nebudu to komplikovat šikmími směry
Alastor_Kopal
Profil
Promiňte že ještě obnovuji topic ale chtěl jsem říct:

tiso:
nepolepšil... Na riadku 10/13 si vrátiš prvého človeka/potvoru z databázy, ostatných nespracovávaš. Asi preto ti nefungujú tí ľudia. Ak som správne pochopil tak tento skript je len pre jeden smer. Takto chceš spracovávať aj ostatné smery?
tiso měl pravdu - já sem nepochopil že ten script vytáhne jen první záznam. Zapoměl jsem na to a myslel jsem že mi to vyhodí první odpovídající výsledek

děkuji všem z diskuse. script jsem si upravil a už plně funguje

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: