Elakkan Perangkap

Masa lepas Bom tinggal 

Kilk pada mana-mana petak dan kemudian mulakan permainan. Untuk memilih kotak gunakan butang yang disediakan pada sekeliling kotak. Butang pada sebelah kiri dan bawah adalah untuk memandakan kawasan yang dijangka ada bom. Untuk membuka kotak gunakan butang sebelah kanan dan atas. 
Copy skrip atau download.
 
1.Copy dalam <head>

<SCRIPT language="JavaScript">

<!-- hide code from old browsers

var BOMB = " * ";

var NOBOMB = "";

var MARKED = " X ";

var constModul = 0.0;

var constFactor = 0.0;

var constMove = 0.0;

var pseudoRandomNumber = 0.0;

var constXSize = 5;

var constYSize = 5;

var constBombAmnt = 5;

var squaresCleared = 0;

var firstTime=false;

var topValue=-1;

var rightValue=-1;

var bottomValue=-1;

var leftValue=-1;

var array;

var startTime;

var timerID = null;

var timerRunning = false;
 
 

//--------------------------------------------------------------------------

function stopClock (){   

 if(timerRunning)      

  clearTimeout(timerID);   

  timerRunning = false;

}

//--------------------------------------------------------------------------

function startClock (){   

 // Make sure the clock is stopped   

 stopClock();   

 startTime = new Date();   

 showTime();

}

//--------------------------------------------------------------------------

function diffSeconds (t1, t2){

 // returns the difference between t1 (hh:mm:ss) and t2 (hh:mm:ss)// in seconds!

 return (t2.getHours()*3600 + t2.getMinutes()*60 + t2.getSeconds()) - (t1.getHours()*3600 + t1.getMinutes()*60 + t1.getSeconds());

}

//--------------------------------------------------------------------------

function showTime (){   

 document.info.time.value = diffSeconds(startTime, new Date());   

 timerID = setTimeout("showTime()",1000);   

 timerRunning = true;

}

//--------------------------------------------------------------------------

function initRandom(){

 // initialize random number generator

 var now = new Date();   

 var hours = now.getHours();   

 var minutes = now.getMinutes();   

 var seconds = now.getSeconds();   

 constModul = Math.pow(2,48);   

 constFactor = 513.0   

 constMove = 29741096258473.0;   

 pseudoRandomNumber = (hours+minutes*60+seconds*3600);

}

//--------------------------------------------------------------------------

function random(){

 // returns the next pseudo-random number [0,1]

 pseudoRandomNumber = (constFactor*pseudoRandomNumber+constMove)%constModul;   

 return (pseudoRandomNumber / constModul);

}

//--------------------------------------------------------------------------

function getArrayAt(x, y, value){

 // Access-method of object-type ObjArray

 // x,y are zero-based

 return this[y*this.xSize+x];

}

//--------------------------------------------------------------------------

function putArrayAt(x, y, value){

 // Access-method of object-type ObjArray

 // x,y are zero-based

 this[y*this.xSize+x] = value;

}

//--------------------------------------------------------------------------

function ObjArray(xSize, ySize){   

 for (i=0; i<xSize*ySize; i++) 

 this[i] = "";   

 this.xSize = xSize;   

 this.ySize = ySize;   

 this.getArrayAt = getArrayAt; 

 //Access-methods   

 this.putArrayAt = putArrayAt;

}

//--------------------------------------------------------------------------

function putAreaAt(x, y, value)

 // sets the value the displayed "text"-field array of pos (x,y)

 // x,y are zero-based

 {      

 var posInArea = (constXSize)+y*(constXSize+2)+(x+1);      

 document.area.elements[posInArea].value = value;

}

//--------------------------------------------------------------------------

function getAreaAt(x, y)

 // sets the value the displayed "text"-field array of pos (x,y)

 // x,y are zero-based

 {      

 var posInArea = (constXSize)+y*(constXSize+2)+(x+1);      

 return document.area.elements[posInArea].value;

}

//--------------------------------------------------------------------------

function placeTheBombs(x, y)

 // places the bombs in the array, except on position x,y

 {   

 var i, randomXYPos;   

 array.putArrayAt(x, y, BOMB);   

 for (i=0; i<constBombAmnt; i++)   {      

  //find a (random) position where there is still no bomb      

  //calculate bombs x,y position      

  randomXYPos = random();      

  randomXYPos = Math.floor(randomXYPos*constXSize*constYSize);      

  while (array[randomXYPos] == BOMB)      {         

   //calculate bombs x,y position         

   randomXYPos = random();         

   randomXYPos = Math.floor(randomXYPos*constXSize*constYSize);      

  }      

  array[randomXYPos] = BOMB;   

 }   

 array.putArrayAt(x, y, NOBOMB);

}

//--------------------------------------------------------------------------

function calculateBombsAround()

 // calculates the amount of bombs that surround each

 // square and stores it into the array

 {   

 var x, y, x1, y1, numberOfBombs;   

 for (x=0; x<constXSize; x++)      

 for (y=0; y<constYSize; y++){         

  if (array.getArrayAt(x, y) == BOMB) continue;         

  numberOfBombs=0;         

  for(x1=x-1; x1<x+2; x1++)            

  for(y1=y-1; y1<y+2; y1++)               

   if((x1>=0) && (y1>=0) && (x1<constXSize) && (y1<constYSize))                  

   if (array.getArrayAt(x1, y1) == BOMB)                     

   numberOfBombs++;         

   array.putArrayAt(x, y, " "+numberOfBombs+" ");         

   //putAreaAt(x, y, " "+numberOfBombs+" ");

       }

}

//--------------------------------------------------------------------------

function initArea(){   

 var randomXYPos;   

 var numberOfBombs;   

 var i, x, y;   

 squaresCleared = 0;   

 document.info.bombsLeft.value = constBombAmnt;   

 // init. display   

 for (x=0; x<constXSize; x++)      

 for (y=0; y<constYSize; y++)         

 putAreaAt (x, y, "");   

 // create area in memory, too   

 array = new ObjArray(constXSize, constYSize);   

 firstTime = true;

}

//--------------------------------------------------------------------------

function markSquare(x, y){      

 bottomValue=-1;      

 leftValue=-1;      

 if (getAreaAt(x,y)==MARKED){         

  putAreaAt(x,y,"");         

  document.info.bombsLeft.value++;      

 }        

 else{         

  // if the user clicks on a square that has already been opened         

 if (getAreaAt(x,y)!=NOBOMB){            

  // warn user and abort            

  alert("You've already done this square!")            

  return;         

 }         

 putAreaAt(x,y, MARKED);         

 document.info.bombsLeft.value--;      

 }        

 return;

}

//--------------------------------------------------------------------------

function openSquare(x, y){      

 topValue=-1;      

 rightValue=-1;      

 squaresCleared++;      

 // if the user clicks on a square that has already been opened or      

 // been marked      

 if (getAreaAt(x,y)!=NOBOMB){         

  // warn user and abort         

  alert("You've already done this square!")         

  return;      

 }      

 // prevent user from beeing bombed the first time!      

 if (firstTime) {         

  placeTheBombs(x, y);         

  calculateBombsAround();         

  firstTime = false;      

 }      

 putAreaAt(x,y, squareContents = array.getArrayAt(x,y));      

 if (squareContents==BOMB){         

  alert("GAME-OVER, you lost!");         

  showAll();      

 }      

 else{         

  if (squaresCleared==constXSize*constYSize-constBombAmnt)         

 {            

  alert("Congratulations, you made it in "+ document.info.time.value+" seconds!");            

  showAll();         

 }}

}

//--------------------------------------------------------------------------

function onButtonClicked(button){   

 var pos = parseInt (button.value);   

 if (button.name=="top")      

 topValue=pos;   

 if (button.name=="bottom")      

  bottomValue=pos;   

 if (button.name=="left")      

  leftValue=pos;   

 if (button.name=="right")      

  rightValue=pos;   

 if ((bottomValue>=0) && (leftValue>=0))      

  markSquare (bottomValue, leftValue)   

 if ((topValue>=0) && (rightValue>=0))      

  openSquare(topValue, rightValue)

}

//--------------------------------------------------------------------------

function showAll()

 // displays the area like it is represented in the array

 {   

 var x,y;   

 stopClock();   

 // init. display   

 for (x=0; x<constXSize; x++)      

 for (y=0; y<constYSize; y++)         

 putAreaAt (x, y, array.getArrayAt(x,y));

}

