24点游戏

<html>
<head>
<title>24点</title>
<meta content='dlpower@163.com' name='author'>
<meta http-equiv='Content-Type' content="text/html; charset=GB2312">
<meta content="MSHTML 6.00.2900.2912" name='GENERATOR'>
</head>
<body>
<br>
计算24点(加、减、乘、除、括号) Javascript版 v1.0<br>
<br>
<br>
<br>
<form>
	请输入四个数字(1-13):<br>
	<br>
	<input size='2' name='fa'><input size='2' name='fb'><input size='2' name='fc'><input size='2' name='fd'><br>
	<br>
	<input onclick='javascript:funCount()' type='button' value=" 计算 " name='btn'><input onclick='javascript:funSend()' type='button' value=" 发牌 " name='btsend'>
</form>
<br>
<br>
<br>
<br>
一副牌(52张)中,任意抽取4张可有1820种不同组合,其中有458个牌组算不出24点。 <br>
<br>
二十世纪80年代中期,孙士杰从上海到美国定居。孙士杰有几位邻居是美国人。邻居家<br>
的小孩到他家串门,他没有别的玩具供孩子们玩,就灵机一动,拿出一副扑克来教他们<br>
玩“24点”。谁知,这一玩,竟令美国孩子着了迷。这些孩子又把这种游戏带回家中和<br>
学校,人们发现这种游戏对开发智力十分有益,后来就在全美推广开了。
<script language='JavaScript'>
  function log(str) {
      document.write("<br>" + str);
  }
  // 生成计算表达式

  function genExpress(exp, a, b, c, d, m1, m2, m3) {
      var exp = exp.replace("a", a);
      exp = exp.replace("b", b);
      exp = exp.replace("c", c);
      exp = exp.replace("d", d);
      exp = exp.replace("m1", m1);
      exp = exp.replace("m2", m2);
      exp = exp.replace("m3", m3);
      return exp;
  }
  var answer = new Array();
  //正确答案的表达式  
  var counter = 0;
  //答案的个数  
   //测试表达式是否正确  

  function test(expn, a, b, c, d, m1, m2, m3) {
      var exp;
      var ret;
      exp = genExpress(expn, a, b, c, d, m1, m2, m3);
      //生成计算表达式   
      eval("ret = " + exp);
      if (ret - 24 < 0.1 && ret - 24 >= 0) {
          exp = exp.replace(";", "");
          exp = replaceAll(exp, "*", "×");
          exp = replaceAll(exp, "/", "÷");
          var have = false;
          for (var i = 0; i < counter; i++) {
              if (exp == answer[i]) {
                  have = true;
                  break;
              }
          }
          if (!have) {
              answer[counter] = exp;
              counter++;
              log("<font color=red><b>" + counter + ":??" + exp + "</b></font>");
          }
      }
  }

  function replaceAll(streng, soeg, erstat) {
      var st = streng;
      if (soeg.length == 0) return st;
      var idx = st.indexOf(soeg);
      while (idx >= 0) {
          st = st.substring(0, idx) + erstat + st.substr(idx + soeg.length);
          idx = st.indexOf(soeg);
      }
      return st;
  }
  var n = new Array();
  //四个数字  
   //接收四个输入框的数字,调用主程序  

  function funCount() {
      n[0] = document.forms[0].fa.value;
      n[1] = document.forms[0].fb.value;
      n[2] = document.forms[0].fc.value;
      n[3] = document.forms[0].fd.value;
      if (n[0] > 0 && n[1] > 0 && n[2] > 0 && n[3] > 0 && n[0] < 14 && n[1] < 14 && n[2] < 14 && n[3] < 14) {
          log("<font size=5><b>" + n[0] + ", " + n[1] + ", " + n[2] + ", " + n[3] + "的24点答案:</b></font><br>");
          log("<input type='button' onclick='history.back();' value=' 再来一次 '><br>");
          funMain();
          if (counter == 0) {
              log("没有答案!");
          }
      } else {
          alert("输入错误!");
      }
  }

  function funSend() {
      var a = new Array();
      a[0] = document.forms[0].fa;
      a[1] = document.forms[0].fb;
      a[2] = document.forms[0].fc;
      a[3] = document.forms[0].fd;
      for (var i = 0; i < 4; i++) {
          a[i].value = parseInt(Math.random() * 13 + 1);
      }
  }
  //主程序  

  function funMain() {
      var m = new Array();
      //四种运算符      
      m[0] = "+";
      m[1] = "-";
      m[2] = "*";
      m[3] = "/";
      //11种表达式      
      var exp1 = "a m1 b m2 c m3 d;";
      var exp2 = "(a m1 b) m2 c m3 d;";
      var exp3 = "(a m1 b m2 c) m3 d;";
      var exp4 = "((a m1 b) m2 c) m3 d;";
      var exp5 = "(a m1 (b m2 c)) m3 d;";
      var exp6 = "a m1 (b m2 c) m3 d;";
      var exp7 = "a m1 (b m2 c m3 d);";
      var exp8 = "a m1 ((b m2 c) m3 d);";
      var exp9 = "a m1 (b m2 (c m3 d));";
      var exp10 = "a m1 b m2(c m3 d);";
      var exp11 = "(a m1 b) m2 (c m3 d);";
      var a, b, c, d;
      //四个数字      
      var m1, m2, m3;
      //三个运算符            
      for (var i = 0; i < 4; i++) {
          a = n[i];
          for (var j = 0; j < 4; j++) {
              if (i == j) break;
              //从未选的三个数字中选择一个数字        
              b = n[j];
              for (var x = 0; x < 4; x++) {
                  if (j == x) break;
                  //从未选的两个数字中选择一个数字         
                  c = n[x];
                  for (var y = 0; y < 4; y++) {
                      if (x == y) break;
                      //从未选的一个数字中选择一个数字          
                      d = n[y];
                      for (var ta = 0; ta < 4; ta++) {
                          m1 = m[ta];
                          for (var tb = 0; tb < 4; tb++) {
                              m2 = m[tb];
                              for (var tc = 0; tc < 4; tc++) {
                                  m3 = m[tc];
                                  for (var k = 1; k < 11; k++) {
                                      eval("test(exp" + k + ",a,b,c,d,m1,m2,m3);");
                                  }
                              }
                          }
                      }
                  }
              }
          }
      }
  } 
  </script>
  </body>
</html>

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部