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 跟着该教程一步步做下来便有了 ...
随机推荐
- ubuntu16.04安装交叉编译链
我使用的是arm-linux-gcc 4.3.2版本,其他版本类似,附上下载链接: https://pan.baidu.com/s/1geUOfab 密码: frzy 首先我的安装包是tar.bz2的 ...
- GameObject类及相关API
GameObject.Find(String name):查找一个名为name的游戏物体,并返回这个游戏物体,找不到返回null.(不到万不得已,不要在Update()中使用,建议在Start()中使 ...
- Java第二季
1.封装 (1)概念 将类的某些信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问. (2)封装的实现步骤 2.Java中的访问修饰符 3.继承 (1)Ja ...
- C++反汇编第二讲,不同作用域下的构造和析构的识别
C++反汇编第二讲,不同作用域下的构造和析构的识别 目录大纲: 1.全局(静态)对象的识别,(全局静态全局一样的,都是编译期间检查,所以当做全局对象看即可.) 1.1 探究本质,理解构造和析构的生成, ...
- Neutron控制节点集群
#Neutron控制节点集群 openstack pike 部署 目录汇总 http://www.cnblogs.com/elvi/p/7613861.html #.Neutron控制节点集群 #本实 ...
- 简单使用Unity导航系统(小白之路)
1.介绍 NavMesh:是一种根据场景中几何图像创建出来的3D网格.它会使导航和寻路变得很容易. 简单来说,NavMesh是一种我们在游戏世界中,可以让游戏角色在其表面行走并且导航的平面. 2.注意 ...
- linux禁用锁定和解除解锁用户账号的方法
Linux系统使用的是/etc/shadow保存加密了的用户密码,要禁止一个帐号的话,最快的方法就是修改存储于/etc/shadow中的密码. 一般情况下,一个有效的Linux用户在/etc/shad ...
- stm32串口接收中断协议解析
借鉴了文章:<stm32串口中断接收方式详细比较> 文章地址:http://blog.csdn.net/kevinhg/article/details/40186169 串口的配置这里不做 ...
- SQL Server学习之路(八):扩展SQL语句
0.目录 1.问题描述 2.第一种方法 通过GROUP BY子句解决 3.第二种方法 通过聚合函数解决 4.第三种方法 在select...from...中的from后面嵌套一个表 5.第四种方法 在 ...
- WebLogic部署报java.lang.ClassCastException: weblogic.xml.jaxp.RegistrySAXParserFactory cannot be cast to javax.xml.parsers.SAXParserFactory
今天在部署WebLogic项目时,报了java.lang.ClassCastException: weblogic.xml.jaxp.RegistrySAXParserFactory cannot b ...