Arrange Game : Game : Page Components JAVASCRIPT DHTML TUTORIALS


JAVASCRIPT DHTML TUTORIALS » Page Components » Game »

 

Arrange Game



<!----------------------------------------------------------------
|                                                                 |
|  Fair License                                                   |
|                                                                 |
|  JS Games :: Arrange                                            |
|  Copyright (C2002-2004 Arun Narayanan                         |
|                                                                 |
|  For latest release information and downloads visit:            |
|  http://jsgames.sourceforge.net/                                |
|                                                                 |
|  Usage of the works is permitted provided that this             |
|  instrument is retained with the works, so that any entity      |
|  that uses the works is notified of this instrument.            |
|                                                                 |
|  DISCLAIMER: THE WORKS ARE WITHOUT WARRANTY.                    |
|                                                                 |
|  [2004, Fair License: rhid.com/fair]                            |
|                                                                 |
----------------------------------------------------------------->

<html>
<head>
<title>!!! JS Games :: Arrange !!!</title>
<style>
.bigcell {
  background-color:#cccccc;
  border:4px solid #999999;
  text-align:center;
}
.cell {
  width:36px;
  height:40px;
  font-family:Verdana, Arial;
  font-size:10pt;
  font-weight:bold;
  background-color:#606060;
  color:#ffffff;
  border-top:3px solid #cccccc;
  border-left:3px solid #cccccc;
  border-right:3px solid #000000;
  border-bottom:3px solid #000000;
  text-align:center;
}
.hole {
  width:36px;
  height:40px;
  background-color:#999999;
  text-align:center;
}
body,h1,h2,h3,.msg,capt1,capt2,td {font-family:Verdana,Comic Sans MS,Arial;}
body {margin:0px;}
h1 {font-size:28pt; font-weight:bold; margin-bottom:0px;}
h2,.h2 {font-size:22pt; margin:0px; font-weight:bold; padding:0px;}
h3 {font-size:8pt; margin:0px; font-weight:bold;}
.msg {font-size:8pt; font-weight:bold;}
.tab {cursor:hand;}
.capt1 {font-size:10pt; font-weight:bold;}
.capt2 {font-size:9pt; font-weight:bold;}
.capt3 {font-size:14pt; font-weight:bold; color:yellow;}
.capt4 {font-size:10pt; font-weight:bold; color:yellow;}
.but {font-size:8pt; font-weight:bold; height:24px; background-color:#606060; background-image:url(images/butbase.gif);
      border:0px solid #cccccc; border-left:none; border-right:none; color:white;}
.bnote {font-size:8pt; font-weight:normal;color:white;}
a.notelnk,a.notelnk:visited,a.notelnk:active {font-size:8pt; font-weight:normal; color:#66ffcc;}
.bnotehead {font-size:10pt; font-weight:bold;color:#66ffcc;}
.email {font-size:8pt; font-weight:bold; color:white;}
.fra {border:2px solid #999999; background-color:#606060;}
.clsThisGame, .clsBar {font-size:8pt; font-weight:bold; color:#cccccc;}
.clsBar {margin:0px; font-size:8pt; font-weight:bold; color:#ffffff;}
.clsOtherGame {margin:0px; font-size:8pt; font-weight:bold; color:#ffffff; text-decoration:none;}
.help {font-size:8pt; margin:0px; font-weight:bold;}
.menubar {padding:0px; margin:0px; brder-top:1px solid white; brder-bottom:1px solid white; background-color:#606060;
          background-image:url(images/menu.gif);}
</style>
<script>
var gsize, ghrow, ghcol, gtime, gmoves, gintervalid=-1, gshuffling;

function toggleHelp()
{
  if (butHelp.value == "Hide Help")
  {
    help.style.display = "none";
    butHelp.value = "Show Help";
  }
  else
  {
    help.style.display = "";
    butHelp.value = "Hide Help";
  }  
}

//random number between low and hi
function r(low,hi)
{
  return Math.floor((hi-low)*Math.random()+low)
}

//random number between 1 and hi
function r1(hi)
{
  return Math.floor((hi-1)*Math.random()+1)
}

//random number between 0 and hi
function r0(hi)
{
  return Math.floor((hi)*Math.random())
}

function startGame()
{
  shuffle();
  gtime = 0;
  gmoves = 0;
  clearInterval(gintervalid);
  tickTime();
  gintervalid = setInterval("tickTime()",1000);
}

function stopGame()
{
  if (gintervalid==-1return;
  clearInterval(gintervalid);
  fldStatus.innerHTML = "";
  gintervalid=-1;
}

function tickTime()
{
  showStatus();
  gtime++;
}

function checkWin()
{
  var i, j, s;
  
  if (gintervalid==-1return//game not started!
  
  if (!isHole(gsize-1,gsize-1)) return;
  
  for (i=0;i<gsize;i++)
    for (j=0;j<gsize;j++)
    {
      if (!(i==gsize-&& j==gsize-1)) //ignore last block (ideally a hole)
      {
       if (getValue(i,j)!=(i*gsize+j+1).toString()) return;
      }
    }
  stopGame();

  s = "<table cellpadding=4>";
  s += "<tr><td align=center class=capt3>!! CONGRATS !!</td></tr>";
  s += "<tr class=capt4><td align=center>You have done it in " + gtime + " secs ";
  s += "with " + gmoves + " moves!</td></tr>";
  s += "<tr><td align=center class=capt4>Your speed is " + Math.round(1000*gmoves/gtime)/1000 " moves/sec</td></tr>";
  s += "</table>";
  fldStatus.innerHTML = s;
//  shuffle();
}

function showStatus()
{
  fldStatus.innerHTML = "Time:&nbsp;" + gtime + " secs&nbsp;&nbsp;&nbsp;Moves:&nbsp;" + gmoves
}

function showTable()
{
  var i, j, s;
  
  stopGame();
  s = "<table border=3 cellpadding=0 cellspacing=0 bgcolor='#666655'><tr><td class=bigcell>";
  s = s + "<table border=0 cellpadding=0 cellspacing=0>";
  for (i=0; i<gsize; i++)
  {
    s = s + "<tr>";    
    for (j=0; j<gsize; j++)
    {
      s = s + "<td id=a_" + i + "_" + j + " onclick='move(this)' class=cell>" (i*gsize+j+1"</td>";
    }
    s = s + "</tr>";        
  }
  s = s + "</table>";
  s = s + "</td></tr></table>";      
  return s;
}

function getCell(row, col)
{
  return eval("a_" + row + "_" + col);
}

function setValue(row,col,val)
{
  var v = getCell(row, col);
  v.innerHTML = val;
  v.className = "cell";
}

function getValue(row,col)
{
//  alert(row + "," + col);

  var v = getCell(row, col);
  return v.innerHTML;
}

function setHole(row,col)

  var v = getCell(row, col);
  v.innerHTML = "";
  v.className = "hole";
  ghrow = row;
  ghcol = col;
}

function getRow(obj)
{
  var a = obj.id.split("_");
  return a[1];
}

function getCol(obj)
{
  var a = obj.id.split("_");
  return a[2];
}

function isHole(row, col)
{
  return (row==ghrow && col==ghcoltrue false;
}

function getHoleInRow(row)
{
  var i;
  
  return (row==ghrow? ghcol : -1;
}

function getHoleInCol(col)
{
  var i;

  return (col==ghcol? ghrow : -1;
}

function shiftHoleRow(src,dest,row)
{
  var i;

  //conversion to integer needed in some cases!
  src = parseInt(src);
  dest = parseInt(dest);

  if (src < dest)
  {
    for (i=src;i<dest;i++)
    {
      setValue(row,i,getValue(row,i+1));
      setHole(row,i+1);
    }
  }
  if (dest < src)
  {
    for (i=src;i>dest;i--)
    {
      setValue(row,i,getValue(row,i-1));
      setHole(row,i-1);
    }
  }
}

function shiftHoleCol(src,dest,col)
{
  var i;
  
  //conversion to integer needed in some cases!
  src = parseInt(src);
  dest = parseInt(dest);
    
  if (src < dest)
  {//alert("src=" + src +" dest=" + dest + " col=" + col);
    for (i=src;i<dest;i++)
    {//alert(parseInt(i)+1);
      setValue(i,col,getValue(i+1,col));
      setHole(i+1,col);
    }
  }
  if (dest < src)
  {
    for (i=src;i>dest;i--)
    {
      setValue(i,col,getValue(i-1,col));
      setHole(i-1,col);
    }
  }
}

function move(obj)
{
  var r, c, hr, hc;

  if (gintervalid==-&& !gshuffling
  {
    alert('Please press the "Start Game" button to start.')
    return;
  }
  r = getRow(obj);
  c = getCol(obj);
  if (isHole(r,c)) return;
  
  hc = getHoleInRow(r);
  if (hc != -1)
  {
    shiftHoleRow(hc,c,r);
    gmoves++;
    checkWin();
    return;
  }
  
  hr = getHoleInCol(c);

  if (hr != -1)
  {
    shiftHoleCol(hr,r,c);
    gmoves++;
    checkWin();
    return;
  }
}

function shuffle()
{
  var t,i,j,s,frac;

  gshuffling =  true;
  frac = 100.0/(gsize*(gsize+10));
  s = "% ";
  for (i=0;i<gsize;i++)
  {
    s += "|";
    for (j=0;j<gsize+10;j++)
    {  
      window.status = "Loading " + Math.round((i*(gsize+10+ j)*frac+ s  
      if (j%2==0)
      {
        t = r0(gsize);
        while (t == ghrowt = r0(gsize)//skip holes
        getCell(t,ghcol).click();
      
      else
      {
        t = r0(gsize);
        while (t == ghcolt = r0(gsize)//skip holes
        getCell(ghrow,t).click();
      }
    }
  }
  window.status = "";
  gshuffling = false;
}

function loadBoard(size)
{
  gsize = size;
  
  board.innerHTML = showTable(gsize);
  setHole(gsize-1,gsize-1);
  //shuffle();
}
</script>
</head>
<body bgcolor="black" text="white" onload="toggleHelp();loadBoard(4);" background="images/bkg.gif">
<center>
<h1>JS Games!</h1>
<span class=msg>Copyright &copy; 2002-2004 Arun Narayanan</span><br>

<br>&nbsp;
<table width="450" class=fra cellpadding=cellspacing=border=0><tr><td>

<table width=100% cellpadding=cellspacing=0>
<tr><td colspan=class=bnotehead height=31>Important Note:</td></tr>
<tr><td class=bnote valign=top>This game is written entirely using JavaScript. It requires Internet Explorer Version or above
for proper functioning.
</td>
</tr></table>

</td></tr></table>
<br>

<table width=620 height=47 border=cellpadding=cellspacing=0>
<tr><td colspan=height=16></td></tr>
<tr>
<td width=8>&nbsp;</td><td class=h2 align=center width=98%>Arrange</td>
<td align=right valign=bottom><input type=button id=butHelp value="Hide Help" class="but" onclick="toggleHelp()"></td>
<td width=8>&nbsp;</td>
</tr>
</table>

<table id=help width=620 border=cellpadding=cellspacing=0>
<tr><td height="10"></td></tr>
<tr><td class=help>
<ol>
<li>Choose a Level (to 10).</li>
<li>The game board has blocks with numbers in it. Also there is a single "hole" that can be used for moving the blocks.</li>
<li>The objective of the game is to order the numbers using the "hole" for temporary movement.</li>
<li>Press the "Start Game" button. The timer would be started.</li>
<li>Move blocks in a row by clicking on them. A block can be moved only if it is in the same row or column as the "hole".</li>
<li>You can move multiple blocks (in the same row or column as the "hole"by clicking the farthest block that you need to be moved.</li>
</ol>
</td></tr>
</table>
<table width=620 border=cellpadding=cellspacing=0>
<tr><td height=29><td valign=middle align=center><h3>Order all the numbers in the shortest time possible with a minimum number of moves...
</h3></td></tr>
</table>
<p>
<div id=test></div>
<table cellpadding=4>
<tr><td align=center>
<b>Choose Level: </b>
<select id=level onchange="loadBoard(parseInt(level.value))">
<option value='3'>3</option>
<option value='4' selected>4</option>
<script>
for (var i=5;i<=10;i++)
{
  document.write("<option value='" + i + "'>" + i + "</option>");
}
</script>
</select>
</td></tr>
<tr><td align=center>
<input type=button class=but value="Start Game" onclick="startGame();">
<tr><td align=center id=fldStatus class=capt2>
</td></tr>
</table>
<div id=board></div>
</CENTER>
<br>
</body>
</html>


           
       



-

Leave a Comment / Note


 
Verification is used to prevent unwanted posts (spam). .

Follow Navioo On Twitter

JAVASCRIPT DHTML TUTORIALS

 Navioo Page Components
» Game