虚位以待(AD)
虚位以待(AD)
首页 > 软件编程 > IOS编程/Objective-C > Objective-C 实现2048算法类

Objective-C 实现2048算法类
类别:IOS编程/Objective-C   作者:码皇   来源:互联网   点击:

本文给大家介绍的是使用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

相关热词搜索: 2048算法