praegune kellaaeg 19.06.2025 11:11:03
|
Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
|
Terror
HV veteran

liitunud: 08.11.2001
|
31.01.2009 00:50:42
Javascript funktsioon |
|
|
Script ühe online mängu tarbeks. Täidab lahtrid meestega eelnevalt kontrollides kas antud mehi on piisavalt. Hetkel paneb lahtrisse ühe RAMMI ([,,,,,,1]) või selle puudumisel ühe CATAPULDI ([,,,,,,,1]).
Ma tahaks siia mõned muudatused sisse viia, kuid ei oska praegust scriptigi lugeda nii et asjas aru saaks. Tahan teha järgmist:
Kui RAM või CATA on linnas olemas siis täidetakse üks neist lahtrisse NING lisatakse ka üks SCOUT ([,,,1]). Juhul, kui CATAT ega rammi linnas pole, siis ei lisata ka scouti. Sellises olukorras liigutakse hoopis edasi url'le: X
Oskab keegi aidata kuidagi?
javascript:function i(){function j(b){function k(c,f,g)
{if(f==0){return 1;}
if(g==0){return 0;}
if(f<0){f=g+f;}
if(f<=0){return 0;}
if(f<=g){c.value=f;return 1;}
else{c.value=g;return 0;}}var d=document,g,c,e,l=1;
if(window.frames.length>0)d=window.main.document;
var a=d.units.getElementsByTagName('input');
for(var h=0;h<(a.length-4)&&h<b.length;h++){if(b[h]!=null&&b[h]!=0){e=a[h].nextSibling;
do{e=e.nextSibling;}while(e.nodeType!=1);
g=parseInt(e.firstChild.nodeValue.match(/(\d+)/)[1],10);
l=l&&k(a[h],b[h],g);}}return l;}if(!j([,,,,,,1])){j([,,,,,,,1]);}}i();
} |
|
|
Kommentaarid: 100 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
2 :: |
91 |
|
tagasi üles |
|
 |
troglodyte
Kreisi kasutaja

liitunud: 09.08.2002
|
31.01.2009 01:24:22
|
|
|
Trepi see kood vähemalt korralikult ära, muutujatele mõistlikud nimed ja pane syntax tagide vahele, kes seda soga praegusel kujul viitsib uurida?
_________________ ph'nglui mglw'nafh Cthulhu R'lyeh wgah'nagl fhtagn |
|
Kommentaarid: 34 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
34 |
|
tagasi üles |
|
 |
inzinz
HV kasutaja
liitunud: 26.01.2005
|
31.01.2009 01:47:52
|
|
|
proovi mis saab siis kui muudad kooditüki
if(!j([,,,,,,1])){j([,,,,,,,1]);} |
selliseks
var ram=j([,,,,,,1]),cata=0;if(!ram){cata=j([,,,,,,,1]);}if(cata||ram){j([,,,1]);}else{document.location=XXX;} |
Kuna koodist on näha et tegu on framedega, siis võib vajalik olla hoopis top.document.location kasutamine või koodist pakkudes window.main.document.location kasutamine ümbersuunamiseks, pead ise testima.
Edit:
täiendav küsimus: kas ma saan õigesti aru et see kogu kupatus on kuskil lingil href="javascript:pikkridasiia" parameetrina ?
_________________ Upload.ee - eestimaine failiupload |
|
Kommentaarid: 4 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
4 |
|
tagasi üles |
|
 |
nene
Kreisi kasutaja

