Javascript 在2048游戏中只向右移一步
我有像2048游戏一样的4x4矩阵,我需要打印右移一步的结果。例如,我们有矩阵:Javascript 在2048游戏中只向右移一步,javascript,Javascript,我有像2048游戏一样的4x4矩阵,我需要打印右移一步的结果。例如,我们有矩阵: 0 0 2 2 4 4 8 4 64 64 8 4 16 8 64 8 Result is: 0 0 0 4 0 8 8 4 0 128 8 4 16 8 64 8 我的代码: 函数解{ 对于设i=0;i
0 0 2 2
4 4 8 4
64 64 8 4
16 8 64 8
Result is:
0 0 0 4
0 8 8 4
0 128 8 4
16 8 64 8
我的代码:
函数解{
对于设i=0;i] 这里有一个简单而详细的解决方案。我相信可能会有更优雅的: 函数newStateoldState{ //定义一个数组来保存结果 让结果=[]; //分别检查旧状态的每一行 为旧州让行{ //命名列a、b、c和d 设a=行[0],b=行[1],c=行[2],d=行[3]; //检查最右边的一对中是否匹配 ifd==c&&d!=0{ d=d*2;//组合匹配的单元格 //检查辅助匹配 如果b==a&&b!=0{ //传统的2048逻辑:将匹配的单元格*合并为“c”*&将其余单元格移位 c=b*2;b=0;a=0; //对于OP评论中要求的替代逻辑, //将上述行替换为`c=0;b=b*2;a=0` } 否则{ c=b;b=a;a=0;//将其余的移位 } } 否则{ /检查中间对的匹配 ifc==b&c!=0{ c=c*2;b=a;a=0;//组合匹配的单元格并移动其余单元格 } 否则{ //检查最左边的一对中是否匹配 如果b==a&&b!=0{ b=b*2;a=0;//组合匹配的单元格并移动其余单元格 } } } //填充结果矩阵中的当前行 结果:推[a,b,c,d]; } //返回结果矩阵 返回JSON.stringifyresult; } console.lognewState[[0,0,2,2],[4,4,8,4],[64,64,8,4],[16,8,64,8]; console.lognewState[[2,2,4,8],[8,8,64,64],[64,8,16,8],[8,8,8,8]; console.lognewState[[64,64,64,64],[8,8,8,8],[4,4,4],[2,2,2]; console.lognewState[[0,0,4,4],[4,8,4,8],[8,8,8],[64,8,16,8];
console.lognewState[[2,0,4,4],[4,4,4],[8,0,0,8],[0,64,64];假设[4,4,4,4]的结果应该是什么?@kaido[0,8,0,8]然后像@corschdi那样从右向左迭代他们甚至在右边添加了一个对齐方式,但是如果你删除它,那么你就得到了预期的结果。他们实际上想要在适当的位置修改。。。[4,4,4,4]如果对齐,则应为[0,8,0,8]或[0,0,8,8],谢谢提醒。没有看到增加的要求。我将快速更新我的答案。@user3297291谢谢!
[ 2, 2, 4, 8] -> [ 0, 4, 4, 8 ] -> [ 0, 0, 8, 8 ] -> [ 0, 0, 0, 16 ]
^ ^ ^ ^ ^ ^ ^