2048记录反查(javascript)

还是2048的记录反查,原先我写过一个,请看地址2048记录反查(ruby),不过是ruby版的。近期对js很感兴趣,一直在学习,所以就想顺便写一个js版的吧,至少方便发布到网页上。
就去网上找了随便找了网页版的2048,感谢黄岩同学,在他的框架下,参考ruby版的,写出了html的2048记录反查。
其实js里面的坑还是很多的,掉进去n次,太丢人就不说了,总之最后还是写出来了。
源码在下面,我也随便发布到了github,地址是 http://qqrrm.github.io/2048.html
其实有目的性的做点东西也挺好的。近期工作很忙,用上班的空闲时间3周才完成,回头看很简单,但是就像吃包子一样,你总不能说吃3个包子饱了,前两个就没用了吧。
再次感谢做出2048的 Gabriele Cirulli以及被我抄袭了框架的黄岩。
over。

  1 <html>
  2 <head>
  3 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  4 <!--原框架作者信息<title>2048网页版(html+css+js) By:黄岩</title> -->
  5 <title>2048记录反查网页版(html+css+js) By:pyp</title>
  6 <style type="text/css">
  7
  8 #div {
  9 width: 318px;
 10 height: 400px;
 11 background-color: #f0f0f0;
 12 margin: auto;
 13 }
 14
 15 .box1 {
 16 font-size: 24px;
 17 text-align: center;
 18 line-height: 72px;
 19 width: 72px;
 20 height: 72px;
 21 float: left;
 22 background-color: #CDC2B3;
 23 position: relative;
 24 }
 25
 26 #score {
 27 left: 10px;
 28 top: 70px;
 29 position: relative;
 30 float: left;
 31 }
 32
 33 </style>
 34
 35
 36
 37 <script language="javascript" type="text/javascript">
 38
 39 var bg;
 40 var oBox;//元素
 41 var result = new Array();
 42 var h = new Array(); //根据2的n次方对应的可能得分数组
 43
 44
 45 function total(n) { //假设全部的数都是2,2的n次方得到的分数,比如n=10,2**10=1024得到的纪录分数
 46 if(n == 2)
 47    return 4 ;
 48     else
 49    return 2 * total(n - 1) + Math.pow(2, n);
 50 }
 51
 52
 53 function total_plus(n) { //随机2或4,比例9:1,获得的分数。
 54 var j = 0;
 55     var sum = Math.pow(2, n) / 2;
 56     for(var i = 0; i < sum; i++) {
 57     if (Math.random() > 0.9)
 58     j += 1;
 59    }
 60     if(total(n) > j * 4)
 61     return total(n) - j * 4;
 62     else
 63      return 0;
 64 }
 65
 66
 67 function max_n(score){
 68 for(var i = 2 ; i < 17; i++){
 69 if( h[i] > score ){
 70 return i - 1;
 71 }
 72 else if ( h[i] === score){
 73 return i
 74 }
 75 }
 76 }
 77
 78
 79 function divmod(x, y){ //ruby中的函数,就是进行div,形成结果和余数的数组
 80 var a, b;
 81 var temp = new Array();
 82
 83 if(x > y){
 84 a = Math.floor(x / y);
 85 b = x - y * a;
 86 }
 87
 88     temp.push(a);
 89     temp.push(b);
 90     return temp;
 91 }
 92
 93
 94 function score_to_n(score){ //通过得分递归获得拆分组合结果
 95
 96 var max = max_n(score);
 97 var div = new Array();
 98
 99 if(h[max] == score){
100 result.push(max);
101 return result;
102 }
103
104 if (h[max] == 0){
105 return result;
106 }
107
108 div = divmod(score, h[max]);
109
110 for(var i = 0; i < div[0]; i++){
111 result.push(max);
112 }
113
114 score_to_n(div[1]);
115 return result;
116 }
117
118 function initGame(){//游戏初始化
119
120 bg = new Array();
121
122 for(var i = 0; i < 4; i++){
123 bg[i] = new Array();
124 for(var j = 0; j < 4; j++){
125 bg[i][j] = 0;
126 }
127 }
128 }
129
130
131 function paintGame(){//游戏绘图
132
133 var i, str="";
134
135 for(var m = 0;m < 4; m++){
136 for(var n = 0;n < 4; n++){
137
138 i = m * 4 + n + 1;
139
140 oBox[i].innerHTML = bg[m][n];
141
142 switch(bg[m][n]){
143 case 0:str="#CDC2B3";break;
144 case 2:str="#eee4da";break;
145 case 4:str="#ede0c8";break;
146 case 8:str="#f2b179";break;
147 case 16:str="#f59563";break;
148 case 32:str="#f67c5f";break;
149 case 64:str="#f65e3b";break;
150 case 128:str="#edcf72";break;
151 case 256:str="#edcc61";break;
152 case 512:str="#edc850";break;
153 case 1024:str="#edc53f";break;
154 case 2048:str="#edc22e";break;
155
156 default:str="#ffc22e";
157 }
158 oBox[i].style.background = str;
159 }
160 }
161 }
162
163 function btn(){ //按钮事件
164
165   var temp = new Array();
166   var score = document.getElementById("score_value").value;
167
168   if ((score > 950000) || (score % 1 !== 0))
169    alert("大哥大姐,别耍我啊");
170   else {
171 initGame();
172
173 for(var i = 2; i < 17; i++){ //生成得分数组
174 h[i] = total_plus(i);
175 }
176
177 temp = score_to_n(score);
178
179 bg[3][3] = (temp[0]===undefined) ? 2 : Math.pow(2, temp[0]); //个人习惯右下角最大,接着按大小蛇形排序,我玩2048就是这样的规律玩的
180 bg[3][2] = (temp[1]===undefined) ? 2 : Math.pow(2, temp[1]);
181 bg[3][1] = (temp[2]===undefined) ? 2 : Math.pow(2, temp[2]);
182 bg[3][0] = (temp[3]===undefined) ? 2 : Math.pow(2, temp[3]);
183 bg[2][0] = (temp[4]===undefined) ? 2 : Math.pow(2, temp[4]);
184 bg[2][1] = (temp[5]===undefined) ? 2 : Math.pow(2, temp[5]);
185 bg[2][2] = (temp[6]===undefined) ? 2 : Math.pow(2, temp[6]);
186 bg[2][3] = (temp[7]===undefined) ? 2 : Math.pow(2, temp[7]);
187 bg[1][3] = (temp[8]===undefined) ? 2 : Math.pow(2, temp[8]);
188 bg[1][2] = (temp[9]===undefined) ? 2 : Math.pow(2, temp[9]);
189 bg[1][1] = (temp[10]===undefined) ? 2 : Math.pow(2, temp[10]);
190 bg[1][0] = (temp[11]===undefined) ? 2 : Math.pow(2, temp[11]);
191 bg[0][0] = (temp[12]===undefined) ? 2 : Math.pow(2, temp[12]);
192 bg[0][1] = (temp[13]===undefined) ? 2 : Math.pow(2, temp[13]);
193 bg[0][2] = (temp[14]===undefined) ? 2 : Math.pow(2, temp[14]);
194 bg[0][3] = (temp[15]===undefined) ? 2 : Math.pow(2, temp[15]);
195
196 paintGame();
197                 temp.length = 0;
198   }
199 };
200
201
202 window.onload=function(){
203 var j, k = 0;
204
205 oBox = document.getElementsByTagName(‘div‘);
206
207 for(var i = 1;i < 17;i++){
208 k = (i-1)%4;
209 oBox[i].style.left=((k+1)*6)+‘px‘;
210 j = (i-1)/4;
211 oBox[i].style.top=((j+1)*6-2*k)+‘px‘;
212 }
213
214 };
215
216 </script>
217 </head>
218
219 <body>
220 <div id="div">
221
222 <div class="box1"></div>
223 <div class="box1"></div>
224 <div class="box1"></div>
225 <div class="box1"></div>
226 <div class="box1"></div>
227 <div class="box1"></div>
228 <div class="box1"></div>
229 <div class="box1"></div>
230 <div class="box1"></div>
231 <div class="box1"></div>
232 <div class="box1"></div>
233 <div class="box1"></div>
234 <div class="box1"></div>
235 <div class="box1"></div>
236 <div class="box1"></div>
237 <div class="box1"></div>
238
239 <div id="score">
240 <input type="text" id="score_value" value="58640" />
241 <input type="button" value="记录反查" onclick="btn()" />
242 </div>
243
244 </div>
245 </body>
246 </html>

