麦子学院ios笔记:Objective-C 实现2048算法类

今天麦子学院ios开发老师给大家介绍Objective-C 实现的IOS版小游戏2048算法类,十分的实用,有需要的小伙伴可以参考下。

参数model有一个二维数组data,及阶数matrix


// .h文件

@classDataModel;

@interfaceAlgorithm : NSObject

@property(nonatomic,assign)intaddScore;// 加分

- (void)caculateTop:(DataModel *)model;// 上滑规则

- (void)caculateBottom:(DataModel *)model;// 下滑规则

- (void)caculateLeft:(DataModel *)model;// 左滑规则

- (void)caculateRight:(DataModel *)model;// 右滑规则

- (BOOL)randNewOne:(DataModel *)data;

- (int)getAddScore;

@end

// .m文件

@implementationAlgorithm

#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 {

inttemp = _addScore;

_addScore =0;

returntemp;

}

#pragma mark - 新一个

- (BOOL)randNewOne:(DataModel *)model {

array data = [model getData];

intall =0;

for(inti=0; i<model.matrix; i++) {

for(intj=0; j<model.matrix; j++) {

if(data[i][j] ==0) {

all = all +1;

}

}

}

if(all ==0) {

returnNO;

}

intindex = arc4random() % all;

all =0;

for(inti=0; i<model.matrix; i++) {

for(intj=0; j<model.matrix; j++) {

if(data[i][j] ==0) {

all = all +1;

if(all == index+1) {

data[i][j] =2;

returnYES;

}

}

}

}

returnNO;

}

#pragma mark - 滑动算法

- (void)up_remove_blank:(DataModel *)model {

array data = [model getData];

inti,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]);

inttemp = 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];

inti,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]);

inttemp = 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];

inti,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]);

inttemp = 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];

inti,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]);

inttemp = data[i][k];

data[i][k] = data[i][k+1];

data[i][k+1] = temp;

k++;

}

}

}

}

- (void)left:(DataModel *)model {

array data = [model getData];

inti,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];

inti,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];

inti,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];

inti,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开发教程以及实战教程请前往:http://www.maiziedu.com/course/ios/

时间: 2024-12-11 18:07:28

麦子学院ios笔记:Objective-C 实现2048算法类的相关文章

麦子学院ios笔记:IOS把图片缓存到本地的几种方法

把ios的图片缓存到本地的方法有几种?现在来看看学生在麦子学院学习ios开发的笔记中有讲到哪几种方法呢? <code>把图片缓存到本地,在很多场景都会用到,如果是只储存文字信息,那建一个plist文件,或者数据库就能很方便的解决问题,但是如果存图片到沙盒就没那么方便了.这里介绍两种保存图片到沙盒的方法. </code> 一.把图片转为base64的字符串存到数据库中或者plist文件中,然后用到的时候再取出来 <code class="hljs" obje

麦子学院 Django 笔记 02

上节课拾遗: 更改默认的开发服务器端口为8080:manage.py runserver 8080 目录结构 : django_admin: hello_django: _pycache_: hello(app): migrations: 说明: manage.py : 命令行工具脚本 hello_django(project): settings.py: 项目配置 urls.py:URL配置 wsgi.py: WSGI配置 hello(app): migrations:数据库同步脚本目录 ad

麦子学院 Django 笔记 01

一.开发环境的搭建: 1.安装python 2.更新pip版本: python -m pip install --upgrade pip 3.使用pip安装virtualenv: pip install virtualenv==15.0.1 4.创建虚拟环境: 创建 :virtualenv django_basic_venv 5.使用虚拟环境: django_basic_venv\Scripts\activate 命令前面出现(django_basic_venv)表示使用到该虚拟环境. 退出虚拟

麦子学院干货 | iOS开发者需要的九大设计工具

麦子学院[www.maiziedu.com]干货 | iOS开发者需要的九大设计工具 1.AppCooker AppCooker是一款方便的iPad应用.它能够提供可点击的原型模板,集合了所有需要编码或渲染的重要部件,并且还可以帮助开发者无需任何代码编写就能够构思.设计和测试iOS应用.目前AppCooker在App Store上的售价为19.99美元. 主要功能: 全功能模型编辑器拥有所有iOS UI部件 位图图画.矢量形状和文本工具 带有链接的整体屏幕视图 收存箱和Box支持云服务 2.Sk

麦子学院Android实战调用摄像头代码分享

Android如何实现调用摄像头?在安卓APP开发的过程中,经常会需要调用手机自身摄像头拍照的代码,那么android调用摄像头的代码是什么呢?现在麦子学院android开发老师告诉大家,android调用摄像头这个方法十分的简单实用,有需要的小伙伴可以参考下. 应用场景: 在Android开发过程中,有时需要调用手机自身设备的功能,本文侧重摄像头拍照功能的调用. 知识点介绍: 使用权限:调用手机自身设备功能(摄像头拍照功能),应该确保已经在AndroidManifest.xml中正确声明了对摄

麦子学院android开发之Android应用开发视图优化步骤

1)View优化 i.   减少不必要的View以及View的嵌套层次. 比如实现一个listview中常用的layout,可以使用RelativeLayout减少嵌套,要知道每个View的对象会耗费1~2k内存,嵌套层次过多会引起频繁的gc,造成ANR. ii.   通过HierarchyViewer查看布局结构 利用HierarchyViewer来查看View的结构:~/tools/hierarchyviewer,能很清楚地看到RelativeLayout下面的扁平结构,这样能加快dom的渲

麦子学院 —— 产品经理的工作方法及应用(二)

麦子学院 - 产品经理的工作方法及应用(二) 因为个人是学习前端开发的,对于产品这一块了解的毕竟尚浅,所以就不发表任何言论了.继续上一部分< 基础阶段和产品思维 >之后,这节内容我们 主要学习的是产品经理的工作方法以及应用.今天这节比较实用,会讲解软件 Axuer 的使用方法以及在实际项目中的运用.所以小伙伴们一样不要放松自己,坚持努力!  咱们下期将要更新<产品进阶课程>. 第一部分:Axure 的基本操作 第 1 章  认识Axure 第 2 章  Axure操作面板 第 3

麦子学院 — 产品经理之基础阶段和产品思维

关于产品经理技能学习的资源网上的非常杂乱也不系统,今天收集的这一套来自麦子学院的视频资源还是非常系统的.这套视频资源分为几个阶段,这里依照之前的习惯我们分开来说.那么今天大家可以学习一下第一阶段<基础阶段和产品思维>.小伙伴有意向学习产品这一块的可以抽时间来看看这个视频.下期将为大家更新<产品经理的工作方法及应用> 第一部分:深入理解产品经理 产品思维 产品思维案例1 产品思维案例2 产品思维案例3 产品的生产流程 正确认知产品经理 第二部分:互联网思维 互联网思维基础 互联网思维

iOS笔记:Objective-C自定义NSLog宏

/*  XCode LLVM XXX - Preprocessing中Debug会添加 DEBUG=1 标志  */ #ifdef DEBUG #define NSLog(FORMAT, ...) fprintf(stderr,"%s:%d\t%s\n",[[[NSString stringWithUTF8String:__FILE__] lastPathComponent] UTF8String], __LINE__, [[NSString stringWithFormat:FORM