Autor Zpráva
orava))
Profil *
mam asi 20 checkboxv na mape
Pomocou nich ma hrac vybrat cestu kade poujdu jeho jednotky
Zistim ake checkboxy zaskrtol a dostanem ich X a Y hodnoty v tvare 22,24
A ako zistim ci ich hrac zaskrtol posupne vedla seba alebo hociako?
orava))
Profil *
Spravil som toto:
if (isset($_POST["podvrt"])){ // Tlacitko
$polia=$_POST["nic"]; //checkboxy
foreach($polia AS $key=>$value) {
$pole[$key]=explode(",",$value);
}
echo 'Pocet: '.$key;
echo '<br>';
for ($i=0;$i<=$key;$i++)
{
echo 'x: '.$pole[$i][0].' y: '.$pole[$i][1].'<br>';
if ($pole[$i][0]==$pole[$i+1][0]
 || ($pole[$i][0]+1)==$pole[$i+1][0]
  || ($pole[$i][0]-1)==$pole[$i+1][0]) echo 'ok';
else echo 'niesu';
}
}

Ale zatial mi vzdy vypise niesu cize niesu pri sebe a neviem preco?
Poradite?
orava))
Profil *
ok uz som si to spravil
<? 
if (isset($_POST["podvrt"])){
$polia=$_POST["nic"];
foreach($polia AS $key=>$value) {
$pole[$key]=explode(",",$value);
}
echo 'Pocet: ';
echo $key+1;
echo '<br>';
for ($i=0;$i<=$key;$i++)
{
echo 'x: '.$pole[$i][0].' y: '.$pole[$i][1].'<br>';
if ($i!=($key)){
if ($pole[$i][0]==$pole[$i+1][0]
 || ($pole[$i][0]+1)==$pole[$i+1][0]
  || ($pole[$i][0]-1)==$pole[$i+1][0]) $pok++;

}
}
}
echo $pok;
echo '<br>';
echo $key;
if ($pok==$key) echo 'ok';
else echo 'ee';
?>
Joker
Profil
orava))
Ako zistim ci su policka vedla seba
No, tohle není těžké. Záleží, jestli se "vedle sebe" bere i diagonálně. Tj. když mám:
1 2 3
4 5 6
7 8 9

tak jestli "vedle políčka 5" leží všechna, anebo jen 2,4,6 a 8.
Spočítáte absolutní hodnoty rozdílů jejich souřadnic, tj: dX = abs(X1-X2) a dY = abs(Y1-Y2). A políčka leží vedle sebe:
- včetně diagonálních: (dX<=1) && (dY<=1) && (dX+dY > 0)
- bez diagonálních: ((dX==0) && (dY==1)) || ((dX==1) && (dY==0))
Joker
Profil
Ovšem v tomhle případě je nejspíš potřeba zjistit, zda třeba 20 zaškrtnutých políček dává souvislou cestu.
To je krapet složitější.

Algoritmus by byl asi takovýto:
- Postupně projdu všechna zaškrtnutá políčka a zjistím, kolik z políček vedle nich je zaškrtnutých
- Jestliže v okolí nějakého pole není ani jedno zaškrtnuté, nedávají pole souvislou cestu (pokud není zaškrtnuto právě jedno pole, v takovém případě není jasné, jak by se program měl chovat)
- Vezmu nějaké pole, které má v okolí 1 zaškrtnuté. Pokud žádné takové neexistuje, tvoří cesta uzavřený cyklus (anebo několik uzavřených cyklů). Pak je otázka, jak by se program měl chovat. Pokud je možný i cyklus, vzalo by se prostě pole s nejmenším počtem zaškrtnutých v okolí
- Dál postupuju takto:
1. Označím aktuální pole jako navštívené
2. Všechna okolní zaškrtnutá pole si přidám do seznamu polí k návštěvě, pokud tam ještě není
3. Mám-li v seznamu polí k návštěvě ještě nějaká nenavštívená pole, přesunu se na další z nich a pokračuju bodem 1.
- Pokud po skončení algoritmu v předchozí odrážce jsou všechna zaškrtnutá pole mezi navštívenými, pole tvoří souvislou cestu.

Ovšem pozor, ta cesta může mít i různé odbočky a slepé uličky, provedení toho uvedeného algoritmu jen zaručí, že zaškrtnutá políčka tvoří spojitou cestu. Například cesta ve tvaru písmene T by byla taky označená jako spojitá.
orava
Profil
takze uz mi vsetko bezi OK az na zakrutu
ked vyberem cestu ktora ma zakrutu tak to nefunuguje
Ak je jedna zakruta tak rozdiel medzi zaskrtnutymi polami a skontrolovanymi polami je 1
Ak su dve zakruty tak rozdiel medzi zaskrtnutymi polami a skontrolovanymi polami je 3
Ak su tri zakruty tak rozdiel medzi zaskrtnutymi polami a skontrolovanymi polami je 5 ...

Ako by som to mohol spravit aj zo zakrutov
P.S ten script hore uz nieje aktualny
Joker
Profil
orava
ked vyberem cestu ktora ma zakrutu tak to nefunuguje
V tom případě to máte špatně naprogramované.
orava
Profil
$pole obsahuje suradnice
$pole[][0] su X
$pole[][1] su Y
$key je pocet prvkov pola
for ($i=0;$i<=$key;$i++)
{

if ($pole[$i][0]==$pole[$i+1][0]
 || ($pole[$i][0]+1)==$pole[$i+1][0]
  || ($pole[$i][0]-1)==$pole[$i+1][0]) $pok++;

if ($pole[$i][1]==$pole[$i+1][1]
 || ($pole[$i][1]+1)==$pole[$i+1][1]
  || ($pole[$i][1]-1)==$pole[$i+1][1]) $pok++;

}


a nakonci by som mao platit
2*$key==$pok
ideto iba ak tam nieje zakruta

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:

0