大概思路(初步制作,粗工制造):demo

1、Collection 创建cell

2、cell上添加一个view,用来添加手势

3、字典用来存放数据-》每次执行StarGame数组接收没有数字的字典,原来字典对应的删除-》随机选中改变数组-》插回原来数据-》每次滑动 用选择排序分别相加相邻且相等的数据后,再用选择排序 进行排序(详情下文)-》刷新cell-》♻️

 

//数据
NSMutableDictionary * dictChange;//放 数值为0(代表没有数值的位置) 的字典
UISwipeGestureRecognizer * recognizer;//滑动手势
NSMutableDictionary * dictData;//数据字典
// 先添加 初始数据
-(void)creaDATA{ dictData = [NSMutableDictionary dictionary];
for (int i=; i<; i++) { [dictData setObject:@"" forKey:@(i)]; } }
-(void)StarGame{
//筛选出 模块上可以添加数据的 位置字典。装到数组,随机分配
dictChange = [NSMutableDictionary dictionary];
for (int i=; i<; i++) {
NSString * str = [dictData objectForKey:@(i)];
if ([str isEqualToString:@""]) { [dictChange setObject:@"" forKey:@(i)]; } } //先判断有没有满足要求
NSArray * value = [dictData allValues];
if ([value containsObject:_GameNum]) {
NSInteger haomiao,miao,fen; haomiao = timernumber%;
miao = timernumber/;
fen = miao/; [UIView pushAlertTwoActionViewWithMessage:[NSString stringWithFormat:@"恭喜你,完成游戏\n用时:%02ld:%02ld:%02ld",fen,miao,haomiao] Target:self Title:@"OH耶!!!" oneAlertTitle:@"挑战时间" twoAlertTitle:@"休息一下" oneActionfunc:^{
//继续
[dictData removeAllObjects];
[collectionvieww reloadData];
timernumber = ;
[self StarGame];
[self timerStar]; } twoActionfunc:^{ //返回上一页 }]; } //如果没有位置可以再添加数字了 游戏就结束了
if (dictChange.count ==) {
[timerss invalidate];
timerss = nil; [UIView pushAlertTwoActionViewWithMessage:@"游戏结束" Target:self Title:@"再挑战一局吧" oneAlertTitle:@"好的" twoAlertTitle:@"休息一下" oneActionfunc:^{
//继续
[dictData removeAllObjects];
[collectionvieww reloadData];
timernumber = ;
[self StarGame];
[self timerStar]; } twoActionfunc:^{ //返回上一页 }];
return;
} //随机添加数据。刷新表格
int random = (int)( (arc4random() % (dictChange.count)));
NSArray * dictKey = [dictChange allKeys];
[dictChange setObject:@"" forKey:dictKey[random]];
//返回给数据字典
for (NSString * key in dictKey) { [dictData setObject:dictChange[key] forKey:key]; }
[dictChange removeAllObjects];
//刷新表
[collectionvieww reloadData]; }

每次插入数字时

recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(silidingTop)];
[recognizer setDirection:(UISwipeGestureRecognizerDirectionUp)];
[frontView addGestureRecognizer:recognizer]; recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(silidingLift)];
[recognizer setDirection:(UISwipeGestureRecognizerDirectionLeft)];
[frontView addGestureRecognizer:recognizer]; recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(silidingDown)];
[recognizer setDirection:(UISwipeGestureRecognizerDirectionDown)];
[frontView addGestureRecognizer:recognizer]; recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(silidingRight)];
[recognizer setDirection:(UISwipeGestureRecognizerDirectionRight)];
[frontView addGestureRecognizer:recognizer];

上左下右 手势添加

-(void)silidingLift{

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, ), ^{
for (int h = ; h<; h++) { //选择 筛选相邻数字相加。只相加一次
for (int i=; i<; i++) { if (![dictData[@(i+*h)] isEqualToString:@""]) { for (int j=i+; j<; j++) { if (![dictData[@(j+*h)] isEqualToString:@""]){ if ([dictData[@(i+*h)] isEqualToString: dictData[@(j+*h)]]) { //后边的数是 相加后的值
[dictData setObject:[NSString stringWithFormat:@"%d",[dictData[@(j+*h)] intValue] + [dictData[@(i+*h)] intValue]] forKey:@(i+*h)];
[dictData setObject:@"" forKey:@(j+*h)];//前边的 设置为0 }
break; // 有了 就不再循环了 }
} } if (i==) {
[self Lift2:h];
} } } dispatch_async(dispatch_get_main_queue(), ^{
[collectionvieww reloadData]; [self StarGame];
});
}); } -(void)Lift2:(int)h{ //选择排序 整理位置
for(int i=;i<;i++){
if ([dictData[@(i+*h)] isEqualToString:@""])//i为0 的时候
{ for (int j=i+; j<; j++)
{
if (![dictData[@(j+*h)] isEqualToString:@""]) //j 有值的时候 //i 的值 为j 的。j设置为0
{ [dictData setObject:dictData[@(j+*h)] forKey:@(i+*h)];
[dictData setObject:@"" forKey:@(j+*h)]; break; // 继续下一次循环
} } } } }

iOS 类似2048、4096小游戏-OC的更多相关文章

  1. 用javascript实现2048的小游戏

    前段时间,看了一个视频,用javascript实现的2048小游戏,发现不难,都是一些基出的语法和简单逻辑. 整个2048游戏没有很多的数据,所有,实现起来还是很有成就感的. 先上图,简直就和原版游戏 ...

  2. 用WPF做了几个小游戏

    最近看书看累了,参考别人的代码(其实差不多就是把代码重新打了一遍o(╯□╰)o),用wpf做了个<2048>小游戏,顺便在<Git教程>学习下git,也顺便把在<写让别人 ...

  3. ios2048小游戏

    最近突然想写一个2048的小游戏,由于全部是自定义控件,所以程序看起来冗杂,但是核心的算法部分还是很不错的,大家感兴趣的可以仔细看看. 声明部分: #import <UIKit/UIKit.h& ...

  4. 微信小游戏egret开发包括p2引擎小结

    用egret + p2 做一个类似投球的小游戏,坑大致如下: 1.p2引擎与egret坐标不同注意转换,横坐标没什么,纵坐标egret.y = stageHeight - body.position[ ...

  5. 我用Axure制作了一款火影小游戏 | PM老猫

    Axure不仅仅是一个原型工具,除了原型之外还可以用来制作一些静态网页,这点对于不懂代码或前端的同学来说挺实用.之前整理了一版<Axure函数自查表>,因为感觉内容太多又对前端样式及脚本感 ...

  6. Swift实战之2048小游戏

    上周在图书馆借了一本Swift语言实战入门,入个门玩一玩^_^正好这本书的后面有一个2048小游戏的实例,笔者跟着实战了一把. 差不多一周的时间,到今天,游戏的基本功能已基本实现,细节我已不打算继续完 ...

  7. jQuery实践-网页版2048小游戏

    ▓▓▓▓▓▓ 大致介绍 看了一个实现网页版2048小游戏的视频,觉得能做出自己以前喜欢玩的小游戏很有意思便自己动手试了试,真正的验证了这句话-不要以为你以为的就是你以为的,看视频时觉得看懂了,会写了, ...

  8. js、jQuery实现2048小游戏

    2048小游戏 一.游戏简介:  2048是一款休闲益智类的数字叠加小游戏 二. 游戏玩法: 在4*4的16宫格中,您可以选择上.下.左.右四个方向进行操作,数字会按方向移动,相邻的两个数字相同就会合 ...

  9. iOS 基础入门--Bull' Eye 小游戏 

      说明   Bull's Eye小游戏是http://www.raywenderlich.com/store/ios-apprentice里非常酷的入门demo 跟着该教程一步步做下来便有了 ...

随机推荐

  1. mysql 查询各数据库的占用大小

    select TABLE_SCHEMA, concat(truncate(sum(data_length)/1024/1024,2),' MB') as data_size, concat(trunc ...

  2. Spring Boot 的Maven多模块开发web项目使用外部容器进行部署

    Spring Boot中自带有Tomcat容器,因此Spring Boot项目只需要运行main函数,就可以运行,但是以往的web项目,我们习惯于使用自己安装的Tomcat运行或者使用Tomcat.J ...

  3. [PHP]Symfony or Laravel 在 console 中结合 Workerman

    在web框架的console中,命令不再是直接指定入口文件,如以往 php test.php start,而是类似 php app/console do 的形式. workerman 对命令的解析是 ...

  4. Sonar常见问题分析

    1.Equality tests should not be made with floating point value 代码举例: if (result == num) //result和num均 ...

  5. mysql 有哪些索引

    Mysql支持哪几种索引 从数据结构角度 1.B+树索引(O(log(n))):关于B+树索引,可以参考 MySQL索引背后的数据结构及算法原理 2.hash索引:a 仅仅能满足"=&quo ...

  6. Linux磁盘分区(一):添加

    ***********************************************声明************************************************ 原创 ...

  7. ThinkPHP的Rbac权限控制

    RBAC(Role-Based Access Controll)基于角色的访问控制 在 ThinkPHP3.2.3 中 RBAC 类位于 /ThinkPHP/Library/Org/Util/Rbac ...

  8. ASP.NET Core远程调试

    关于ASP.NET Core远程调试的具体做法可参考微软文档——Remote Debug ASP.NET Core on a Remote IIS Computer in Visual Studio ...

  9. html和css的区别

    html(结构) Hyper Text Markup Language(超文本标记语言)用于定义文档内容结构 1.该语言写的代码通常会被浏览器解析执行 2.超文本:不止包括文本,还有图片.链接.音乐. ...

  10. 使用django UWSGI 出现 Bad Request (400)

    使用 Nginx + Django+UWSGI 部署机器时,一直出现 Debugging Apache/Django/WSGI Bad Bad Request (400) 错误 最后发现问题是 Dja ...