最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Objective-C 實(shí)現(xiàn)2048算法類

 更新時(shí)間:2015年06月10日 11:40:49   投稿:hebedich  
本文給大家介紹的是使用Objective-C 實(shí)現(xiàn)的IOS版小游戲2048算法類,十分的實(shí)用,有需要的小伙伴可以參考下。

參數(shù)model有一個(gè)二維數(shù)組data,及階數(shù)matrix

// .h文件
@class DataModel;
 
@interface Algorithm : NSObject
 
@property (nonatomic,assign) int addScore;     // 加分
 
- (void)caculateTop:(DataModel *)model;      // 上滑規(guī)則
- (void)caculateBottom:(DataModel *)model;     // 下滑規(guī)則
- (void)caculateLeft:(DataModel *)model;      // 左滑規(guī)則
- (void)caculateRight:(DataModel *)model;     // 右滑規(guī)則
 
- (BOOL)randNewOne:(DataModel *)data;
 
- (int)getAddScore;
 
@end
 
 
// .m文件
@implementation Algorithm
 
#pragma mark - 滑動規(guī)則
- (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 - 新一個(gè)
- (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){//上面的那個(gè)為空
        //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){//上面的那個(gè)為空
        //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){//上面的那個(gè)為空
        //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){//上面的那個(gè)為空
        //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

相關(guān)文章

  • iOS中WKWebView白屏問題的分析與解決

    iOS中WKWebView白屏問題的分析與解決

    最近在工作中遇到了WKWebView白屏的問題,所以這篇文章主要給大家介紹了關(guān)于iOS中WKWebView白屏問題的分析與解決方法,文中通過示例代碼介紹的非常詳細(xì),對同樣遇到這個(gè)問題的朋友具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-10-10
  • 解密ios響應(yīng)鏈的工作原理

    解密ios響應(yīng)鏈的工作原理

    本文將深入探討事件響應(yīng)鏈的工作原理,并提供?Swift?中的代碼示例來幫助讀者更好地理解這一概念
    2023-03-03
  • ios12中遇到的帶input彈窗的錯(cuò)位問題的解決方法

    ios12中遇到的帶input彈窗的錯(cuò)位問題的解決方法

    這篇文章主要介紹了ios12中遇到的帶input彈窗的錯(cuò)位問題的解決方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-05-05
  • iOS動畫特效之立方體翻轉(zhuǎn)

    iOS動畫特效之立方體翻轉(zhuǎn)

    今天起為大家?guī)韎OS動畫特效合集之立方體翻轉(zhuǎn),APP如美女,動畫如衣裳,趕緊為她披上漂亮的衣裝吧!
    2016-08-08
  • iOS 高德地圖仿微信發(fā)送實(shí)時(shí)位置

    iOS 高德地圖仿微信發(fā)送實(shí)時(shí)位置

    這篇文章主要介紹了iOS 高德地圖仿微信發(fā)送實(shí)時(shí)位置,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-03-03
  • 掃描二維碼控件的封裝iOS實(shí)現(xiàn)

    掃描二維碼控件的封裝iOS實(shí)現(xiàn)

    這篇文章主要為大家詳細(xì)介紹了iOS實(shí)現(xiàn)掃描二維碼控件的封裝,具有一定的實(shí)用性和參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-08-08
  • iOS?RN啟動中管理Native?Module詳解

    iOS?RN啟動中管理Native?Module詳解

    這篇文章主要為大家介紹了iOS?RN啟動中?Native?Module?是如何被管理的,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • 適配iPhoneXS max和iPhoneX R的方法示例

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

    這篇文章主要介紹了適配iPhoneXS max和iPhoneX R的方法示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-10-10
  • IOS UI學(xué)習(xí)教程之使用代碼創(chuàng)建button

    IOS UI學(xué)習(xí)教程之使用代碼創(chuàng)建button

    這篇文章主要為大家詳細(xì)介紹了IOS UI學(xué)習(xí)教程之使用代碼創(chuàng)建button,感興趣的小伙伴們可以參考一下
    2016-03-03
  • 簡單談?wù)凜ore Animation 動畫效果

    簡單談?wù)凜ore Animation 動畫效果

    下面小編就為大家?guī)硪黄唵握務(wù)凜ore Animation 動畫效果。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-06-06

最新評論

大新县| 嘉禾县| 榆社县| 海口市| 阳东县| 梁平县| 临夏县| 民和| 图木舒克市| 荔浦县| 镇康县| 易门县| 哈巴河县| 汾西县| 乐陵市| 温州市| 阿城市| 兴和县| 巨鹿县| 察隅县| 米易县| 错那县| 汝阳县| 健康| 乌鲁木齐市| 大关县| 海兴县| 洪江市| 墨玉县| 清丰县| 聂拉木县| 衡东县| 七台河市| 伊吾县| 淳安县| 北川| 鄂州市| 长垣县| 隆昌县| 和田县| 荥经县|