Avaleht
uus teema   vasta Tarkvara »  Programmeerimine »  Javascript funktsioon märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale.  :: Teata moderaatorile teata moderaatorile
otsing:  
Terror
HV veteran
Terror

liitunud: 08.11.2001




sõnum 31.01.2009 00:50:42 Javascript funktsioon vasta tsitaadiga

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
vaata kasutaja infot saada privaatsõnum
troglodyte
Kreisi kasutaja
troglodyte

liitunud: 09.08.2002




sõnum 31.01.2009 01:24:22 vasta tsitaadiga

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
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
inzinz
HV kasutaja

liitunud: 26.01.2005




sõnum 31.01.2009 01:47:52 vasta tsitaadiga

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 ? icon_eek.gif

_________________
Upload.ee - eestimaine failiupload
Kommentaarid: 4 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 4
tagasi üles
vaata kasutaja infot saada privaatsõnum
nene
Kreisi kasutaja
nene

liitunud: 20.03.2004




sõnum 31.01.2009 10:58:07 vasta tsitaadiga

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:
  1. // Kuna antud koodis on arrayElement väärtuseks alati 1
  2. // siis kommenteerisin välja kohad, mis antud juhul ei loe
  3. function func1(input, arrayElement, nr) {
  4.   // if (arrayElement == 0) {
  5.   //   return 1;
  6.   // }
  7.   if (nr == 0){
  8.     return 0;
  9.   }
  10.   // if (arrayElement < 0) {
  11.   //   arrayElement = nr + arrayElement;
  12.   // }
  13.   // if (arrayElement <= 0) {
  14.   //   return 0;
  15.   // }
  16.      
  17.   if (arrayElement <= nr) {
  18.     input.value = arrayElement;
  19.     return 1;
  20.   }
  21.   else {
  22.     input.value = nr;
  23.     return 0;
  24.   }
  25. }
  26.  
  27. function func2(arr) {
  28.   var doc = (window.frames.length > 0) ? window.main.document : document;
  29.   var inputs = doc.units.getElementsByTagName('input');
  30.   var result = 1;
  31.  
  32.   for (var i = 0; i < (inputs.length - 4) && i < arr.length; i++) {
  33.     if (arr[i] != null && arr[i] != 0) {
  34.       // Hüppame <input>-ist järgmise node peale ja siis järgmise node peale
  35.       // ning kui see node pole HTML-i element, siis hüppame seni kuni leiame
  36.       // selle, mis on.
  37.       var el = inputs[i].nextSibling;
  38.       do {
  39.         el = el.nextSibling;
  40.       } while (el.nodeType != 1);
  41.      
  42.       // võtame selle elemendi sisust numbri
  43.       var nr = parseInt(el.firstChild.nodeValue.match(/(\d+)/)[1], 10);
  44.      
  45.       result = result && func1(inputs[i], arr[i], nr);
  46.     }
  47.   }
  48.    
  49.   return result;
  50. }
  51.  
  52. // See on eriti haige kood...
  53. function func3() {
  54.   // Kõigepealt anname func2-le massiivi, kus kohal 6 on arv 1
  55.   if (!func2([ , , , , , , 1])) {
  56.     // Kui func2 tagastab 0,
  57.     // siis anname talle massiivi, kus arv 1 on kohal 7
  58.     func2([ , , , , , , , 1]);
  59.   }
  60. }
  61.  
  62. 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
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
Terror
HV veteran
Terror

liitunud: 08.11.2001




sõnum 31.01.2009 12:45:59 vasta tsitaadiga

inzinz kirjutas:

Edit:
täiendav küsimus: kas ma saan õigesti aru et see kogu kupatus on kuskil lingil href="javascript:pikkridasiia" parameetrina ? icon_eek.gif

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 thumbs_up.gif
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
vaata kasutaja infot saada privaatsõnum
inzinz
HV kasutaja

liitunud: 26.01.2005




sõnum 31.01.2009 13:42:16 vasta tsitaadiga

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
vaata kasutaja infot saada privaatsõnum
Terror
HV veteran
Terror

liitunud: 08.11.2001




sõnum 31.01.2009 15:09:26 vasta tsitaadiga

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 icon_razz.gif)

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
vaata kasutaja infot saada privaatsõnum
nene
Kreisi kasutaja
nene

liitunud: 20.03.2004




sõnum 31.01.2009 18:27:21 vasta tsitaadiga

See kood oli ikka vägadegi imelikult kirjutatud. Kirjutasin paljuski ümber. Nüüd peaks olema märksa lihtsam ja loogilisem muuta.
javascript:
  1. // alustuseks kõik ühe anonüümse funktsiooni sisse,
  2. // et poleks mingite globaalsete muutujate tekitamist.
  3. (function(){
  4.    
  5. var coords = '623|234 234|658';
  6.    
  7. function getDocument() {
  8.   return (window.frames.length > 0) ? window.main.document : document;
  9. }
  10.  
  11. function setRandomCoords(coords) {
  12.   coords = coords.split(" ");
  13.   var index = Math.round(Math.random() * (coords.length - 1));
  14.   coords = coords[index];
  15.   coords = coords.split("|");
  16.   getDocument().units.x.value = coords[0];
  17.   getDocument().units.y.value = coords[1];
  18. }
  19.  
  20. // returns nr of available units
  21. // type can be: spear, sword, axe, spy, light, heavy, ram, catapult or snob
  22. function available(type) {
  23.   var input = getDocument().units[type];
  24.  
  25.   var el = input.nextSibling;
  26.   do {
  27.     el = el.nextSibling;
  28.   } while (el.nodeType != 1);
  29.  
  30.   return parseInt(el.firstChild.nodeValue.match(/(\d+)/)[1], 10);
  31. }
  32.  
  33. // sets the value of unit input box
  34. // type can be: spear, sword, axe, spy, light, heavy, ram, catapult or snob
  35. function set(type, value) {
  36.   getDocument().units[type].value = value;
  37. }
  38.  
  39. if (document.URL.indexOf('try=confirm') == -1) {
  40.   setRandomCoords(coords);
  41.  
  42.   // see nüüd vast see osa, mida sa muuta tahad:
  43.   if (available("ram")) {
  44.     set("ram", 1);
  45.   }
  46.   else if (available("catapult")) {
  47.     set("catapult", 1);
  48.   }
  49.  
  50. }
  51. else {
  52.   document.getElementsByName("submit")[0].click();
  53. }
  54.  
  55. })();
  56.  
  57. // Ma ei tea, milleks see on.
  58. // Igaks juhuks jätsin sisse.
  59. 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
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
Terror
HV veteran
Terror

liitunud: 08.11.2001




sõnum 31.01.2009 19:47:24 vasta tsitaadiga

thumbs_up.gif
Kommentaarid: 100 loe/lisa Kasutajad arvavad:  :: 1 :: 2 :: 91
tagasi üles
vaata kasutaja infot saada privaatsõnum
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  Programmeerimine »  Javascript funktsioon
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
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.