Javascript 在2048游戏中只向右移一步

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

我有像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;iconsole.logsolution[[2,0,4,4],[4,4,4,4],[8,0,0,8],[0,64,64]您正在修改前面的数字,然后检查下一个。因此,您实际上创建了一个临时结果,最终结果在某种程度上是正确的:

如果要忽略在同一次运行中所做的更改,可以在找到更改后将j增加1:

在不考虑当前修改的情况下,对每行执行所有组合的示例 函数解{ 对于设i=0;iconsole.logsolution[[2,0,4,4],[4,4,4,4],[8,0,0,8],[0,64,64]如果要将数字向右移动,需要从右向左遍历数组。此外,在2048年,您需要在每次合并后将所有数字向右移动

这将有助于:

函数解{ 对于设i=0;i=0;j-{ 如果x[i][j-1]==x[i][j]{ x[i][j]=x[i][j]*2; //将左侧的所有数字向右移动一 如果j>1{ 对于设k=j-1;k>0;k-{ x[i][k]=x[i][k-1]; } } x[i][0]=0; } } } 返回JSON.stringifyx } 控制台日志解决方案[ [0, 0, 2, 2], [4, 4, 8, 4], [64, 64, 8, 4], [16, 8, 64, 8] ]; 控制台日志解决方案[ [2, 2, 4, 8], [8, 8, 64, 64], [64, 8, 16, 8], [8, 8, 8, 8] ] 控制台日志解决方案[ [64, 64, 64, 64], [8, 8, 8, 8], [4, 4, 4, 4], [2, 2, 2, 2] ] 控制台日志解决方案[ [0, 0, 4, 4], [4, 8, 4, 8], [8, 8, 8, 8], [64, 8, 16, 8] ] 控制台日志解决方案[ [2, 0, 4, 4], [4, 4, 4, 4], [8, 0, 0, 8], [0, 64, 64, 64]
] 这里有一个简单而详细的解决方案。我相信可能会有更优雅的:

函数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 ]
  ^  ^                ^  ^                 ^  ^                  ^