Avatar billede wip13 Nybegynder
19. september 2001 - 20:37 Der er 8 kommentarer og
1 løsning

ARG - find lige fejlene her hva!

Okay jeg giver 250 point som kan få dette script til at virke:


<html>
<head>
<title>3.X\'s Mastermindspil</title>
<style  type=\"text/css\">
    body {color=\"white\"; background-color=\"black\"; font-size=\"12pt\"}
    .h1 {position=absolute; filter=glow(color=purple); font-size=\"24pt\"}
    .who {position=absolute; left:\"190\"; bottom:10; font-size=\"7pt\"}
</style>


<script language=JavaScript type=text/JavaScript>
<!-- skjul skript --
    var G1=\"1\";
    var G2=\"1\";
    var G3=\"1\";
    var G4=\"1\";
    var CG1=1;
    var CG2=1;
    var CG3=1;
    var CG4=1;
    var T1=1;
    var T2=1;
    var T3=1;
    var T4=1;
    var CT1=1;
    var CT2=1;
    var CT3=1;
    var CT4=1;   
    var gnr=0;
    var OK=0;
    var forkert=0;


    function nyOpgave() {
      // fastlæger 4 nye tal
      T1=Math.floor(Math.random()*5+1);
      T2=Math.floor(Math.random()*5+1);
      T3=Math.floor(Math.random()*5+1);
      T4=Math.floor(Math.random()*5+1);
      // nulstiller ALLE felter
      var G1=\"\";
      var G2=\"\";
      var G3=\"\";
      var G4=\"\";
      gnr=0;
      OK=0;
      forkert=0;
      resultater.value=\"Nr    Du skrev    OK    Forkert placeret\";
    }


    function guessTal() {
      // Checker om de indtastede er lig puterens tal
      gnr++;
      OK=0;
      forkert=0;
      if (G1==T1) {OK++; CG1=0; CT1=0};
      if (G2==T2) {OK++; CG2=0; CT2=0};
      if (G3==T3) {OK++; CG3=0; CT3=0};
      if (G4==T4) {OK++; CG4=0; CT4=0};
      guess1()
    }

    function guess1() {
      if (CG1==0) {guess2()()};
      if (CG2!==0 && CT2!==0) {      if (G1==T2) {forkert++; guess2()} }
      if (CG3!==0 && CT3!==0) {      if (G1==T3) {forkert++; guess2()} }   
      if (CG4!==0 && CT4!==0) {      if (G1==T4) {forkert++; guess2()} }
      guess2()
    }

    function guess2() {
      if (CG2==0) {guess3()};
      if (CG1!==0 && CT1!==0) {      if (G2==T1) {CG2=0; CT1=0; forkert++; guess3()} }
      if (CG3!==0 && CT3!==0) {      if (G2==T3) {CG2=0; CT3=0; forkert++; guess3()} }
      if (CG4!==0 && CT4!==0) {      if (G2==T4) {CG2=0; CT4=0; forkert++; guess3()} }
      guess3()
    }
   
    function guess3() {
      if (CG3==0) {guess4()};
      if (CG1!==0 && CT1!==0) {      if (G3==T1) {CG3=0; CT1=0; forkert++; guess4()} }
      if (CG2!==0 && CT2!==0) {      if (G3==T2) {CG3=0; CT2=0; forkert++; guess4()} }
      if (CG4!==0 && CT4!==0) {      if (G3==T4) {CG3=0; CT4=0; forkert++; guess4()} }
      guess4()
    }

    function guess4() {
      if (CG4==0) {add()};
      if (CG1!==0 && CT1!==0) {      if (G4==T1) {CG4=0; CT1=0; forkert++; add()} }
      if (CG2!==0 && CT2!==0) {      if (G4==T2) {CG4=0; CT2=0; forkert++; add()} }
      if (CG3!==0 && CT3!==0) {      if (G4==T3) {CG4=0; CT3=0; forkert++; add()} }
      add()
    }

    function add() {
    resultater.value=resultater.value+\"\\r\\n\"+gnr+\"      \"+G1+\"\"+G2+\"\"+G3+\"\"+G4+\"        \"+OK+\"      \"+forkert
    }


</script>

</head>

<BODY>
<div class=\"h1\">Mastermind - den udfordrende hjernevrider!!
</div>

<br /><br /><br />
PC\'en vælger fire tal mellem 1 og 5.<br />
Du får fortalt, når du har placeret et tal på samme plads som PC\'en(OK) og når du har valgt
samme tal som PC\'en, men bare har placeret det i det forkerte felt(forkert placeret)!<br />
Okay?? Prøv nu at gætte!! - Hihi!!

<br /><br />
<INPUT name=\"G1\" size=\"2\">
<INPUT name=\"G2\" size=\"2\">
<INPUT name=\"G3\" size=\"2\">
<INPUT name=\"G4\" size=\"2\">

<br /><br />
<TEXTAREA name=resultater rows=8 cols=46>Nr    Du skrev    OK    Forkert placeret</TEXTAREA>

<br />

<img onClick=\"guessTal()\" src=\"http://www.sctknud-gym.dk/E-Drev/3x/3x18-Anders_KW/datalogi/images/guess.jpg\" style=\"position:absolute;top:160;right:565\" border=\"0\" height=\"40\">

<img onClick=\"nyOpgave()\" src=\"http://www.sctknud-gym.dk/E-Drev/3x/3x18-Anders_KW/datalogi/images/newgame.jpg\" style=\"position:absolute;top:305;right:295\" border=\"0\" height=\"40\">


<img src=\"http://www.sctknud-gym.dk/E-Drev/3x/3x18-Anders_KW/datalogi/images/lights1.gif\" style=\"position:absolute;bottom:0;left:0\">
<img src=\"http://www.sctknud-gym.dk/E-Drev/3x/3x18-Anders_KW/datalogi/images/lights2.gif\" style=\"position:absolute;bottom:0;right:0\">

<div class=\"who\">Anders, Mads og Kirstin fra 3.x har brugt al deres hjernekapacitet på at udvikle det her utroligt \"sjove\" spil.........
</div>

</body>
</html>


Siden kan ses på http://www.sctknud-gym.dk/E-Drev/3x/3x18-Anders_KW/datalogi/mastermind/start.html hvis det er bedre.


Den skal virke sådan at når man trykker på nyt spil, laver maskinen 4 nye tal og gemmer dem i T1, T2 osv.
Bruger skal så trykke hans 4 gær ind og trykke på \"gæt\"

I text feldet skal du så vise hvad nummer gæt det er, hvilke tal brugeren gættede på, hvor mange der var rigtigt placerede og hvor mange der er rigtige men forkert placerede.
Jeg fatter kort sagt ikke hvor mine fejl er, så hvis du kan make it work får du 250 points.....
Avatar billede soulm8 Nybegynder
19. september 2001 - 20:51 #1
Jaa, det er sq en hjernevrider!!! Sorry, cant do!
Avatar billede wip13 Nybegynder
19. september 2001 - 21:08 #2
ah cmon.....jeg smider sq 250 point oveni hvis det er det der skal til for at motivere folk.............send gerne løsningen til anders@wibroe.org
Avatar billede jakoba Nybegynder
19. september 2001 - 21:26 #3
250 er rigeligt. selvom der ER mange fejl.

<form> ... </form>  omkring inputfelter.

// -->  foran </script>

du har lagt onclick i en <img kommando.
både for nyOpgave() og for guessTal()

du placerer dine 2 aktive biller absolut. (ikke en fejl. bare irriterende når man endelig opdager det er derfor de står andetsteds end forventet.:-))

du adresserer dit txtarea forkert.  resultater er ikke nok. det hedder: document.forms[0].resultater

ditto med G1, G2, G3 og G4, bortset fra at der også skal skrives .value bagefter for at få værdien i feltet. document.forms[0].G1.value

linien:
      var G1=\"\";
jeg går ud fra I ønsker at nulstille feltet. Men adressen er som sagt forkert. og ved at skrive var foran gør i det til en nyoprettet javascript variabel lokal i funktionen nyOpgave().

guess2()()  er forkert syntax der får javascript til at lede efter navnet guess2() det navn findes ikke i navnetabellen. kun eet sæt parenteser bagved.

--------------------------------------------------------------------------

Og så kan vi begynde på at debugge selve algoritmen. :-))

