您的位置:首页 > Web前端 > JavaScript

相当棒的24点游戏算法,Javascript写的,不懂,谁能翻译成C/C++?

2008-11-21 10:43 567 查看
24点算法

游戏地址:http://www.prcer.com/tools/24/24-1.html

Javascript代码:

<script language="JavaScript">

// 程序作者:海浪

// 日期:2005-8-13

function lop(j)

{

if(j>0)

{

var ss = lop(j-1);

var px = "";

var oo = "$1"+j+"$2";

for(var k=0; k<=j; k++)

{

var re = new RegExp("(//d{"+k+"})(.*?;)","g");

px += ss.replace(re,oo);

}

return px;

}

else

return "0;";

}

var gt = lop(3).slice(0,-1).split(";");

for(var i=0; i<gt.length; i++)

gt[i] = gt[i].split("");

var ot = [];

var op = ["+","-","*","/"];

for(var x=0; x<4; x++)

for(var y=0; y<4; y++)

for(var z=0; z<4; z++)

{

ot[ot.length] = "( (a"+op[x]+"b)"+op[y]+"c) "+op[z]+"d";

ot[ot.length] = "( a"+op[x]+"(b"+op[y]+"c)) "+op[z]+"d";

ot[ot.length] = "a"+op[x]+"( (b"+op[y]+"c)"+op[z]+"d) ";

ot[ot.length] = "a"+op[x]+"( b"+op[y]+"(c"+op[z]+"d)) ";

ot[ot.length] = "( a"+op[x]+"b) "+op[y]+"(c"+op[z]+"d)";

}

///////////////////////////////////////////////////////////////

var ggcs;

function ggcsclass()

{

this.pjys = 0;

this.zq = 0;

this.cw = 0;

this.hl = 0;

this.gx();

}

function ggcsclass.prototype.gx()

{

k_pjys.innerText = this.zq==0?0:Math.round(this.pjys/this.zq*100)/100;

k_zq.innerText = this.zq;

k_cw.innerText = this.cw;

k_hl.innerText = this.hl;

}

function ggcsclass.prototype.phl()

{

this.hl++;

this.gx();

k_jg.innerText = "此题被忽略!!";

}

function ggcsclass.prototype.pcw()

{

this.cw++;

this.gx();

k_jg.innerText = "错误!!";

}

function ggcsclass.prototype.pzq()

{

var d = jcsl.endDate();

this.pjys += d/1000;

this.zq++;

this.gx();

k_jg.innerText = "正确!用时"+Math.round(d/10)/100+"秒!";

}

window.onload = function()

{

ggcs = new ggcsclass();

}

///////////////////////////////////////////////////////////////

var jcsl=null;

function jclass()

{

this.xpa = [];

this.ssjg = "";

this.wx = 1E-10;

this.date = null;

}

function jclass.prototype.rnd()

{

for(var ii=0; ii<4; ii++)

this.xpa[ii] = Math.floor(Math.random()*10)+1;

}

function jclass.prototype.fapai()

{

for(var ii=0; ii<4; ii++)

document.getElementById("pk"+ii).innerText = this.xpa[ii];

this.date = new Date();

}

function jclass.prototype.endDate()

{

return new Date()-this.date;

}

function jclass.prototype.jw()

{

var a,b,c,d;

this.ssjg= "";

for(var i=0; i<gt.length; i++)

{

a=this.xpa[gt[i][0]]-0;

b=this.xpa[gt[i][1]]-0;

c=this.xpa[gt[i][2]]-0;

d=this.xpa[gt[i][3]]-0;

for(var h=0; h<ot.length; h++)

if(Math.abs(eval(ot[h])-24)<=this.wx)

this.jcf(ot[h].replace("a",a).replace("b",b).replace("c",c).replace("d",d));

}

}

function jclass.prototype.jcf(t)

{

var str = t;

var zz1 = t.replace(/[/(/)]/g,"");

var zz2 = t.replace(/[/(/)] /g,"");

var zz3 = t.replace(/[/(/)](?! )/g,"");

if(Math.abs(eval(zz1)-24)<=this.wx)

str = zz1;

else if(Math.abs(eval(zz2)-24)<=this.wx)

str = zz2;

else if(Math.abs(eval(zz3)-24)<=this.wx)

str = zz3;

var res = str.replace(/ /g,"")+"=24/n";

if(this.ssjg.indexOf(res)==-1)

this.ssjg += res;

}

function jclass.prototype.scda()

{

sskgxx.innerText = "全部答案:/n"+this.ssjg;

}

function jclass.prototype.gx(ss)

{

var sw1 = ss.match(//(/g), sw2 = ss.match(//)/g);

sw1 = (sw1==null)?0:sw1.length;

sw2 = (sw2==null)?0:sw2.length;

if(sw1!=sw2)

return "左右括号个数不一样";

if(!/^/(*(/d+)/)*[/+/-/*//]/(*(/d+)/)*[/+/-/*//]/(*(/d+)/)*[/+/-/*//]/(*(/d+)/)*$/.test(ss))

return "算术表达式格式不正确";

var str = "#"+RegExp.$1+"|#"+RegExp.$2+"|#"+RegExp.$3+"|#"+RegExp.$4+"|";

for(var ii=0; ii<4; ii++)

{

var lok = "#"+this.xpa[ii]+"|";

if(str.indexOf(lok)!=-1)

str = str.replace(lok,"");

else

return "算术表达式中数字不对";

}

return "yes";

}

//////////////////////////////////////////////////////////////

function fpaaSystem()

{

if(jcsl!=null)

ggcs.phl();

jcsl = new jclass();

do {

jcsl.rnd();

jcsl.jw();

} while(jcsl.ssjg=="");

k_jg.innerText = "";

sskgxx.innerText = "";

gstext.value = "";

jcsl.fapai();

}

function fpaaInput()

{

var ins = prompt("请输入四个数字(如: 5,4,7,10)","");

if(ins==null) return;

if(!/^/d{1,2},/d{1,2},/d{1,2},/d{1,2}$/.test(ins)) { alert("输入的内容不正确!");return; }

var vf = jcsl!=null;

jcsl = new jclass();

jcsl.xpa = ins.split(",");

jcsl.jw();

if(jcsl.ssjg=="") { alert("此题无解!!!");return; }

if(vf)

ggcs.phl();

k_jg.innerText = "";

sskgxx.innerText = "";

gstext.value = "";

jcsl.fapai();

}

function ckda()

{

if(jcsl==null) return;

ggcs.phl();

jcsl.scda();

jcsl=null;

}

function okaa()

{

if(jcsl==null) return;

var gs = gstext.value;

var str = jcsl.gx(gs);

if(str!="yes")

{

alert("算式错误:"+str+"!");

return;

}

if(Math.abs(eval(gs)-24)<=jcsl.wx)

ggcs.pzq();

else

ggcs.pcw();

jcsl.scda();

jcsl=null;

}

function tocs(n)

{

if(jcsl==null) return;

gstext.value+=jcsl.xpa
;

}

</script>

谁能翻译下呢?

翻译出来的发邮件给我哦:hm.y@live.cn
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: