Objective-C 實(shí)現(xiàn)2048算法類(lèi)
更新時(shí)間:2015年06月10日 11:40:49 投稿:hebedich
本文給大家介紹的是使用Objective-C 實(shí)現(xiàn)的IOS版小游戲2048算法類(lèi),十分的實(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 - 滑動(dòng)規(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 - 滑動(dòng)算法 - (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動(dòng)畫(huà)解析之圓球加載動(dòng)畫(huà)XLBallLoading的實(shí)現(xiàn)
加載動(dòng)畫(huà)對(duì)大家來(lái)說(shuō)都不陌生,我們?cè)谄綍r(shí)都會(huì)遇見(jiàn),開(kāi)發(fā)中也必不可少,所以下面這篇文章主要給大家介紹了關(guān)于iOS動(dòng)畫(huà)解析之圓球加載動(dòng)畫(huà)XLBallLoading實(shí)現(xiàn)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-11-11iOS?項(xiàng)目嵌入Flutter?運(yùn)行(最新推薦)
這篇文章主要介紹了iOS?項(xiàng)目嵌入Flutter?運(yùn)行,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-03-03iOS實(shí)現(xiàn)簡(jiǎn)單的頭部縮放功能
這篇文章主要介紹了iOS 簡(jiǎn)單的頭部縮放效果,頭部伴隨模糊效果放大縮小,并在一定位置時(shí)懸停充當(dāng)導(dǎo)航欄,本文給大家提供實(shí)現(xiàn)思路,需要的朋友可以參考下2018-08-08iOS 縮小打包項(xiàng)目ipa大小的實(shí)現(xiàn)方法
下面小編就為大家分享一篇iOS 縮小打包項(xiàng)目ipa大小的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2017-12-12iOS 9 更新之Safari廣告攔截器(Content Blocker)開(kāi)發(fā)教程
這篇文章主要介紹了iOS 9 更新之Safari廣告攔截器(Content Blocker)開(kāi)發(fā)教程的相關(guān)資料,需要的朋友可以參考下2015-08-08