topical media & game development

talk show tell print

game-javascript-math-ucla-chomp.htm / htm



  <html><head><title>Chomp</title>
  
  <script language="JavaScript">
  var blank = "blank.gif";
  var brown = "brown.jpeg";
  var poison = "poison.jpeg";
  
  var c=7;                //c = # columns.  Require 6 <= c <= 10.
  var x,y;
  var 
  ppos=[1,12,23,34,45,56,113,122,224,235,246,336,355,1114,1125,1133,1222,2226,2255,2335];
      //perfect play for c=7 is achieved by adding 
      //67,257,347,477,2237,2357,2447,3377,3457,4557 to ppos. 
      //but ppos must be arranged in increasing order. 
      //For c=8, add 78,268,448,2248,2368,2458,2588,3338.
  var n = [];
  var box = [];
  
  for (var i=1;i<=4;i++) {
      box[i]=[];
  }
  
  function yourChoice(u,v) {
      if (box[u][v]==1) {
          Move(u,v);
          encode();
          if (n[1]+n[2]==1) {
              alert("Good work!\n You won!");
              return;
          }
          x=findMove();
          Move(x,y+1);
          if (box[1][2]+box[2][1]==0) alert("Nice try,\n but I won!");
      }    
  }
  
  function Move(x,y) {
      for (var k1=x;k1<=4;k1++) {
          for (var k2=y;k2<=c;k2++) {
              document.images[(4-k1)*c+k2-1].src=blank;
              box[k1][k2]=0;
          }
      }
  }
  
  function encode() {               //maps position into n[1],n[2],n[3],n[4]
      for (var i=1;i<5;i++) {
          n[i]=0;
          for (var j=1;j<=c;j++) {
              n[i]=n[i]+box[i][j];
          }
      }
      n[1]=n[1]+1;
  }
  
  function findMove() {
      var t=10
      var k=ppos.length-1;
      for (y=n[1]-1;y>=n[2];y--) {
          val=y+t*(n[2]+t*(n[3]+t*n[4]));
          while (val<ppos[k]) k--;
          if (val==ppos[k]) {return 1};
      }
      for (y=n[2]-1;y>=n[3];y--) {
          val=n[1]+t*(y+t*(n[3]+t*n[4]));
          while (val<ppos[k]) k--;
          if (val==ppos[k]) {return 2};
          val=y+t*(y+t*(n[3]+t*n[4]));
          while (val<ppos[k]) k--;
          if (val==ppos[k]) {return 1};
      }
      for (y=n[3]-1;y>=n[4];y--) {
          val=n[1]+t*(n[2]+t*(y+t*n[4]));
          while (val<ppos[k]) k--;
          if (val==ppos[k]) {return 3};
          val=n[1]+t*(y+t*(y+t*n[4]));
          while (val<ppos[k]) k--;
          if (val==ppos[k]) {return 2};
          val=y+t*(y+t*(y+t*n[4]));
          while (val<ppos[k]) k--;
          if (val==ppos[k]) {return 1};
      }
      for (y=n[4]-1;y>=0;y--) {
          val=n[1]+t*(n[2]+t*(n[3]+t*y));
          while (val<ppos[k]) k--;
          if (val==ppos[k]) {return 4};
          val=n[1]+t*(n[2]+t*(y+t*y));
          while (val<ppos[k]) k--;
          if (val==ppos[k]) {return 3};
          val=n[1]+t*(y+t*(y+t*y));
          while (val<ppos[k]) k--;
          if (val==ppos[k]) {return 2};
          val=y+t*(y+t*(y+t*y));
          while (val<ppos[k]) k--;
          if (val==ppos[k]) {return 1};
      }
     if ((Math.random()>.4) && (n[4]>0)) {
         y=n[4]-1;
         return 4;
     } else if ((Math.random()>.5) && (n[3]>0)) {
         y=n[3]-1;
         return 3;
     } else if ((Math.random()>.67) && (n[2]>0)) {
         y=n[2]-1;
         return 2;
     } else {
         y=n[1]-1;
         return 1;
     }
  }
  
  function playAgain() {
      for (var i=4;i>0;i--) {
          for (var j=1;j<=c;j++) {
              document.images[c*(i-1)+j-1].src= brown;
              box[i][j]=1
          }
      }
      document.images[c*3].src= poison;
      box[1][1]=0;
  }
  
  </script><script charset="utf-8" id="injection_graph_func" src="game-javascript-math-ucla-injection_graph_func.js"></script></head><body>
  
  <center>
  <hr size="5">
  <h1>CHOMP!</h1>
  <i>JavaScript</i>
  <hr size="5">
  The game of Chomp is like Russian Roulette for chocolate lovers.<br>A move 
  consists of chomping a square out of the chocolate bar<br>along with any 
  squares to the right and above.<br>Players alternate moves.<p>
  
  The lower left square is poisoned though and the player forced to chomp 
  it loses.</p><p>
  
  Try your luck against the machine.<br>You chomp on a square by clicking on 
  the square with the mouse.<br>You move first.  You can win from the initial 
  position, but be careful!
  
  <script language="JavaScript">
  
  document.write("<form name=game><table border=1 cellpadding=0 cellspacing=0><tr>");
  for (var i=4;i>0;i--) {
      for (var j=1;j<=c;j++) {
          document.write('<td><a href="javascript:yourChoice('+i+','+j+')">'
          +'<img src="brown.jpeg" border=0 height=40 width=40></a></td>');
      }
      document.write("</tr><tr>");
  }
  document.write("</tr></table>");
  document.write("<input type=button value='New Game' onClick='playAgain();'>");
  document.write("</form><p>");
  playAgain();
  
  </script></p><form name="game"><table border="1" cellpadding="0" cellspacing="0"><tbody><tr><td><a href="javascript:yourChoice(4,1)"><img src="game-javascript-math-ucla-brown.jpg" border="0" height="40" width="40"></a></td><td><a href="javascript:yourChoice(4,2)"><img src="game-javascript-math-ucla-brown.jpg" border="0" height="40" width="40"></a></td><td><a href="javascript:yourChoice(4,3)"><img src="game-javascript-math-ucla-brown.jpg" border="0" height="40" width="40"></a></td><td><a href="javascript:yourChoice(4,4)"><img src="game-javascript-math-ucla-brown.jpg" border="0" height="40" width="40"></a></td><td><a href="javascript:yourChoice(4,5)"><img src="game-javascript-math-ucla-brown.jpg" border="0" height="40" width="40"></a></td><td><a href="javascript:yourChoice(4,6)"><img src="game-javascript-math-ucla-brown.jpg" border="0" height="40" width="40"></a></td><td><a href="javascript:yourChoice(4,7)"><img src="game-javascript-math-ucla-brown.jpg" border="0" height="40" width="40"></a></td></tr><tr><td><a href="javascript:yourChoice(3,1)"><img src="game-javascript-math-ucla-brown.jpg" border="0" height="40" width="40"></a></td><td><a href="javascript:yourChoice(3,2)"><img src="game-javascript-math-ucla-brown.jpg" border="0" height="40" width="40"></a></td><td><a href="javascript:yourChoice(3,3)"><img src="game-javascript-math-ucla-brown.jpg" border="0" height="40" width="40"></a></td><td><a href="javascript:yourChoice(3,4)"><img src="game-javascript-math-ucla-brown.jpg" border="0" height="40" width="40"></a></td><td><a href="javascript:yourChoice(3,5)"><img src="game-javascript-math-ucla-brown.jpg" border="0" height="40" width="40"></a></td><td><a href="javascript:yourChoice(3,6)"><img src="game-javascript-math-ucla-brown.jpg" border="0" height="40" width="40"></a></td><td><a href="javascript:yourChoice(3,7)"><img src="game-javascript-math-ucla-brown.jpg" border="0" height="40" width="40"></a></td></tr><tr><td><a href="javascript:yourChoice(2,1)"><img src="game-javascript-math-ucla-brown.jpg" border="0" height="40" width="40"></a></td><td><a href="javascript:yourChoice(2,2)"><img src="game-javascript-math-ucla-brown.jpg" border="0" height="40" width="40"></a></td><td><a href="javascript:yourChoice(2,3)"><img src="game-javascript-math-ucla-brown.jpg" border="0" height="40" width="40"></a></td><td><a href="javascript:yourChoice(2,4)"><img src="game-javascript-math-ucla-brown.jpg" border="0" height="40" width="40"></a></td><td><a href="javascript:yourChoice(2,5)"><img src="game-javascript-math-ucla-brown.jpg" border="0" height="40" width="40"></a></td><td><a href="javascript:yourChoice(2,6)"><img src="game-javascript-math-ucla-brown.jpg" border="0" height="40" width="40"></a></td><td><a href="javascript:yourChoice(2,7)"><img src="game-javascript-math-ucla-brown.jpg" border="0" height="40" width="40"></a></td></tr><tr><td><a href="javascript:yourChoice(1,1)"><img src="game-javascript-math-ucla-poison.jpg" border="0" height="40" width="40"></a></td><td><a href="javascript:yourChoice(1,2)"><img src="game-javascript-math-ucla-brown.jpg" border="0" height="40" width="40"></a></td><td><a href="javascript:yourChoice(1,3)"><img src="game-javascript-math-ucla-brown.jpg" border="0" height="40" width="40"></a></td><td><a href="javascript:yourChoice(1,4)"><img src="game-javascript-math-ucla-brown.jpg" border="0" height="40" width="40"></a></td><td><a href="javascript:yourChoice(1,5)"><img src="game-javascript-math-ucla-brown.jpg" border="0" height="40" width="40"></a></td><td><a href="javascript:yourChoice(1,6)"><img src="game-javascript-math-ucla-brown.jpg" border="0" height="40" width="40"></a></td><td><a href="javascript:yourChoice(1,7)"><img src="game-javascript-math-ucla-brown.jpg" border="0" height="40" width="40"></a></td></tr><tr></tr></tbody></table><input value="New Game" onclick="playAgain();" type="button"></form><p>
  
  </p></center></body></html>
  


(C) Æliens 20/2/2008

You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.