2048记录反查(javascript)

时间: 2024-08-30 06:01:19

2048记录反查(javascript)的相关文章

2048记录反查(ruby)

#58640.2048我打的最大分,别人问,你到底最高多少啊.只有最高纪录分数看不到状态,干脆写个程序,告诉别人自己到底打到多少吧,我其实只记得自己是4096+1024,其他的分数忘记了,不过使用这个程序,很容易就分析出来了.#2048是在合成的时候记录分数,比如4和4合成8,记录8分,类似这个样子.新出现的2或者4是不计分数的.所以可以通过递归,获得块数合成时候的分数. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

SQL自连接(源于推荐算法中的反查表问题)

"基于用户的协同过滤算法"是推荐算法的一种,这类算法强调的是:把和你有相似爱好的其他的用户的物品推荐给你. 要实现该推荐算法,就需要计算和你有交集的用户,这就要用到物品到用户的反查表. 先举个例子说明下反查表:甲喜欢的物品有:A.B.C:乙喜欢的物品有:B.E.F:丙喜欢的物品有:A.J.K:而你喜欢的物品是:A.J.M.反查表就是喜欢A物品的有你.甲.丙,喜欢J物品的有你.丙,喜欢M物品的只有你,这就是和你喜欢的物品有联系的用户.有了这个反查表,我们就可以看出和你有关系的用户只有甲和