liitunud: 20.03.2004
|
31.01.2009 10:58:07
|
|
|
Katsusin seda koodi natuke arusaadavamaks muuta. Treppisin ja tõstsin funktsioonid üksteise seest välja ning katsusin anda muutujatele natukegi mõistlikumad nimed. Eemaldasin ka ühe kasutamata muutuja ning koodi lõpus oleva üleliigse loogelise sulu. Mõned kohad kirjutasin veidi arusaadavamalt ümber. Aga endiselt on paras müstika mis toimub.
javascript:
|
// Kuna antud koodis on arrayElement väärtuseks alati 1 // siis kommenteerisin välja kohad, mis antud juhul ei loe function func1(input, arrayElement, nr) { // if (arrayElement == 0) { // return 1; // } if (nr == 0){ return 0; } // if (arrayElement < 0) { // arrayElement = nr + arrayElement; // } // if (arrayElement <= 0) { // return 0; // } if (arrayElement <= nr) { input.value = arrayElement; return 1; } else { input.value = nr; return 0; } } function func2(arr) { var doc = (window.frames.length > 0) ? window.main.document : document; var inputs = doc.units.getElementsByTagName('input'); var result = 1; for (var i = 0; i < (inputs.length - 4) && i < arr.length; i++) { if (arr[i] != null && arr[i] != 0) { // Hüppame <input>-ist järgmise node peale ja siis järgmise node peale // ning kui see node pole HTML-i element, siis hüppame seni kuni leiame // selle, mis on. var el = inputs[i].nextSibling; do { el = el.nextSibling; } while (el.nodeType != 1); // võtame selle elemendi sisust numbri var nr = parseInt(el.firstChild.nodeValue.match(/(\d+)/)[1], 10); result = result && func1(inputs[i], arr[i], nr); } } return result; } // See on eriti haige kood... function func3() { // Kõigepealt anname func2-le massiivi, kus kohal 6 on arv 1 if (!func2([ , , , , , , 1])) { // Kui func2 tagastab 0, // siis anname talle massiivi, kus arv 1 on kohal 7 func2([ , , , , , , , 1]); } } func3();
|
Kui keegi viitsib, võib sellest kremplist aru saada püüda. Igatahes sõltub see mingitest numbritest lehekülje peal ning ilma lehte ennast nägemata on suht raske öelda, mis siis ikkagi toimub.
_________________ Mõistus otsas? Pane pinusse... |
|
Kommentaarid: 24 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
1 :: |
23 |
|
tagasi üles |
|
 |
Terror
HV veteran

liitunud: 08.11.2001
|
31.01.2009 12:45:59
|
|
|
inzinz kirjutas: |
Edit:
täiendav küsimus: kas ma saan õigesti aru et see kogu kupatus on kuskil lingil href="javascript:pikkridasiia" parameetrina ?  |
See on jah ühel real sedasi. Script ise on palju pikem, kuid ma tõin aiia ainult selle "function" osa välja.
Kuidas see nn treppimine siin käib?
Kogu script muidu selline hetkel:
javascript:
coords='623|234 234|658';
var%20doc=document;
if(window.frames.length>0)doc=window.main.document;
url=document.URL;
if(url.indexOf('try=confirm')==-1)
{
coords=coords.split("%20");
index=Math.round(Math.random()*(coords.length-1));
coords=coords[index];
coords=coords.split("|");
doc.forms[0].x.value=coords[0];
doc.forms[0].y.value=coords[1];
javascript:function i()
{
function j(b)
{
function k(c,f,g)
{
if(f==0)
{
return 1;
}
if(g==0)
{
return 0;
}
if(f<0)
{
f=g+f;
}
if(f<=0)
{
return 0;
}
if(f<=g)
{
c.value=f;return 1;
}
else
{
c.value=g;return 0;
}
}
var d=document,g,c,e,l=1;
if(window.frames.length>0)d=window.main.document;
var a=d.units.getElementsByTagName('input');
for(var h=0;h<(a.length-4)&&h<b.length;h++)
{
if(b[h]!=null&&b[h]!=0)
{
e=a[h].nextSibling;
do
{
e=e.nextSibling;
}
while(e.nodeType!=1);
g=parseInt(e.firstChild.nodeValue.match(/(\d+)/)[1],10);
l=l&&k(a[h],b[h],g);
}
}return l;
}
if(!j([,,,,,,1])){j([,,,,,,,1]);}}i();
}
else
{
document.getElementsByName("submit")[0].click();
}
end();
|
Kui keegi soovib koodi nn tegevuses näha (st vaadata kus kuidas ja mis) siis PS.
Nene - tänan asja selgemaks muutmise eest, kui enne ei saanud midagi aru, siis nüüd hakkab juba veidi lootust andma
Paar küsimust aga...
Kas func2 saab tagastada ainult väärtuse 0 või 1?
Kui nii, siis kus on see koht kus ta teeb kindlaks kas ramme on rohkem kui 1 linnas (ning kas ainult selle alusel määratakse funcs2 väärtus?)?
|
|
Kommentaarid: 100 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
2 :: |
91 |
|
tagasi üles |
|
 |