fortsættelse følger...

mvh JakobA
Avatar billede wip13 Nybegynder
19. september 2001 - 21:46 #4
jeg har FUldstændigt mistet orienteringen lige nu!
Jeg fedter i seng og ser på hvad du har skrevet i morgen, men tak indtil videre!
Avatar billede jakoba Nybegynder
19. september 2001 - 22:27 #5
\'ikke lig med\' operatoren skrives  !=  det er kun i \'lig med\' operatoren der skal være 2 lighedstegn.

ingen grund til 2 if setninger inden i hinanden som i linien:
      if (CG1!=0 && CT1!=0) {      if (G4==T1) {CG4=0; CT1=0; forkert++; add()} }
hvis i istedet skriver:
      if (CG1!=0 && CT1!=0 && G4==T1) { CG4=0; CT1=0; forkert++; add() }
er scriptet kortere og mere overskuelig

guess1,guess2,guess3,guess4,add  er en sekvens der altid skal gennemløbes, så hvorfor skal funktionerne kalde videre til den næste bare skriv sekvensen
      guess1();
      guess2();
      guess3();
      guess4();
      add();

og skrot alle de funktionskald indeni guess_() funktionerne
Vi kan også klargøre funktionen lidt ved at flytte første betingelse ud udenfor guess_() funktionerne:
      if ( CG1 != 0 ) guess1();  // test kun på uperfekte numre
      if ( CG2 != 0 ) guess2();
      if ( CG3 != 0 ) guess3();
      if ( CG4 != 0 ) guess4();
      add();