C段查询雏形之在Java中反查一个IP上的所有域名(旁站查询)

这里使用了两个接口来反查IP,分别是"站长工具"和"爱站"的接口,两者各有千秋,结合起来查询就较为准确了. 注:我目前只写了个初始版本,还不太完善,但是可以基本使用了,代码中关键地方有注释,所以我就不多解释了 算法核心: package NmapTest; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.Inpu

iOS 根据经纬度反查 地名

在iOS中 定位自己的当前位置,知道经纬度很简单,然后有些时候要知道地名,apple 也有了现成的api直接调用就可以(以下方法是iOS5.0以上的,现在基本都忽略了 iOS5.0以下的设备) #pragma mark - #pragma mark CLLocationManagerDelegate - (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation

PHP地址反查返回经纬度 百度API

/** * 百度地图   根据地址反查经纬度 */ public function search_xy(){ $address = str_replace(' ','',$address); $rows = file_get_contents("http://api.map.baidu.com/geocoder/v2/?ak=xxxxxxxxxxxxxx&callback=renderOption&output=json&address=首都图书馆&city=北京

ip反查域名

nslookup 或者 dig -t ptr都不行 找了很多资料,大概意思是:目前的dns已经不支持反查了 不过后来无意中发现这个网站却做到了 http://www.myipneighbors.com/ 能否讨论一下它是怎么实现的

小鹤双拼飞扬版反查编码功能解释-by老随风

更新时间:2015-05-22 反查编码功能 文中例字均为(码maum) 关于知道编码也不知道为何这么拆,请明白鹤形是拆一个字首尾两部分的形码 ②ofi   (知道字怎么读,想知道该字是否有其他编码) ③ofi: (不知道字怎么读,但该字可以复制到剪贴板) ④:i   (查某字的详细信息:读音.笔画数.部首.笔顺.小鹤编码.释义) ⑤ozd  (打开候选窗字典功能) ⑥omb  (查码表,这个如果也查不出来的话,说明小鹤飞扬版词库没这个字或词) ⑦ohd  (这个专治笔顺和读音不对的亲们) 关于

SAP函数 CS_WHERE_USED_MAT 反查上层BOM

遇到用户要根据下层物料反查最上层BOM物料是什么. 试了一下,通过函数 CS_WHERE_USED_MAT 来查询,但是只能往上查询一层,类似事务码CS15的效果.如果要找最上层物料,需要自己写迭代进行查询. DATA: lt_wultb TYPE TABLE OF stpov, lt_equicat TYPE TABLE OF cscequi, lt_kndcat TYPE TABLE OF cscknd, lt_matcat TYPE TABLE OF cscmat, lt_stdcat T

Get_domains(调用ICP及mail反查接口获取资产)

写了个小工具,目的是尽可能多的获取资产,这个工具调用的是站长工具的ICP备案查询和邮箱反查功能. 环境:Python3 get_domains.py: import requests import re host = '' mail = '' headers = { 'Cookie':'', 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/7