| Autor | Zpráva | ||
|---|---|---|---|
| orava)) Profil * |
#1 · Zasláno: 29. 4. 2008, 13:15:09
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 * |
#2 · Zasláno: 29. 4. 2008, 14:37:39
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 * |
#3 · Zasláno: 29. 4. 2008, 14:42:46
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 |
#4 · Zasláno: 29. 4. 2008, 15:58:11
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 |
#5 · Zasláno: 29. 4. 2008, 16:21:55
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 |
#6 · Zasláno: 29. 4. 2008, 16:57:07
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 |
#7 · Zasláno: 29. 4. 2008, 16:59:28
orava
ked vyberem cestu ktora ma zakrutu tak to nefunuguje V tom případě to máte špatně naprogramované. |
||
| orava Profil |
#8 · Zasláno: 29. 4. 2008, 17:06:57
$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 |
||
|
Časová prodleva: 17 let
|
|||
0