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;
}

  

posted @ 2019-05-16 21:30  CrossPython  阅读(421)  评论(0编辑  收藏  举报