正文

N年前写的抢24扑克游戏2007-01-26 19:20:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/elove/22840.html

分享到:

感觉算法还是有些笨,不过现在已没时间改进它了。 源代码如下: <html> <!-- ###################################################### #             Copyright 2002-2003                    # #                                                    # #             Written by neweroica                   # ###################################################### --> <title>neweroica的抢24游戏</title> <!--------------作者:neweroica(aqyw)----------------> <h2>24点游戏初解</h2> <h4>作者:neweroica(aqyw)</h4> <input type=hidden name=a1> <input type=hidden name=b1> <input type=hidden name=c1> <input type=hidden name=d1> <table> <tr> <td> <b id=a2 style="width:60;height:100;font-size:25pt;cursor:hand;background:#ff8888;border:solid 1px #000000;"  onclick=addN(a1.value)> </b> <b id=b2 style="width:60;height:100;font-size:25pt;cursor:hand;background:#ff8888;border:solid 1px #000000;"  onclick=addN(b1.value)> </b> <b id=c2 style="width:60;height:100;font-size:25pt;cursor:hand;background:#ff8888;border:solid 1px #000000;"  onclick=addN(c1.value)> </b> <b id=d2 style="width:60;height:100;font-size:25pt;cursor:hand;background:#ff8888;border:solid 1px #000000;"  onclick=addN(d1.value)> </b> <p> <input type=button value=发牌 ōnclick=cards(0)> <input type=button value=自定 ōnclick=cards(1)> <font color=#00aa00>正确</font><b id=correct style="width:30;height:;border:solid 1px #aaaa88;">0</b> <font color=#aa0000>错误</font><b id=wrong style="width:30;height:;border:solid 1px #aaaa88;">0</b> <font color=#0000aa>正确率</font><b id=yeild style="width:60;height:;border:solid 1px #aaaa88;">0</b> </p> </td> <td> <table cellspacing=2 cellpadding=2> <tr> <td colspan=4> <b id=formula style="color:#000088;width:200;height:25;border:solid 1px #880000;"> </b> </td> </tr> <tr> <td> <input type=button value=+ style="width:30;height:30" ōnclick=add()> </td> <td> <input type=button value=- style="width:30;height:30" ōnclick=minus()> </td> <td> <input type=button value=* style="width:30;height:30" ōnclick=mult()> </td> <td> <input type=button value=/ style="width:30;height:30" ōnclick=divd()> </td> </tr> <tr> <td> <input type=button value=( style="width:30;height:30" ōnclick=lbr()> </td> <td> <input type=button value=) style="width:30;height:30" ōnclick=rbr()> </td> <td> <input type=button value== style="width:30;height:30" ōnclick=equ()> </td> <td> <input type=button value=← style="width:30;height:30" ōnclick=bkspc()> </td> </tr> <tr> <td> <input type=button value=重置 ōnclick=resetit()> </td> <td> <input type=button value=无解 ōnclick=abort()> </td> <td colspan=2> <input type=button value=查看答案 ōnclick=cal()> </td> </tr> </table> </td> </tr> </table> <p id=showit style="color:#aa3388;width:300;height:150;border:solid 1px #008800;"> </p> <scrīpt> function numToChar(n){  //数字的单个字符表示;   return unescape('%u'+(n+1000)); } function charToNum(c){  //单个字符表示对应的数字;   return parseInt(escape(c).substring(2,100))-1000; } var cardInf='',cardInf0; var cardS=new Array(0,'A',2,3,4,5,6,7,8,9,10,'J','Q','K'); var typ=new Array(0,1,2,3); var typhtml=new Array( '<font color=#000000>'+unescape('%u2660'), '<font color=#000000>'+unescape('%u2663'), '<font color=#ff0000>'+unescape('%u2665'), '<font color=#ff0000>'+unescape('%u2666')); for(var i=1;i<=13;i++){   for(var j=0;j<4;j++){     cardInf+=numToChar(i)+typ[j];   } } cardInf0=cardInf; var mode=new Array(); mode[0]='a+b+c+d'; mode[1]='a+b+c-d'; mode[2]='a+b-c-d'; mode[3]='a*b+c+d'; mode[4]='a*b*c+d'; mode[5]='a*b+c*d'; mode[6]='a*b*c*d'; mode[7]='a/b+c+d'; mode[8]='a/b/c+d'; mode[9]='a/b+c/d'; mode[10]='a*b*c/d'; mode[11]='a*b/c/d'; mode[12]='a*b/c+d'; mode[13]='a/b+c*d'; mode[14]='a*b-c-d'; mode[15]='a*b*c-d'; mode[16]='a*b-c*d'; mode[17]='a*b/c-d'; mode[18]='a*b+c-d'; mode[19]='(a+b+c)*d'; mode[20]='(a+b-c)*d'; mode[21]='(a*b+c)*d'; mode[22]='(a*b-c)*d'; mode[23]='(a/b+c)*d'; mode[24]='(a/b-c)*d'; mode[25]='(a+b+c)/d'; mode[26]='(a+b-c)/d'; mode[27]='(a*b+c)/d'; mode[28]='(a*b-c)/d'; mode[29]='(a/b+c)/d'; mode[30]='(a+b)*c+d'; mode[31]='(a-b)*c+d'; mode[32]='(a+b)/c+d'; mode[33]='(a-b)/c+d'; mode[34]='(a+b)*c-d'; mode[35]='(a-b)*c-d'; mode[36]='(a+b)/c-d'; mode[37]='(a+b)*c*d'; mode[38]='(a-b)*c*d'; mode[33]='(a+b)/c*d'; mode[40]='(a-b)/c*d'; mode[41]='(a+b)/c/d'; mode[42]='(a+b)*(c+d)'; mode[43]='(a+b)*(c-d)'; mode[44]='(a-b)*(c-d)'; mode[45]='(a+b)/(c+d)'; mode[46]='(a+b)/(c-d)'; mode[47]='a/b+c-d'; mode[48]='a+b/(c+d)'; mode[49]='a*b/(c+d)'; mode[50]='a+b/(c-d)'; mode[51]='a*b/(c-d)'; mode[52]='a/(b-c/d)'; var vari=new Array( '0123', '0132', '0213', '0231', '0312', '0321', '1023', '1032', '1203', '1230', '1302', '1320', '2013', '2031', '2103', '2130', '2301', '2310', '3012', '3021', '3102', '3120', '3201', '3210'); var z=new Array(); var zt=new Array(); function cards(ifmine){   formula.innerHTML='';   showit.innerHTML=''; if(ifmine){   z[0]=prompt('第一张牌的数字:','');   z[1]=prompt('第二张牌的数字:','');   z[2]=prompt('第三张牌的数字:','');   z[3]=prompt('第四张牌的数字:','');   for(var i=0;i<4;i++){     zt[i]='<font color=#000088>';   } } else{   for(var i=0;i<4;i++){     var index=2*Math.floor(cardInf.length/2*Math.random());     var cardN=cardInf.charAt(index);     z[i]=charToNum(cardN);     zt[i]=typhtml[parseInt(cardInf.charAt(index+1))];     cardInf=cardInf.substring(0,index)+cardInf.substring(index+2,cardInf.length);   }   if(cardInf==''){     alert('52张牌已全部发完!nn正确:'+correct.innerHTML+';错误:'+wrong.innerHTML+';正确率:'+yeild.innerHTML+'。nnn再来一局!');     cardInf=cardInf0;     a2.innerHTML='';     b2.innerHTML='';     c2.innerHTML='';     d2.innerHTML='';     a2.style.backgroundColor='#ff8888';     b2.style.backgroundColor='#ff8888';     c2.style.backgroundColor='#ff8888';     d2.style.backgroundColor='#ff8888';     a1.value='';     b1.value='';     c1.value='';     d1.value='';     correct.innerHTML=0;     wrong.innerHTML=0;     yeild.innerHTML=0;     return 0;   } }   a1.value=z[0];   b1.value=z[1];   c1.value=z[2];   d1.value=z[3];   var m1='<br><center>',m2='</center></font>';   a2.innerHTML=zt[0]+m1+cardS[z[0]]+m2;   b2.innerHTML=zt[1]+m1+cardS[z[1]]+m2;   c2.innerHTML=zt[2]+m1+cardS[z[2]]+m2;   d2.innerHTML=zt[3]+m1+cardS[z[3]]+m2;   a2.style.backgroundColor='#ffffee';   b2.style.backgroundColor='#ffffee';   c2.style.backgroundColor='#ffffee';   d2.style.backgroundColor='#ffffee'; } function cal(){   showit.innerHTML='<br>标准答案:<br>';   var p=0;   for(i=0;i<mode.length;i++){     for(j=0;j<24;j++){       a=parseInt(z[vari[j].charAt(0)]);       b=parseInt(z[vari[j].charAt(1)]);       c=parseInt(z[vari[j].charAt(2)]);       d=parseInt(z[vari[j].charAt(3)]);       var s=mode[i];       var result=eval(s);       if(Math.abs(result-24)<1E-5){         var ina=mode[i].indexOf('a');         var inb=mode[i].indexOf('b');         var inc=mode[i].indexOf('c');         var ind=mode[i].indexOf('d');         showit.innerHTML+=mode[i].substring(0,ina)+a+mode[i].substring(ina+1,inb)+b+mode[i].substring(inb+1,inc)+c+mode[i].substring(inc+1,ind)+d+mode[i].substring(ind+1,mode[i].length)+'=24n';         showit.innerHTML+='<br>';         p=1;         break;       }     }   }   if(p) return 0;   else showit.innerHTML='无解'; } function addN(v,n){     formula.innerHTML+=v; } function add(){   formula.innerHTML+='+'; } function minus(){   formula.innerHTML+='-'; } function mult(){   formula.innerHTML+='*'; } function divd(){   formula.innerHTML+='/'; } function lbr(){   formula.innerHTML+='('; } function rbr(){   formula.innerHTML+=')'; } function equ(){   var v=eval(formula.innerHTML);   if(v-Math.floor(v)<1E-5||v-Math.floor(v)>9E-6)     v=Math.round(v);   formula.innerHTML+='='+v;   cal();   var temp=showit.innerHTML;   var rt=parseInt(correct.innerHTML);   var wg=parseInt(wrong.innerHTML);   if(v==24){     showit.innerHTML='正确!'+temp;     correct.innerHTML=rt+1;   }   else{     showit.innerHTML='错误!'+temp;     wrong.innerHTML=wg+1;   }   rt=parseInt(correct.innerHTML);   wg=parseInt(wrong.innerHTML);   yeild.innerHTML=Math.floor(rt/(rt+wg)*10000)/100+'%'; } function bkspc(){   var s=formula.innerHTML;   formula.innerHTML=s.substring(0,s.length-1); } function resetit(){   formula.innerHTML=''; } function abort(){   cal();   var temp=showit.innerHTML;   var rt=parseInt(correct.innerHTML);   var wg=parseInt(wrong.innerHTML);   if(showit.innerHTML=='无解'){     showit.innerHTML='正确!<br>确实无解。'     correct.innerHTML=rt+1;   }   else{     showit.innerHTML='错误!'+temp;     wrong.innerHTML=wg+1;   }   rt=parseInt(correct.innerHTML);   wg=parseInt(wrong.innerHTML);   yeild.innerHTML=Math.floor(rt/(rt+wg)*10000)/100+'%';   } </scrīpt> </html>    

阅读(4772) | 评论(1)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册