//--------------------------------------------------------------------------

function startNewGame(){

 initRandom();

 initArea();

 startClock();

}

// end hiding from old browsers -->

</SCRIPT>
 

2.Copy dalam <body>

<FORM name=info><INPUT type="button" value="Start new game" onClick="startNewGame()">Masa
lepas<INPUT type="text" name=time size=7>Bom tinggal<INPUT type="text" name=bombsLeft size=5></FORM><FORM name=area></CENTER>

<CENTER><TABLE BORDER >
<TR>
<TD></TD>

<TD><INPUT type="button" name=top value="  0  " onClick="onButtonClicked(this)"></TD>

<TD><INPUT type="button" name=top value="  1  " onClick="onButtonClicked(this)"></TD>

<TD><INPUT type="button" name=top value="  2  " onClick="onButtonClicked(this)"></TD>

<TD><INPUT type="button" name=top value="  3  " onClick="onButtonClicked(this)"></TD>

<TD><INPUT type="button" name=top value="  4  " onClick="onButtonClicked(this)"></TD>

<TD></TD>
</TR>

<TR>
<TD><INPUT type="button" name=left value="  0  " onClick="onButtonClicked(this)"></TD>

<TD><INPUT type="text" size=3></TD>

<TD><INPUT type="text" size=3></TD>

<TD><INPUT type="text" size=3></TD>

<TD><INPUT type="text" size=3></TD>

<TD><INPUT type="text" size=3></TD>

<TD><INPUT type="button" name=right value="  0  " onClick="onButtonClicked(this)"></TD>
</TR>

<TR>
<TD><INPUT type="button" name=left value="  1  " onClick="onButtonClicked(this)"></TD>

<TD><INPUT type="text" size=3></TD>

<TD><INPUT type="text" size=3></TD>

<TD><INPUT type="text" size=3></TD>

<TD><INPUT type="text" size=3></TD>

<TD><INPUT type="text" size=3></TD>

<TD><INPUT type="button" name=right value="  1  " onClick="onButtonClicked(this)"></TD>
</TR>

<TR>
<TD><INPUT type="button" name=left value="  2  " onClick="onButtonClicked(this)"></TD>

<TD><INPUT type="text" size=3></TD>

<TD><INPUT type="text" size=3></TD>

<TD><INPUT type="text" size=3></TD>

<TD><INPUT type="text" size=3></TD>

<TD><INPUT type="text" size=3></TD>

<TD><INPUT type="button" name=right value="  2  " onClick="onButtonClicked(this)"></TD>
</TR>

<TR>
<TD><INPUT type="button" name=left value="  3  " onClick="onButtonClicked(this)"></TD>

<TD><INPUT type="text" size=3></TD>

<TD><INPUT type="text" size=3></TD>

<TD><INPUT type="text" size=3></TD>

<TD><INPUT type="text" size=3></TD>

<TD><INPUT type="text" size=3></TD>

<TD><INPUT type="button" name=right value="  3  " onClick="onButtonClicked(this)"></TD>
</TR>

<TR>
<TD><INPUT type="button" name=left value="  4  " onClick="onButtonClicked(this)"></TD>

<TD><INPUT type="text" size=3></TD>

<TD><INPUT type="text" size=3></TD>

<TD><INPUT type="text" size=3></TD>

<TD><INPUT type="text" size=3></TD>

<TD><INPUT type="text" size=3></TD>

<TD><INPUT type="button" name=right value="  4  " onClick="onButtonClicked(this)"></TD>
</TR>

<TR>
<TD></TD>

<TD><INPUT type="button" name=bottom value="  0  " onClick="onButtonClicked(this)"></TD>

<TD><INPUT type="button" name=bottom value="  1  " onClick="onButtonClicked(this)"></TD>

<TD><INPUT type="button" name=bottom value="  2  " onClick="onButtonClicked(this)"></TD>

<TD><INPUT type="button" name=bottom value="  3  " onClick="onButtonClicked(this)"></TD>

<TD><INPUT type="button" name=bottom value="  4  " onClick="onButtonClicked(this)"></TD>

<TD></TD>
</TR>
</TABLE></CENTER>