中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > Web开发 > 临时文章
用javascript编写“24点”游戏
作者:未知 时间:2005-07-27 23:34 出处:CSDN 责编:chinaitpower
              摘要:用javascript编写“24点”游戏

<html>
<head>
</head>
<script language='javascript'>
var debug = false;
var steps = new Array();
var ResultSet = new Array();
ResultSet.Add = function(newResult)
{
 for (var i = 0; i < ResultSet.length; i++) 
 {
  if (ResultSet[i] == newResult)
  {
   return;
  }
 }
 ResultSet.push(newResult);
}
ResultSet.toString = function()
{
 var msg = "";
 for (var i = 0; i < ResultSet.length; i++) 
 {
  msg += ResultSet[i] + "=24\n";
 }
 msg += "计算结束,共得到"+ResultSet.length+"个不同结果";
 return msg;
}
function Assert(flag)
{
 if (!flag)
 {
  throw new Error('Assertion failed!');
 }
}
Array.prototype.clone = function()
{
 return this.slice(0);
}
function calcul(stack,oper)
{
 Assert(oper == '+' || oper == '-' || oper == '*' || oper == '/');
 var lift = new Array();
 lift[0] = stack.pop()-0;
 lift[1] = stack.pop()-0;
 switch(oper)
 {
  case '+': stack.push(lift[1] + lift[0]);
      break;
  case '-': stack.push(lift[1] - lift[0]);
      break;
  case '*': stack.push(lift[1] * lift[0]);
      break;
  case '/': stack.push(lift[1] / lift[0]);
      break;
 }
 return lift;
}
function parseExp()   //由逆波兰式构造出表达式
{
 var stack = new Array();
 var exprs = new Array();

 for (var i = 0; i < steps.length; i++)
 {
  if (!isNaN(steps[i]))
  {
   stack.push(steps[i]);
   exprs.push(steps[i].toString());
  }
  else
  {
   var oper1 = exprs.pop();
   var oper2 = exprs.pop();
   var lift = calcul(stack, steps[i]);
   if (steps[i] == '*' || steps[i] == '+')    //规定较大的数出现在*和+的左边,以避免出现过多重复的结果
   {
    if (lift[0] > lift[1])
    {
     var tmp = oper1;
     oper1 = oper2;
     oper2 = tmp;
    }
   }
   var subexpr = "(" + oper2 + ")" + steps[i] + "(" + oper1 + ")";  //判断是否要添加括号
   var subexpr1 = oper2 + steps[i] + oper1;
   var subexpr2 = "(" + oper2 + ")" + steps[i] + oper1;
   var subexpr3 =  oper2 + steps[i] + "(" + oper1 + ")";
   if (Math.abs(eval(subexpr) - eval(subexpr1)) < 0.0001) subexpr = subexpr1;
   else if (Math.abs(eval(subexpr) - eval(subexpr2)) < 0.0001) subexpr = subexpr2;
   else if (Math.abs(eval(subexpr) - eval(subexpr3)) < 0.0001) subexpr = subexpr3;

    exprs.push(subexpr);
  }
 }
 return exprs[0];
}

function playCards(stack, cards)
{
 if (debug) alert(stack + ":" + cards);
 if (stack.length == 1 && cards.length == 0)
 {
  if(Math.abs(stack[0] - 24) < 0.0001)
  {
   ResultSet.Add(parseExp());
  }
  return; //计算结束,输出计算结果
 }
 var newCards = null;
 var newStack = null;

 for(var i = 0 ; i < cards.length; i++)
 {
  var distinctCard = true;
  for (var j = 0; j < i; j++)
  {
   if (cards[j] == cards[i])
   {
    distinctCard = false;
    break;
   }
  }
  if (distinctCard)
  {
   newCards = cards.clone();
   newStack = stack.clone();
   newCards.splice(i,1);
   newStack.push(cards[i]);
   steps.push(cards[i]);
   playCards(newStack, newCards);
   steps.pop(cards[i]);
  }
 }
 
 calCard(stack.clone(),cards.clone(),'+');
 calCard(stack.clone(),cards.clone(),'-');
 calCard(stack.clone(),cards.clone(),'*');
 calCard(stack.clone(),cards.clone(),'/');
}

function calCard(stack,cards,oper)
{
 if (stack.length < 2)
 {
  return;
 }
 steps.push(oper);
 calcul(stack,oper);
 playCards(stack, cards);
 steps.pop(oper);
}

function Play()
{
 var stack = new Array();
 var cards = new Array();
 Result.value = "";
 ResultSet.length = 0;
 for (var i = 0; i < iCards.length; i++)
 {
  if (iCards[i].value == "" || isNaN(iCards[i].value))
  {
   alert('输入格式不正确');
   iCards[i].focus();
   return false;
  }
  cards.push(iCards[i].value);
 }
 
 playCards(stack, cards);
 Result.value += ResultSet.toString();
}
</script>
<body>
         <br/>
 <input id = 'iCards' style='width:80px'/>
 <input id = 'iCards' style='width:80px'/>
 <input id = 'iCards' style='width:80px'/>
 <input id = 'iCards' style='width:80px'/>
 <input type='button' value='计算' onclick="Play();"/><br/><br/>
 计算结果:<br/>
 <textarea id = 'Result' style='width:440px;height:200px'></textarea>
</body>
</html>


关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有