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: 16 let
|
0