i guess1() glemmer i at ændre CG_ og CT_ variablene

GC1..CG4 og CT1..CT4 skal geninitieres efter hvert gæt

når flere variable samtidig skal sættes til samme værdi kan det gøres med:
      CG1=CG2=CG3=CG4=1;  // alle 4 variable bliver sat til 1

Nulstil også inputgelterne efter hvert gæt

flyt \"gæt\" knappen op så man ikke skal vandre så langt med musen imellen inputfelter og knap.

gør textareaet urørligt så folk ikke kan komme til at skrive i det: onfocus=\"this.blur()\"
Avatar billede jakoba Nybegynder
19. september 2001 - 22:27 #6
her er den rettede kode:
<html>
<head>
<title>3.X\'s Mastermindspil</title>
<META NAME=\"Generator\" CONTENT=\"Stone\'s WebWriter 3\">
<style  type=\"text/css\">
    body {color=\"white\"; background-color=\"black\"; font-size=\"12pt\"}
    .h1 {position=absolute; filter=glow(color=purple); font-size=\"24pt\"}
    .who {position=absolute; left:\"190\"; bottom:10; font-size=\"7pt\"}
</style>


<script language=JavaScript type=text/JavaScript>
<!-- skjul skript  >
    var G1=\"1\";  // kopier af input-felterne
    var G2=\"1\";
    var G3=\"1\";
    var G4=\"1\";
    var CG1=1;    // rigtig farve men fejlplaceret
    var CG2=1;
    var CG3=1;
    var CG4=1;
    var T1=1;    // conputerens tal som vi skal gætte
    var T2=1;
    var T3=1;
    var T4=1;
    var CT1=1;    //
    var CT2=1;
    var CT3=1;
    var CT4=1; 
    var gnr=0;    // antal gæt indtil vider
    var OK=0;        // antal korrekt placerede
    var forkert=0;  // rigtige tal med gal placering


    function nyOpgave() {
      // fastlæger 4 nye tal
      T1=Math.floor(Math.random()*5+1); // korrekt
      T2=Math.floor(Math.random()*5+1);
      T3=Math.floor(Math.random()*5+1);
      T4=Math.floor(Math.random()*5+1);
      // nulstiller ALLE felter
      document.forms[0].G1.value = \"\";
      document.forms[0].G2.value = \"\";
      document.forms[0].G3.value = \"\";
      document.forms[0].G4.value = \"\";
      gnr=0;
      OK=0;
      forkert=0;
      document.forms[0].resultater.value=\"Nr    Du skrev    OK    Forkert placeret\";
      document.forms[0].resultater.value= document.forms[0].resultater.value +\"\\r\\nmål    \"+T1+T2+T3+T4
    }


function guessTal() {
      G1 = document.forms[0].G1.value; // hent det indtastede over i
      G2 = document.forms[0].G2.value; //    arbejdsvariablene
      G3 = document.forms[0].G3.value;
      G4 = document.forms[0].G4.value;

      // Checker om de indtastede er lig puterens tal
      gnr++;  // optæl antal gæt
      OK=0;
      forkert=0;
      if (G1==T1) {OK++; CG1=CT1=0};
      if (G2==T2) {OK++; CG2=CT2=0};
      if (G3==T3) {OK++; CG3=CT3=0};
      if (G4==T4) {OK++; CG4=CT4=0};
              // OK er nu antallet af perfekt placerede tal
      if ( CG1 != 0 ) guess1();
      if ( CG2 != 0 ) guess2();
      if ( CG3 != 0 ) guess3();
      if ( CG4 != 0 ) guess4();

      document.forms[0].resultater.value= document.forms[0].resultater.value +\"\\r\\n\"+gnr+\"      \"+G1+\"\"+G2+\"\"+G3+\"\"+G4+\"        \"+OK+\"      \"+forkert
      CG1=CG2=CG3=CG4=1;
      CT1=CT2=CT3=CT4=1;
      document.forms[0].G1.value = \"\";
      document.forms[0].G2.value = \"\";
      document.forms[0].G3.value = \"\";
      document.forms[0].G4.value = \"\";
    }

    function guess1() {
      if (CG2!=0 && CT2!=0 && G1==T2 ) { CG1=CT2=0; forkert++ }
      else if (CG3!=0 && CT3!=0 && G1==T3 ) { CG1=CT3=0; forkert++ }
      else if (CG4!=0 && CT4!=0 && G1==T4 ) { CG1=CT3=0; forkert++ }
    }

    function guess2() {
      if (CG1!=0 && CT1!=0 && G2==T1 ) { CG2=CT1=0; forkert++ }
      else if (CG3!=0 && CT3!=0 && G2==T3 ) { CG2=CT3=0; forkert++ }
      else if (CG4!=0 && CT4!=0 && G2==T4 ) { CG2=CT4=0; forkert++ }
    }
 
    function guess3() {
      if ( CG1!==0 && CT1!==0 && G3==T1 ) { CG3=CT1=0; forkert++ }
      else if ( CG2!==0 && CT2!==0 && G3==T2 ) { CG3=CT2=0; forkert++ }
      else if ( CG4!==0 && CT4!==0 && G3==T3 ) { CG3=CT4=0; forkert++ }
    }

    function guess4() {
      if (CG1!==0 && CT1!==0 && G4==T1 ) { CG4=CT1=0; forkert++ }
      else if (CG2!==0 && CT2!==0 && G4==T2 ) { CG4=CT2=0; forkert++ }
      else if (CG3!==0 && CT3!==0 && G4==T3 ) { CG4=CT3=0; forkert++ }
    }

// --> </script>

</head>

<BODY onload=\"nyOpgave()\">
<div class=\"h1\">Mastermind - den udfordrende hjernevrider!!
</div>

<br /><br /><br />
PC\'en vælger fire tal mellem 1 og 5.<br />
Du får fortalt, når du har placeret et tal på samme plads som PC\'en(OK) og når du har valgt
samme tal som PC\'en, men bare har placeret det i det forkerte felt(forkert placeret)!<br />
Okay?? Prøv nu at gætte!! - Hihi!!
<form>
<br />
<INPUT name=\"G1\" size=\"2\">
<INPUT name=\"G2\" size=\"2\">
<INPUT name=\"G3\" size=\"2\">
<INPUT name=\"G4\" size=\"2\">
<a href=\'java script:void(0)\' onClick=\"guessTal()\"><img src=\"http://www.sctknud-gym.dk/E-Drev/3x/3x18-Anders_KW/datalogi/images/guess.jpg\" border=\"0\" height=\"50\"></a>

<br /><br />
<TEXTAREA name=resultater rows=8 cols=46 onfocus=\"this.blur()\">Nr    Du skrev    OK    Forkert placeret</TEXTAREA>
</form>

<a href=\'java script:void(0)\' onClick=\"nyOpgave()\"><img  src=\"http://www.sctknud-gym.dk/E-Drev/3x/3x18-Anders_KW/datalogi/images/newgame.jpg\" border=\"0\" height=\"50\"></a>


<p><img src=\"http://www.sctknud-gym.dk/E-Drev/3x/3x18-Anders_KW/datalogi/images/lights1.gif\"
><img src=\"http://www.sctknud-gym.dk/E-Drev/3x/3x18-Anders_KW/datalogi/images/lights2.gif\" >

<div class=\"who\">Anders, Mads og Kirstin fra 3.x har brugt al deres hjernekapacitet på at udvikle det her utroligt \"sjove\" spil.........
</div>


<!-- WebWriter AutoDato -->Opdateret: 19.9.2001<!-- WW -->
</body>
</html>
Avatar billede jakoba Nybegynder
19. september 2001 - 22:33 #7
når du ar checket at det virker fjerner du den debug-linie jeg har indsat i nuOpgave().
altså linien nederst der er:
      document.forms[0].resultater.value= document.forms[0].resultater.value +\"\\r\\nmål    \"+T1+T2+T3+T4
Avatar billede jakoba Nybegynder
20. september 2001 - 03:03 #8
Og så kunne jeg ikke modstå fristelsen til lige at shine den lidt op, fjerne overflædig kode og sådan:

<html>
<head>
<title>3.X\'s Mastermindspil</title>
<META NAME=\"Generator\" CONTENT=\"Stone\'s WebWriter 3\">
<style  type=\"text/css\">
    body {color=\"white\"; background-color=\"black\"; font-size=\"12pt\"}
    .h1 {position=absolute; filter=glow(color=purple); font-size=\"24pt\"}
    .who {position=absolute; left:\"190\"; bottom:10; font-size=\"7pt\"}
</style>

<script language=JavaScript type=text/JavaScript> <!-- skjul skript  >

var g  = new Array( 0,0,0,0 ); // kopier af input-felterne
var cg = new Array( );        // rigtig farve men fejlplaceret
var t  = new Array( 0,0,0,0 ); // conputerens tal som vi skal gætte
var ct = new Array( );        // talt som fejlplaceret
var gnr=0;      // antal gæt indtil vider
var OK=0;        // antal korrekt placerede
var forkert=0;  // rigtige tal med gal placering

var i,j;        // tællere
var frme;        // peger få felt-arrayet

    function nyOpgave() {
      frme = document.forms[0].elements;
              // fastlægger 4 nye tal
      for ( i=0; 4>i; i++ ) t[i] = Math.floor(Math.random()*5+1);
      frme.resultater.value=\"Nr    Du skrev    OK    Forkert placeret\";
      frme[\'G0\'].focus();
    }

function guessTal() {
      gnr++;      // optæl antal gæt
      OK=0;
      forkert=0;
      for ( i=0; 4>i; i++ ) {
          g[i] = frme[\'G\'+i].value;
          frme[\'G\'+i].value = \"\";
          cg[i] = ct[i] = true;
      }        // hent det indtastede over i arbejdsvariablene

                // Checker om de indtastede er lig puterens tal
      for ( i=0; 4>i; i++ )
        if (g[i]==t[i]) {OK++; cg[i]=ct[i]=false};
              // OK er nu antallet af perfekt placerede tal

      if ( OK == 4 ) { // alle tal er gættet
        frme.resultater.value= document.forms[0].resultater.value +\"\\r\\nYES!  \"+t[0]+t[1]+t[2]+t[3]+\"    Du klarede det.\"
      } else {        // find antal forkert placerede tal
        for ( i=0; 4>i; i++ )
          if ( cg[i] )
            for (var j=0; 4>j; j++ )
              if ( ct[j] && g[i]==t[j] ) {
                cg[i] = ct[j] = false;
                forkert++;
                j=4;
              }
        document.forms[0].resultater.value= document.forms[0].resultater.value +\"\\r\\n\"+gnr+\"      \"+g[0]+g[1]+g[2]+g[3]+\"        \"+OK+\"      \"+forkert
        frme[\'G0\'].focus();
      } //endif
    }

// --> </script>

</head>

<BODY onload=\"nyOpgave()\">
<div class=\"h1\">Mastermind - den udfordrende hjernevrider!!
</div>

<br /><br /><br />
PC\'en vælger fire tal mellem 1 og 5.<br />
Du får fortalt, når du har placeret et tal på samme plads som PC\'en(OK) og når du har valgt
samme tal som PC\'en, men bare har placeret det i det forkerte felt(forkert placeret)!<br />
Okay?? Prøv nu at gætte!! - Hihi!!
<form>
<br />
<INPUT name=\"G0\" size=\"2\"> &nbsp;
<INPUT name=\"G1\" size=\"2\"> &nbsp;
<INPUT name=\"G2\" size=\"2\"> &nbsp;
<INPUT name=\"G3\" size=\"2\"> &nbsp;
<a href=\'java script:void(0)\' onClick=\"guessTal()\"><img src=\"http://www.sctknud-gym.dk/E-Drev/3x/3x18-Anders_KW/datalogi/images/guess.jpg\" border=\"0\" height=\"50\" align=\'absmiddle\'></a>

<br />
<TEXTAREA name=resultater rows=8 cols=46 onfocus=\"this.blur()\">Nr    Du skrev    OK    Forkert placeret</TEXTAREA>
</form>

<a href=\'java script:void(0)\' onClick=\"nyOpgave()\"><img  src=\"http://www.sctknud-gym.dk/E-Drev/3x/3x18-Anders_KW/datalogi/images/newgame.jpg\" border=\"0\" height=\"50\"></a> &nbsp; &nbsp;


<img src=\"http://www.sctknud-gym.dk/E-Drev/3x/3x18-Anders_KW/datalogi/images/lights1.gif\"
><img src=\"http://www.sctknud-gym.dk/E-Drev/3x/3x18-Anders_KW/datalogi/images/lights2.gif\" >

<div class=\"who\">Anders, Mads og Kirstin fra 3.x har brugt al deres hjernekapacitet på at udvikle det her utroligt \"sjove\" spil.........
</div>


<!-- WebWriter AutoDato -->Opdateret: 20.9.2001<!-- WW -->
</body>
</html>

mvh JakobA
Avatar billede wip13 Nybegynder
20. september 2001 - 07:21 #9
LOL.....du kunne ikke modstå fristelsen....
hehe, nej jeg takker på vejene af mig og de to andre gutter/gutinder!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester