iOS 类似2048、4096小游戏-OC
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的更多相关文章
- 用javascript实现2048的小游戏
前段时间,看了一个视频,用javascript实现的2048小游戏,发现不难,都是一些基出的语法和简单逻辑. 整个2048游戏没有很多的数据,所有,实现起来还是很有成就感的. 先上图,简直就和原版游戏 ...
- 用WPF做了几个小游戏
最近看书看累了,参考别人的代码(其实差不多就是把代码重新打了一遍o(╯□╰)o),用wpf做了个<2048>小游戏,顺便在<Git教程>学习下git,也顺便把在<写让别人 ...
- ios2048小游戏
最近突然想写一个2048的小游戏,由于全部是自定义控件,所以程序看起来冗杂,但是核心的算法部分还是很不错的,大家感兴趣的可以仔细看看. 声明部分: #import <UIKit/UIKit.h& ...
- 微信小游戏egret开发包括p2引擎小结
用egret + p2 做一个类似投球的小游戏,坑大致如下: 1.p2引擎与egret坐标不同注意转换,横坐标没什么,纵坐标egret.y = stageHeight - body.position[ ...
- 我用Axure制作了一款火影小游戏 | PM老猫
Axure不仅仅是一个原型工具,除了原型之外还可以用来制作一些静态网页,这点对于不懂代码或前端的同学来说挺实用.之前整理了一版<Axure函数自查表>,因为感觉内容太多又对前端样式及脚本感 ...
- Swift实战之2048小游戏
上周在图书馆借了一本Swift语言实战入门,入个门玩一玩^_^正好这本书的后面有一个2048小游戏的实例,笔者跟着实战了一把. 差不多一周的时间,到今天,游戏的基本功能已基本实现,细节我已不打算继续完 ...
- jQuery实践-网页版2048小游戏
▓▓▓▓▓▓ 大致介绍 看了一个实现网页版2048小游戏的视频,觉得能做出自己以前喜欢玩的小游戏很有意思便自己动手试了试,真正的验证了这句话-不要以为你以为的就是你以为的,看视频时觉得看懂了,会写了, ...
- js、jQuery实现2048小游戏
2048小游戏 一.游戏简介: 2048是一款休闲益智类的数字叠加小游戏 二. 游戏玩法: 在4*4的16宫格中,您可以选择上.下.左.右四个方向进行操作,数字会按方向移动,相邻的两个数字相同就会合 ...
- iOS 基础入门--Bull' Eye 小游戏
说明 Bull's Eye小游戏是http://www.raywenderlich.com/store/ios-apprentice里非常酷的入门demo 跟着该教程一步步做下来便有了 ...
随机推荐
- css 单行文本居中显示,多行文本左对齐
父级元素 text-align:center; 自级元素 text-align:left; display:inline-block;
- angular2.x指令
1.指令 *ngIf: 判断 isActive 为true时 <user-detail> 生效展示 <user-detail *ngIf="isActive"&g ...
- [DFS遍历图]UVA10562 Undraw the Trees
传送门: 1. UVA - 10562 2. Vjudge [看图写树] 将题目中给出的树改写为 括号表示法 即 (ROOT (SON1(...) (SON2(...)...(SONn(... ...
- 企业级Tomcat部署实践及安全调优
1.1 Tomcat简介 Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache.Sun和其他一些公司及个人 ...
- android 开源收藏
第一部分 个性化控件(View) 主要介绍那些不错个性化的View,包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.Pro ...
- PL/SQL 游标 (实验七)
PL/SQL 游标 emp.dept 目标表结构及数据 要求 基于部门表建立游标dept_cursor1,使用记录变量接收游标数据,输出部门表信息: 显示格式: 部 门 号: XXX 部门名称: XX ...
- 神奇的 routing mesh - 每天5分钟玩转 Docker 容器技术(100)
接上一节案例,当我们访问任何节点的 8080 端口时,swarm 内部的 load balancer 会将请求转发给 web_server 其中的一个副本. 这就是 routing mesh 的作用. ...
- HDU 1216 Assistance Required 埃拉托色尼色筛法
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1216 思路:色筛法 代码(1): #include<iostream>//-------- ...
- php结合redis实现高并发下的抢购、秒杀功能 (转载)
抢购.秒杀是如今很常见的一个应用场景,主要需要解决的问题有两个: 1 高并发对数据库产生的压力 2 竞争状态下如何解决库存的正确减少("超卖"问题) 对于第一个问题,已经很容易想到 ...
- Require,js配置使用心得
首先大家要知道requirejs是干嘛用的,要解释,那就用一句话说下:RequireJS是一个JavaScript文件和模块加载器接下来我们开始学会配置使用requireJs,当然在学习使用的过程中也 ...