inzinz
HV kasutaja
liitunud: 26.01.2005
|
31.01.2009 13:42:16
|
|
|
Kas sa minu proovitud koodijuppi proovisid panna sisse ? ideeliselt peaks töötama nii nagu vaja.
Nii palju kui ma aru sain koodist, ei tee func praegu vahet sellel kas linnas on juba 1 kindel üksus või kas sinna saab juba lisada 1 kindla üksuse.
Kui jooksutad j([,,,1]) ja scouti pole kuid saad lisada, saad tagasi väärtuse 1, kui aga scouti juurde lisada ei saa sinna siis saad tagasi 0.
Soovitaks funcid laiali tükeldada stiili:
unitCount mis annab kui palju uniteid on juba linnas, canAddUnit mis kontrollib kas on võimalik seda unitit lisada (kas sul on nii palju olemas) ja siis addUnit mis reaalselt lisab.
Kui tsipa aega saan võin hiljem siia nende funcide sisu ka välja pakkuda.
_________________ Upload.ee - eestimaine failiupload |
|
Kommentaarid: 4 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
4 |
|
tagasi üles |
|
 |
Terror
HV veteran

liitunud: 08.11.2001
|
31.01.2009 15:09:26
|
|
|
inzinz kirjutas: |
Kas sa minu proovitud koodijuppi proovisid panna sisse ? ideeliselt peaks töötama nii nagu vaja.
Nii palju kui ma aru sain koodist, ei tee func praegu vahet sellel kas linnas on juba 1 kindel üksus või kas sinna saab juba lisada 1 kindla üksuse.
Kui jooksutad j([,,,1]) ja scouti pole kuid saad lisada, saad tagasi väärtuse 1, kui aga scouti juurde lisada ei saa sinna siis saad tagasi 0.
Soovitaks funcid laiali tükeldada stiili:
unitCount mis annab kui palju uniteid on juba linnas, canAddUnit mis kontrollib kas on võimalik seda unitit lisada (kas sul on nii palju olemas) ja siis addUnit mis reaalselt lisab.
Kui tsipa aega saan võin hiljem siia nende funcide sisu ka välja pakkuda. |
Proovisin, kuid ei töötanud, kuna asi seal mingit errorit kunagi ei genereeeri, siis ei oska ise ka midagi teha, kuna ei saa olemasolevast scriptist aru täielikult.
Pmst koosneb script kolmest osast nagu ma aru saan:
See osa kontrollib kas vajalik kogus mehi on olemas vms (see on kõige segasem ei saa peaaegu midagi aru, kuna muutujad on tähtedeks pandud):
var d=document,g,c,e,l=1;
if(window.frames.length>0)d=window.main.document;
var a=d.units.getElementsByTagName('input');
for(var h=0;h<(a.length-4)&&h<b.length;h++)
{
if(b[h]!=null&&b[h]!=0)
{
e=a[h].nextSibling;
do
{
e=e.nextSibling;
}
while(e.nodeType!=1);
g=parseInt(e.firstChild.nodeValue.match(/(\d+)/)[1],10);
l=l&&k(a[h],b[h],g);
}
}return l;
} |
Seejärel see osa seab teatud kriteeriumid vastavalt millele antakse "return value" väärtuseks 0 või 1. (Kui ma teaks mis muutujad F ja G on siis saaks pildi selgemaks )
tsitaat: |
function k(c,f,g)
{
if(f==0)
{
return 1;
}
if(g==0)
{
return 0;
}
if(f<0)
{
f=g+f;
}
if(f<=0)
{
return 0;
}
if(f<=g)
{
c.value=f;return 1;
}
else
{
c.value=g;return 0;
}
}
|
Ning lõpuks sisestatakse scout või catapult, vastavalt sellele kas value oli 0 või 1
if(!j([,,,,,,1])){j([,,,,,,,1]);}}i();
} |
Teeksin hea meelega selle asja täpselt nii nagu sa ütlesid (funkts kohta ning normaalsed nimed asjadele anda mitte tähed), kuid progeda ma pmst ei oska, suure vaeva peale saan lihtsamast asjast aru ning hea õnne korral oskan väikse muudatuse sisse viia (katse eksitus meetodil)
|
|
Kommentaarid: 100 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
2 :: |
91 |
|
tagasi üles |
|
 |
