正文

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

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

分享到:

感觉算法还是有些笨,不过现在已没时间改进它了。

源代码如下:

  1. <html>
  2. <!--
  3. ######################################################
  4. #             Copyright 2002-2003                    #
  5. #                                                    #
  6. #             Written by neweroica                   #
  7. ######################################################
  8. -->
  9. <title>neweroica的抢24游戏</title>
  10. <!--------------作者:neweroica(aqyw)---------------->
  11. <h2>24点游戏初解</h2>
  12. <h4>作者:neweroica(aqyw)</h4>
  13. <input type=hidden name=a1>
  14. <input type=hidden name=b1>
  15. <input type=hidden name=c1>
  16. <input type=hidden name=d1>
  17. <table>
  18. <tr>
  19. <td>
  20. <b id=a2 style="width:60;height:100;font-size:25pt;cursor:hand;background:#ff8888;border:solid 1px #000000;"  onclick=addN(a1.value)> </b>
  21. <b id=b2 style="width:60;height:100;font-size:25pt;cursor:hand;background:#ff8888;border:solid 1px #000000;"  onclick=addN(b1.value)> </b>
  22. <b id=c2 style="width:60;height:100;font-size:25pt;cursor:hand;background:#ff8888;border:solid 1px #000000;"  onclick=addN(c1.value)> </b>
  23. <b id=d2 style="width:60;height:100;font-size:25pt;cursor:hand;background:#ff8888;border:solid 1px #000000;"  onclick=addN(d1.value)> </b>
  24. <p>
  25. <input type=button value=发牌 ōnclick=cards(0)>
  26. <input type=button value=自定 ōnclick=cards(1)>
  27. <font color=#00aa00>正确</font><b id=correct style="width:30;height:;border:solid 1px #aaaa88;">0</b>
  28. <font color=#aa0000>错误</font><b id=wrong style="width:30;height:;border:solid 1px #aaaa88;">0</b>
  29. <font color=#0000aa>正确率</font><b id=yeild style="width:60;height:;border:solid 1px #aaaa88;">0</b>
  30. </p>
  31. </td>
  32. <td>
  33. <table cellspacing=2 cellpadding=2>
  34. <tr>
  35. <td colspan=4>
  36. <b id=formula style="color:#000088;width:200;height:25;border:solid 1px #880000;"> </b>
  37. </td>
  38. </tr>
  39. <tr>
  40. <td>
  41. <input type=button value=+ style="width:30;height:30" ōnclick=add()>
  42. </td>
  43. <td>
  44. <input type=button value=- style="width:30;height:30" ōnclick=minus()>
  45. </td>
  46. <td>
  47. <input type=button value=* style="width:30;height:30" ōnclick=mult()>
  48. </td>
  49. <td>
  50. <input type=button value=/ style="width:30;height:30" ōnclick=divd()>
  51. </td>
  52. </tr>
  53. <tr>
  54. <td>
  55. <input type=button value=( style="width:30;height:30" ōnclick=lbr()>
  56. </td>
  57. <td>
  58. <input type=button value=) style="width:30;height:30" ōnclick=rbr()>
  59. </td>
  60. <td>
  61. <input type=button value== style="width:30;height:30" ōnclick=equ()>
  62. </td>
  63. <td>
  64. <input type=button value=← style="width:30;height:30" ōnclick=bkspc()>
  65. </td>
  66. </tr>
  67. <tr>
  68. <td>
  69. <input type=button value=重置 ōnclick=resetit()>
  70. </td>
  71. <td>
  72. <input type=button value=无解 ōnclick=abort()>
  73. </td>
  74. <td colspan=2>
  75. <input type=button value=查看答案 ōnclick=cal()>
  76. </td>
  77. </tr>
  78. </table>
  79. </td>
  80. </tr>
  81. </table>
  82. <p id=showit style="color:#aa3388;width:300;height:150;border:solid 1px #008800;"> </p>
  83. <scrīpt>
  84. function numToChar(n){  //数字的单个字符表示;
  85.   return unescape('%u'+(n+1000));
  86. }
  87. function charToNum(c){  //单个字符表示对应的数字;
  88.   return parseInt(escape(c).substring(2,100))-1000;
  89. }
  90. var cardInf='',cardInf0;
  91. var cardS=new Array(0,'A',2,3,4,5,6,7,8,9,10,'J','Q','K');
  92. var typ=new Array(0,1,2,3);
  93. var typhtml=new Array(
  94. '<font color=#000000>'+unescape('%u2660'),
  95. '<font color=#000000>'+unescape('%u2663'),
  96. '<font color=#ff0000>'+unescape('%u2665'),
  97. '<font color=#ff0000>'+unescape('%u2666'));
  98. for(var i=1;i<=13;i++){
  99.   for(var j=0;j<4;j++){
  100.     cardInf+=numToChar(i)+typ[j];
  101.   }
  102. }
  103. cardInf0=cardInf;
  104. var mode=new Array();
  105. mode[0]='a+b+c+d';
  106. mode[1]='a+b+c-d';
  107. mode[2]='a+b-c-d';
  108. mode[3]='a*b+c+d';
  109. mode[4]='a*b*c+d';
  110. mode[5]='a*b+c*d';
  111. mode[6]='a*b*c*d';
  112. mode[7]='a/b+c+d';
  113. mode[8]='a/b/c+d';
  114. mode[9]='a/b+c/d';
  115. mode[10]='a*b*c/d';
  116. mode[11]='a*b/c/d';
  117. mode[12]='a*b/c+d';
  118. mode[13]='a/b+c*d';
  119. mode[14]='a*b-c-d';
  120. mode[15]='a*b*c-d';
  121. mode[16]='a*b-c*d';
  122. mode[17]='a*b/c-d';
  123. mode[18]='a*b+c-d';
  124. mode[19]='(a+b+c)*d';
  125. mode[20]='(a+b-c)*d';
  126. mode[21]='(a*b+c)*d';
  127. mode[22]='(a*b-c)*d';
  128. mode[23]='(a/b+c)*d';
  129. mode[24]='(a/b-c)*d';
  130. mode[25]='(a+b+c)/d';
  131. mode[26]='(a+b-c)/d';
  132. mode[27]='(a*b+c)/d';
  133. mode[28]='(a*b-c)/d';
  134. mode[29]='(a/b+c)/d';
  135. mode[30]='(a+b)*c+d';
  136. mode[31]='(a-b)*c+d';
  137. mode[32]='(a+b)/c+d';
  138. mode[33]='(a-b)/c+d';
  139. mode[34]='(a+b)*c-d';
  140. mode[35]='(a-b)*c-d';
  141. mode[36]='(a+b)/c-d';
  142. mode[37]='(a+b)*c*d';
  143. mode[38]='(a-b)*c*d';
  144. mode[33]='(a+b)/c*d';
  145. mode[40]='(a-b)/c*d';
  146. mode[41]='(a+b)/c/d';
  147. mode[42]='(a+b)*(c+d)';
  148. mode[43]='(a+b)*(c-d)';
  149. mode[44]='(a-b)*(c-d)';
  150. mode[45]='(a+b)/(c+d)';
  151. mode[46]='(a+b)/(c-d)';
  152. mode[47]='a/b+c-d';
  153. mode[48]='a+b/(c+d)';
  154. mode[49]='a*b/(c+d)';
  155. mode[50]='a+b/(c-d)';
  156. mode[51]='a*b/(c-d)';
  157. mode[52]='a/(b-c/d)';
  158. var vari=new Array(
  159. '0123',
  160. '0132',
  161. '0213',
  162. '0231',
  163. '0312',
  164. '0321',
  165. '1023',
  166. '1032',
  167. '1203',
  168. '1230',
  169. '1302',
  170. '1320',
  171. '2013',
  172. '2031',
  173. '2103',
  174. '2130',
  175. '2301',
  176. '2310',
  177. '3012',
  178. '3021',
  179. '3102',
  180. '3120',
  181. '3201',
  182. '3210');
  183. var z=new Array();
  184. var zt=new Array();
  185. function cards(ifmine){
  186.   formula.innerHTML='';
  187.   showit.innerHTML='';
  188. if(ifmine){
  189.   z[0]=prompt('第一张牌的数字:','');
  190.   z[1]=prompt('第二张牌的数字:','');
  191.   z[2]=prompt('第三张牌的数字:','');
  192.   z[3]=prompt('第四张牌的数字:','');
  193.   for(var i=0;i<4;i++){
  194.     zt[i]='<font color=#000088>';
  195.   }
  196. }
  197. else{
  198.   for(var i=0;i<4;i++){
  199.     var index=2*Math.floor(cardInf.length/2*Math.random());
  200.     var cardN=cardInf.charAt(index);
  201.     z[i]=charToNum(cardN);
  202.     zt[i]=typhtml[parseInt(cardInf.charAt(index+1))];
  203.     cardInf=cardInf.substring(0,index)+cardInf.substring(index+2,cardInf.length);
  204.   }
  205.   if(cardInf==''){
  206.     alert('52张牌已全部发完!nn正确:'+correct.innerHTML+';错误:'+wrong.innerHTML+';正确率:'+yeild.innerHTML+'。nnn再来一局!');
  207.     cardInf=cardInf0;
  208.     a2.innerHTML='';
  209.     b2.innerHTML='';
  210.     c2.innerHTML='';
  211.     d2.innerHTML='';
  212.     a2.style.backgroundColor='#ff8888';
  213.     b2.style.backgroundColor='#ff8888';
  214.     c2.style.backgroundColor='#ff8888';
  215.     d2.style.backgroundColor='#ff8888';
  216.     a1.value='';
  217.     b1.value='';
  218.     c1.value='';
  219.     d1.value='';
  220.     correct.innerHTML=0;
  221.     wrong.innerHTML=0;
  222.     yeild.innerHTML=0;
  223.     return 0;
  224.   }
  225. }
  226.   a1.value=z[0];
  227.   b1.value=z[1];
  228.   c1.value=z[2];
  229.   d1.value=z[3];
  230.   var m1='<br><center>',m2='</center></font>';
  231.   a2.innerHTML=zt[0]+m1+cardS[z[0]]+m2;
  232.   b2.innerHTML=zt[1]+m1+cardS[z[1]]+m2;
  233.   c2.innerHTML=zt[2]+m1+cardS[z[2]]+m2;
  234.   d2.innerHTML=zt[3]+m1+cardS[z[3]]+m2;
  235.   a2.style.backgroundColor='#ffffee';
  236.   b2.style.backgroundColor='#ffffee';
  237.   c2.style.backgroundColor='#ffffee';
  238.   d2.style.backgroundColor='#ffffee';
  239. }
  240. function cal(){
  241.   showit.innerHTML='<br>标准答案:<br>';
  242.   var p=0;
  243.   for(i=0;i<mode.length;i++){
  244.     for(j=0;j<24;j++){
  245.       a=parseInt(z[vari[j].charAt(0)]);
  246.       b=parseInt(z[vari[j].charAt(1)]);
  247.       c=parseInt(z[vari[j].charAt(2)]);
  248.       d=parseInt(z[vari[j].charAt(3)]);
  249.       var s=mode[i];
  250.       var result=eval(s);
  251.       if(Math.abs(result-24)<1E-5){
  252.         var ina=mode[i].indexOf('a');
  253.         var inb=mode[i].indexOf('b');
  254.         var inc=mode[i].indexOf('c');
  255.         var ind=mode[i].indexOf('d');
  256.         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';
  257.         showit.innerHTML+='<br>';
  258.         p=1;
  259.         break;
  260.       }
  261.     }
  262.   }
  263.   if(p) return 0;
  264.   else showit.innerHTML='无解';
  265. }
  266. function addN(v,n){
  267.     formula.innerHTML+=v;
  268. }
  269. function add(){
  270.   formula.innerHTML+='+';
  271. }
  272. function minus(){
  273.   formula.innerHTML+='-';
  274. }
  275. function mult(){
  276.   formula.innerHTML+='*';
  277. }
  278. function divd(){
  279.   formula.innerHTML+='/';
  280. }
  281. function lbr(){
  282.   formula.innerHTML+='(';
  283. }
  284. function rbr(){
  285.   formula.innerHTML+=')';
  286. }
  287. function equ(){
  288.   var v=eval(formula.innerHTML);
  289.   if(v-Math.floor(v)<1E-5||v-Math.floor(v)>9E-6)
  290.     v=Math.round(v);
  291.   formula.innerHTML+='='+v;
  292.   cal();
  293.   var temp=showit.innerHTML;
  294.   var rt=parseInt(correct.innerHTML);
  295.   var wg=parseInt(wrong.innerHTML);
  296.   if(v==24){
  297.     showit.innerHTML='正确!'+temp;
  298.     correct.innerHTML=rt+1;
  299.   }
  300.   else{
  301.     showit.innerHTML='错误!'+temp;
  302.     wrong.innerHTML=wg+1;
  303.   }
  304.   rt=parseInt(correct.innerHTML);
  305.   wg=parseInt(wrong.innerHTML);
  306.   yeild.innerHTML=Math.floor(rt/(rt+wg)*10000)/100+'%';
  307. }
  308. function bkspc(){
  309.   var s=formula.innerHTML;
  310.   formula.innerHTML=s.substring(0,s.length-1);
  311. }
  312. function resetit(){
  313.   formula.innerHTML='';
  314. }
  315. function abort(){
  316.   cal();
  317.   var temp=showit.innerHTML;
  318.   var rt=parseInt(correct.innerHTML);
  319.   var wg=parseInt(wrong.innerHTML);
  320.   if(showit.innerHTML=='无解'){
  321.     showit.innerHTML='正确!<br>确实无解。'
  322.     correct.innerHTML=rt+1;
  323.   }
  324.   else{
  325.     showit.innerHTML='错误!'+temp;
  326.     wrong.innerHTML=wg+1;
  327.   }
  328.   rt=parseInt(correct.innerHTML);
  329.   wg=parseInt(wrong.innerHTML);
  330.   yeild.innerHTML=Math.floor(rt/(rt+wg)*10000)/100+'%';  
  331. }
  332. </scrīpt>
  333. </html>

 

 

阅读(4582) | 评论(1)


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

评论

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