Objective-C 实现2048算法类

 更新时间:2015年06月10日 11:40:49   投稿:hebedich  
本文给大家介绍的是使用Objective-C 实现的IOS版小游戏2048算法类,十分的实用,有需要的小伙伴可以参考下。

参数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

相关文章

  • iOS中WKWebView白屏问题的分析与解决

    iOS中WKWebView白屏问题的分析与解决

    最近在工作中遇到了WKWebView白屏的问题,所以这篇文章主要给大家介绍了关于iOS中WKWebView白屏问题的分析与解决方法,文中通过示例代码介绍的非常详细,对同样遇到这个问题的朋友具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-10-10
  • 解密ios响应链的工作原理

    解密ios响应链的工作原理

    本文将深入探讨事件响应链的工作原理,并提供 Swift 中的代码示例来帮助读者更好地理解这一概念
    2023-03-03
  • ios12中遇到的带input弹窗的错位问题的解决方法

    ios12中遇到的带input弹窗的错位问题的解决方法

    这篇文章主要介绍了ios12中遇到的带input弹窗的错位问题的解决方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-05-05
  • iOS动画特效之立方体翻转

    iOS动画特效之立方体翻转

    今天起为大家带来iOS动画特效合集之立方体翻转,APP如美女,动画如衣裳,赶紧为她披上漂亮的衣装吧!
    2016-08-08
  • iOS 高德地图仿微信发送实时位置

    iOS 高德地图仿微信发送实时位置

    这篇文章主要介绍了iOS 高德地图仿微信发送实时位置,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • 扫描二维码控件的封装iOS实现

    扫描二维码控件的封装iOS实现

    这篇文章主要为大家详细介绍了iOS实现扫描二维码控件的封装,具有一定的实用性和参考价值,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • iOS RN启动中管理Native Module详解

    iOS RN启动中管理Native Module详解

    这篇文章主要为大家介绍了iOS RN启动中 Native Module 是如何被管理的,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • 适配iPhoneXS max和iPhoneX R的方法示例

    适配iPhoneXS max和iPhoneX R的方法示例

    这篇文章主要介绍了适配iPhoneXS max和iPhoneX R的方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-10-10
  • IOS UI学习教程之使用代码创建button

    IOS UI学习教程之使用代码创建button

    这篇文章主要为大家详细介绍了IOS UI学习教程之使用代码创建button,感兴趣的小伙伴们可以参考一下
    2016-03-03
  • 简单谈谈Core Animation 动画效果

    简单谈谈Core Animation 动画效果

    下面小编就为大家带来一篇简单谈谈Core Animation 动画效果。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06

最新评论