nene
Kreisi kasutaja

liitunud: 20.03.2004
|
31.01.2009 18:27:21
|
|
|
See kood oli ikka vägadegi imelikult kirjutatud. Kirjutasin paljuski ümber. Nüüd peaks olema märksa lihtsam ja loogilisem muuta.
javascript:
|
// alustuseks kõik ühe anonüümse funktsiooni sisse, // et poleks mingite globaalsete muutujate tekitamist. (function(){ var coords = '623|234 234|658'; function getDocument() { return (window.frames.length > 0) ? window.main.document : document; } function setRandomCoords(coords) { coords = coords.split(" "); var index = Math.round(Math.random() * (coords.length - 1)); coords = coords[index]; coords = coords.split("|"); getDocument().units.x.value = coords[0]; getDocument().units.y.value = coords[1]; } // returns nr of available units // type can be: spear, sword, axe, spy, light, heavy, ram, catapult or snob function available(type) { var input = getDocument().units[type]; var el = input.nextSibling; do { el = el.nextSibling; } while (el.nodeType != 1); return parseInt(el.firstChild.nodeValue.match(/(\d+)/)[1], 10); } // sets the value of unit input box // type can be: spear, sword, axe, spy, light, heavy, ram, catapult or snob function set(type, value) { getDocument().units[type].value = value; } if (document.URL.indexOf('try=confirm') == -1) { setRandomCoords(coords); // see nüüd vast see osa, mida sa muuta tahad: if (available("ram")) { set("ram", 1); } else if (available("catapult")) { set("catapult", 1); } } else { document.getElementsByName("submit")[0].click(); } })(); // Ma ei tea, milleks see on. // Igaks juhuks jätsin sisse. end();
|
Võid selle packeriga pisikeseks lasta ja siis "javascript:"-i sappa kirjutada.
_________________ Mõistus otsas? Pane pinusse... |
|
Kommentaarid: 24 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
1 :: |
23 |
|
tagasi üles |
|
 |
Terror
HV veteran

liitunud: 08.11.2001
|
|
Kommentaarid: 100 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
2 :: |
91 |
|
tagasi üles |
|
 |
|
lisa lemmikuks |
|
|
sa ei või postitada uusi teemasid siia foorumisse sa ei või vastata selle foorumi teemadele sa ei või muuta oma postitusi selles foorumis sa ei või kustutada oma postitusi selles foorumis sa ei või vastata küsitlustele selles foorumis sa ei saa lisada manuseid selles foorumis sa võid manuseid alla laadida selles foorumis
|
|
Hinnavaatlus ei vastuta foorumis tehtud postituste eest.
|