大概思路(初步制作,粗工制造):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. css 单行文本居中显示,多行文本左对齐

    父级元素 text-align:center; 自级元素 text-align:left; display:inline-block;

  2. angular2.x指令

    1.指令 *ngIf: 判断 isActive 为true时 <user-detail> 生效展示 <user-detail *ngIf="isActive"&g ...

  3. [DFS遍历图]UVA10562 Undraw the Trees

    传送门: 1. UVA - 10562 2. Vjudge [看图写树]     将题目中给出的树改写为 括号表示法 即 (ROOT (SON1(...) (SON2(...)...(SONn(... ...

  4. 企业级Tomcat部署实践及安全调优

    1.1 Tomcat简介 Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache.Sun和其他一些公司及个人 ...

  5. android 开源收藏

    第一部分 个性化控件(View) 主要介绍那些不错个性化的View,包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.Pro ...

  6. PL/SQL 游标 (实验七)

    PL/SQL 游标 emp.dept 目标表结构及数据 要求 基于部门表建立游标dept_cursor1,使用记录变量接收游标数据,输出部门表信息: 显示格式: 部 门 号: XXX 部门名称: XX ...

  7. 神奇的 routing mesh - 每天5分钟玩转 Docker 容器技术(100)

    接上一节案例,当我们访问任何节点的 8080 端口时,swarm 内部的 load balancer 会将请求转发给 web_server 其中的一个副本. 这就是 routing mesh 的作用. ...

  8. HDU 1216 Assistance Required 埃拉托色尼色筛法

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1216 思路:色筛法 代码(1): #include<iostream>//-------- ...

  9. php结合redis实现高并发下的抢购、秒杀功能 (转载)

    抢购.秒杀是如今很常见的一个应用场景,主要需要解决的问题有两个: 1 高并发对数据库产生的压力 2 竞争状态下如何解决库存的正确减少("超卖"问题) 对于第一个问题,已经很容易想到 ...

  10. Require,js配置使用心得

    首先大家要知道requirejs是干嘛用的,要解释,那就用一句话说下:RequireJS是一个JavaScript文件和模块加载器接下来我们开始学会配置使用requireJs,当然在学习使用的过程中也 ...