参数model有一个二维数组data,及阶数matrix
// .h文件@class DataModel;
@interface Algorithm : NSObject @property (nonatomic,assign) int addScore;
// 加分 - (void)caculateTop:(DataModel *)model;
// 上滑规则- (void)caculateBottom:(DataModel *)model;
// 下滑规则- (void)caculateLeft:(DataModel *)model;
// 左滑规则- (void)caculateRight:(DataModel *)model;
// 右滑规则 - (BOOL)randNewOne:(DataModel *)data;
- (int)getAddScore;
@end // .m文件@implementation Algorithm #pragma mark - 滑动规则- (void)caculateTop:(DataModel *)model {
[self up_remove_blank:model];
[self up:model];
}
- (void)caculateBottom:(DataModel *)model {
[self down_remove_blank:model];
[self down:model];
}
- (void)caculateLeft:(DataModel *)model {
[self left_remove_blank:model];
[self left:model];
}
- (void)caculateRight:(DataModel *)model {
[self right_remove_blank:model];
[self right:model];
}
- (int)getAddScore {
int temp = _addScore;
_addScore = 0;
return temp;
}
#pragma mark - 新一个- (BOOL)randNewOne:(DataModel *)model {
array data = [model getData];
int all = 0;
for (int i=0;
i<model.matrix;
i++) {
for (int j=0;
j<model.matrix;
j++) {
if (data[i][j] == 0) {
all = all + 1;
}
}
}
if (all == 0) {
return NO;
}
int index = arc4random() % all;
all = 0;
for (int i=0;
i<model.matrix;
i++) {
for (int j=0;
j<model.matrix;
j++) {
if (data[i][j] == 0) {
all = all + 1;
if (all == index+1) {
data[i][j] = 2;
return YES;
}
}
}
}
return NO;
}
#pragma mark - 滑动算法- (void)up_remove_blank:(DataModel *)model {
array data = [model getData];
int i,j,k;
for(j=0;
j < model.matrix;
j++){
for(i=1;
i < model.matrix;
i++){
k=i;
while(k-1>=0&&data[k-1][j]==0){
//上面的那个为空 //swap(data[k][j],data[k-1][j]);
int temp = data[k][j];
data[k][j] = data[k-1][j];
data[k-1][j] = temp;
k--;
}
}
}
}
- (void)down_remove_blank:(DataModel *)model {
array data = [model getData];
int i,j,k;
for(j=0;
j < model.matrix;
j++){
for(i = model.matrix-2;
i >= 0;
i--){
k=i;
while(k+1<=model.matrix-1&&data[k+1][j]==0){
//上面的那个为空 //swap(a[k][j],a[k][j]);
int temp = data[k][j];
data[k][j] = data[k+1][j];
data[k+1][j] = temp;
k++;
}
}
}
}
- (void)left_remove_blank:(DataModel *)model {
array data = [model getData];
int i,j,k;
for(i=0;
i < model.matrix;
i++){
for(j=1;
j<model.matrix;
j++){
k=j;
while(k-1>=0&&data[i][k-1]==0){
//上面的那个为空 //swap(a[i][k],a[i][k-1]);
int temp = data[i][k];
data[i][k] = data[i][k-1];
data[i][k-1] = temp;
k--;
}
}
}
}
- (void)right_remove_blank:(DataModel *)model {
array data = [model getData];
int i,j,k;
for(i=0;
i<model.matrix;
i++){
for(j=model.matrix-2;
j>=0;
j--){
k=j;
while(k+1<=model.matrix-1&&data[i][k+1]==0){
//上面的那个为空 //swap(a[i][k],a[i][k+1]);
int temp = data[i][k];
data[i][k] = data[i][k+1];
data[i][k+1] = temp;
k++;
}
}
}
}
- (void)left:(DataModel *)model {
array data = [model getData];
int i,j;
for(i=0;
i<model.matrix;
i++){
for(j=0;
j<model.matrix-1;
j++){
if(data[i][j]==data[i][j+1]){
_addScore = _addScore + data[i][j];
data[i][j]+=data[i][j+1];
data[i][j+1]=0;
[self left_remove_blank:model];
}
}
}
}
- (void)right:(DataModel *)model {
array data = [model getData];
int i,j;
for(i=0;
i<model.matrix;
i++){
for(j=model.matrix-1;
j>=1;
j--){
if(data[i][j]==data[i][j-1]){
_addScore = _addScore + data[i][j];
data[i][j]+=data[i][j-1];
data[i][j-1]=0;
[self right_remove_blank:model];
}
}
}
}
- (void)up:(DataModel *)model {
array data = [model getData];
int i,j;
for(j=0;
j<model.matrix;
j++){
//每一列 for(i=0;
i<model.matrix-1;
i++){
if(data[i][j]==data[i+1][j]){
_addScore = _addScore + data[i][j];
data[i][j]=data[i][j]+data[i+1][j];
data[i+1][j]=0;
//移除空格 [self up_remove_blank:model];
}
}
}
}
- (void)down:(DataModel *)model {
array data = [model getData];
int i,j;
for(j=0;
j<model.matrix;
j++){
//每一列 for(i=model.matrix-1;
i>=1;
i--){
if(data[i][j]==data[i-1][j]){
_addScore = _addScore + data[i][j];
data[i][j]=data[i][j]+data[i-1][j];
data[i-1][j]=0;
//移除空格 [self down_remove_blank:model];
}
}
}
}
@end