JS1K

#2: the original

Source description for demo by Tobias Bräutigam.

Original version I wrote in 2006: // JScript File // Author: Tobias Bräutigam // Field var sizex =4; var sizey =4; var cards_total =16; //sizex*sizey var field =new Array (cards_total); var field_found =new Array (); //remember found pair number var helper =field; var cardback ='X'; //"Back" of the card //Game var trials =0; var pairs =0; var clicks =0; var card1 =0; var card2 =0; var card1_pos =0; var card2_pos =0; var c =0; var wrongtry =false; var nochars =false; //display no char but color or img instead var mydoc =document; //replace DOM document by shorter var var mRound =Math.round; mainfunc(); //Main function mainfunc() { init_field(); fill_field(); show_field(); return(0); } function init_field () //setup paired cards { for (i=0;i<cards_total;i=i+2) { helper[i]=i/2; helper[i+1]=i/2; } } function fill_field() //mix cards { field=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]; for (var counter = 0; counter < cards_total; counter++) { a=helper.splice(mRound(Math.random()*helper.length-1),1); field[counter]=a; } } function show_field() //draw table { counter=0; mydoc.write('<div align="center">Score <div id="555"></div><table border="1" id="mem" style="font-family:Verdana; font-size:200%;cursor:pointer;">'); for (i=0;i<sizex;i++) { mydoc.write('<tr>'); for (j=0;j<sizey;j++) { //show card value mydoc.write('<td align="center" id="'+counter+'" onclick="play('+counter+')"> '+cardback+' </td>'); //hide card value counter++; } mydoc.write('</tr>'); } mydoc.write('</table></div>'); } function show(id) // display card { mydoc.getElementById(id).innerHTML=cardface(mRound(field[id])); mydoc.getElementById(id).style.backgroundColor='#'+(field[id]*15+768); } function hide(id) // hide card { mydoc.getElementById(id).innerHTML=cardback; mydoc.getElementById(id).style.backgroundColor="White"; } function cardstate(card) //check for found pairs { cardopen=false; for (a=0;a<field_found.length;a++) { if (mRound(field_found[a])==card) { cardopen=true; } } return(cardopen); } function cardface(cardid) //get card face call with number, not string! { cardchar=String.fromCharCode(cardid+65); return (cardchar); } function play(id) // Called by event on table cells with cell ID { //clicked on open pair card? if (cardstate(mRound(field[id]))) { return(0); } if (wrongtry) //Hide cards one click after wrong try { if ((id == card1_pos) || (id == card2_pos)) //clicked on any currently open card? { return(0); } hide(card1_pos); hide(card2_pos); wrongtry=false; } if (clicks==0) //First card turned? { clicks=1; card1=mRound(field[id]); //Remember card number [turned into object!?;(] card1_pos=id; //Remember card position show(id); return(0); } if (clicks==1) //Second card turned? { card2=mRound(field[id]); //Remember card number card2_pos=id; //Remember card position if (card1_pos == card2_pos) //Clicked on same card? { return(0); } else { clicks=2; show(id); } if (card1 == card2) //Found a pair? { pairs++; if (pairs == cards_total/2) //Last pair found? { alert('Fertig!'); } else { field_found.push(card1); //Remember guessed pair number } } else { wrongtry=true; // Daneben! } trials++; mydoc.getElementById(555).innerHTML=(trials+"/"+pairs); clicks=0; return(0); } return(0); }