代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
ObjC
】
2048算法类
作者:
littleDog
/ 发布于
2015/6/10
/
1596
参数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
同语言下
.
根据生日计算星座
.
精简的实现一个内存池
.
iOS索引搜索核心代码
.
iOS 搜索框
.
文件操作
.
UIWebView 加载本地网页
.
取消导航条对视图的影响
.
利用终端显示 隐藏文件
.
更改导航条背景颜色
.
iOS 字体斜体
可能有用的
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
littleDog
贡献的其它代码
(
3
)
.
mysql数据批量导入导出
.
双向链表
.
2048算法类
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3