2048移动算法
来源:互联网 发布:怎样做淘宝店铺推广 编辑:程序博客网 时间:2024/06/04 18:09
之前一直想写一个web版的2048 ,主要页面已经写好了,但是移动的算法还没有完成。今天研究了一下移动的算法,用4*4的数组表示游戏界面,虽然有点简陋,不过已经能看出效果了( ̄▽ ̄)/。接下来有时间再把代码和页面整合一下。( ̄▽ ̄”)
以左移为例,当用户按下左键时,游戏需要完成两个步骤:
1,从左往右检查是否有可以相加的数字
2,每次检查后从右往左调整数字的位置,保证数字相邻的左端不会有0
左移函数:
function moveLeft (){ var i,j; for(i=0;i<4;i++){ for(j=0;j<3;j++){ if(data[i][j] == data[i][j+1]){ data[i][j] += data[i][j+1]; data[i][j+1] = 0 ; } clearLeft(); } } }
清零函数:
function clearRight(){ for(var i = 0 ; i < 4 ; i++){ for(var j = 3 ; j >= 0 ; j-- ){ for(var k = j ; k < 4 ; k++ ){ if(data[i][j]!= 0 && data[i][k] == 0){ data[i][k] = data[i][j]; data[i][j] = 0 ; } } } } }
完整代码如下:
<html><body> <input type="button" value="Left" onclick="moveLeft(); show();"/> <input type="button" value="right" onclick="moveRight(); show();"/> <input type="button" value="up" onclick="moveUp(); show();"/> <input type="button" value="down" onclick="moveDown(); show();"/> <div id="s"></div> <script> var data = [[8,8,2,0],[8,0,8,2],[8,0,2,8],[8,2,0,8]]; function show(){ var s = document.getElementById("s"); s.innerHTML = ""; for(var i = 0 ; i < 4 ; i++){ for(var j = 0 ; j < 4 ; j++){ s.innerHTML += data[i][j]+" "; } s.innerHTML += "<br/>"; } } // 左移 function moveLeft (){ var i,j; for(i=0;i<4;i++){ for(j=0;j<3;j++){ if(data[i][j] == data[i][j+1]){ data[i][j] += data[i][j+1]; data[i][j+1] = 0 ; } clearLeft(); } } } // 右移 function moveRight (){ var i,j; for(i=0;i<4;i++){ for(j=0;j<3;j++){ if(data[i][j] == data[i][j+1]){ data[i][j+1] += data[i][j]; data[i][j] = 0 ; } clearRight(); } } } // 上移 function moveUp (){ var i,j; for(j=0;j<4;j++){ for(i=0;i<3;i++){ if(data[i][j] == data[i+1][j]){ data[i][j] += data[i+1][j]; data[i+1][j] = 0 ; } clearUp(); } } } // 下移 function moveDown (){ var i,j; for(j=0;j<4;j++){ for(i=3;i>0;i--){ if(data[i][j] == data[i-1][j]){ data[i][j] += data[i-1][j]; data[i-1][j] = 0 ; } clearDown(); } } } // 清除右边的0 function clearRight(){ for(var i = 0 ; i < 4 ; i++){ for(var j = 3 ; j >= 0 ; j-- ){ for(var k = j ; k < 4 ; k++ ){ if(data[i][j]!= 0 && data[i][k] == 0){ data[i][k] = data[i][j]; data[i][j] = 0 ; } } } } } // 清除左边的0 function clearLeft(){ for(var i = 0 ; i < 4 ; i++){ for(var j = 0 ; j < 4 ; j++){ for(var k = j ; k >= 0 ; k-- ){ if(data[i][j]!= 0 && data[i][k] == 0){ data[i][k] = data[i][j]; data[i][j] = 0 ; } } } } } // 清除上方的0 function clearUp(){ for(var j = 0 ; j < 4 ; j++){ for(var i = 0 ; i <4 ; i++){ for(var k = i ; k >=0 ; k-- ){ if(data[i][j]!= 0 && data[k][j] == 0){ data[k][j] = data[i][j]; data[i][j] = 0 ; } } } } } // 清除下方的0 function clearDown(){ for(var j = 0 ; j < 4 ; j++){ for(var i = 3 ; i >= 0 ; i--){ for(var k = i ; k < 4 ; k++ ){ if(data[i][j]!= 0 && data[k][j] == 0){ data[k][j] = data[i][j]; data[i][j] = 0 ; } } } } } show(); </script></body></html>
0 0
- 2048移动算法
- 数组移动算法
- 数组移动算法
- 内存移动算法
- 即时游戏移动算法
- 算法训练-移动小球
- STL的移动算法
- 算法---移动小球
- 算法-移动距离
- Java算法---坐标移动
- 移动臂调度算法
- 算法:棋子移动问题
- 鼠标移动调窗算法
- 算法入门之移动雕塑
- 数据结构算法问题 移动小球
- java 移动数字“0”算法
- 移动立方体算法(MC)
- 移动端自适应rem算法
- 《Android开发艺术探索》笔记
- Python线程、进程、进程池、协程
- [leetcode]Edit Distance
- 【车牌识别收纳】
- Java并发(九)Condition和线程顺序执行
- 2048移动算法
- 模拟 Crashing Robots
- JavaScript之语句
- 242. Valid Anagram
- 第二章:嵌入式QT --多语言
- web.xml报错
- Docker中集成bazel
- # Ridge Regression and Bayesian Regression 学习笔记
- Spark On YARN启动流程源码分析