2048游戏核心逻辑代码

 

 

main(){
  List a = [
    0,2,0,2,
    0,0,4,4,
    2,0,4,0,
    2,4,0,2
  ];

  List temp = right(a);  //change to others later,
  List result = [[],[],[],[]];
  for(int i=0; i<16; i++){
    result[i%4].add(temp[i]);
  }

  for(int i=0; i<result.length; i++){
    print(result[i]);
  }
}

right(List x){
  x = x.reversed.toList();
  x = left(x);
  x = x.reversed.toList();
  List temp = [[],[],[],[]];
  for(int i=0; i<x.length; i++){
    temp[i%4].add(x[i]);
  }

  return x;
}

left(List x){
  List temp = [[],[],[],[]];
  for(int i=0; i<16; i++){
    temp[i~/4].add(x[i]);
  }
  x = [];
  for(int i=0; i<temp.length; i++){
    x.addAll(merge(temp[i]));
  }
  temp = [[],[],[],[]];
  for(int i=0; i<16; i++){
    temp[i%4].add(x[i]);
  }
  x = [];
  for(int i=0; i<temp.length; i++){
    x.addAll(temp[i]);
  }
  return x;
}

up(List x){
  List temp = [[],[],[],[]];
  for(int i=0; i<16; i++){
    temp[i%4].add(x[i]);
  }
  x = [];
  for(int i=0; i<temp.length; i++){
    x.addAll(merge(temp[i]));
  }
  return x;
}

down(List x){
  x = x.reversed.toList();
  x = up(x);
  return x.reversed.toList();
}



merge(List arr){
  var i, nextI, len, m;
  len = arr.length;
  for(i=0; i<len; i++){
    nextI = -1;
    for(m=i+1; m<len; m++){
      if(arr[m]!=0){
        nextI = m;
        break;
      }
    }

    if(nextI!=-1){
      if(arr[i]==0){
        arr[i] = arr[nextI];
        arr[nextI] = 0;
        i -= 1;
      }else if(arr[i]==arr[nextI]){
        arr[i] = arr[i] * 2;
        arr[nextI] = 0;
      }
    }
  }
  return arr;
}

  

转载于:https://www.cnblogs.com/pythonClub/p/10878164.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值