iOS实现拼图小游戏

本文实例为大家分享了iOS实现拼图小游戏的具体代码,供大家参考,具体内容如下

首先找到这8张图片,还需要一张空白的图片,自己随便剪一张吧。

定义三个属性:button可变数组,图片可变数组,正确顺序的图片数组。

@property(retain, nonatomic)NSMutableArray *buttonArray;
@property(retain, nonatomic)NSMutableArray *a;
@property(retain, nonatomic)NSArray        *aa;

铺好拼图界面

//图片数组a,用来储存每个图片名称,并且用于后来的打乱
self.a = [NSMutableArray arrayWithObjects:@"1.jpg",@"2.jpg",@"3.jpg",@"4.jpg",@"5.jpg",@"6.jpg",@"7.jpg",@"8.jpg",@"9.jpg", nil];
//备份一个正确顺序的图片数组,用于判断游戏是否过关
self.aa = [NSArray arrayWithArray:self.a];
//重新开始按钮
UIButton *star = [[UIButton alloc] initWithFrame:CGRectMake(120, 400, 100, 40)];
[star setTitle:@"重新开始" forState:UIControlStateNormal];
[star setTitleColor:[UIColor blueColor] forState:UIControlStateNormal];
star.layer.cornerRadius = 6.6f;
star.layer.backgroundColor = [[UIColor colorWithRed:0.922 green:0.925 blue:0.929 alpha:1]CGColor];
//添加点击事件
[star addTarget:self action:@selector(kaishi) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:star];
[star release];

//铺出9个button
    self.buttonArray = [NSMutableArray array];
    NSInteger count = 0;
    NSInteger wight = 351 / 3;
    NSInteger higth = 351 / 3;
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(j * (wight+2) + 10, i * (higth + 2) + 20, wight, higth)];
            button.backgroundColor = [UIColor blackColor];
            //给每个button上图片
            [button setImage:[UIImage imageNamed:self.a[count]] forState:UIControlStateNormal];
            [self.view addSubview:button];
            //给每个button添加点击事件
            [button addTarget:self action:@selector(change:) forControlEvents:UIControlEventTouchUpInside];
            //把button放入数组
            [self.buttonArray addObject:button];
            button.tag = count;
            [button release];
            count++;
        }
}

实现button的点击事件

- (void)change:(UIButton *)sender{
    NSInteger flag = 0;
    int p = 0;
    //“9.jpg”是空白的那个,打乱后,得在图片数组里找到所在下标,用flag存在来
    for (NSInteger i = 0; i < 9; i++) {
        if ([self.a[i] isEqualToString:@"9.jpg"]) {
            flag = i;
        }
    }

    //如果所点击的button的上下左右其中有一个是空白图片的话,就跟空白图片交换在图片数组的位置
    if (sender.tag - flag == 3 || sender.tag - flag == -3 || sender.tag - flag == 1 || sender.tag - flag == -1) {
        [self.a exchangeObjectAtIndex:flag withObjectAtIndex:sender.tag];
    }
    //重新给每个button上图片
    for (int i = 0; i < 9; i++) {
        [self.buttonArray[i] setImage:[UIImage imageNamed:self.a[i]] forState:UIControlStateNormal];
    }

    //判断是否拼图成功,每对应了一张图片p就加一,如果p最后等于9说明游戏通关
    for (int i = 0; i < 9 ; i++) {
        if ([self.a[i] isEqualToString:self.aa[i]]) {
            p++;
        }else{
            break;
        }
    }
    if (p == 9) {
        NSLog(@"%d",p);
        UIAlertView *a = [[UIAlertView alloc] initWithTitle:@"恭喜!" message:@"已通关" delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil];
        [a show];
        [a release];
    }
}

打乱所有图片

- (void)kaishi{
//产生0到8两个随机数,通过下标交换图片数组中的两张图片
    for (int i = 0; i < 10; i++) {
        [self.a exchangeObjectAtIndex:(arc4random() % 9)
                    withObjectAtIndex:(arc4random() % 9)];
    }
    //给每个button上图片
    for (int i = 0; i < 9; i++) {
        [self.buttonArray[i] setImage:[UIImage imageNamed:self.a[i]] forState:UIControlStateNormal];
    }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

时间: 2022-03-22

iOS实现比例拼图的方法示例

需求原型图: 要求: 各个模块的大小反映各个模块的占比(销售额),所有模块共同组成一个正方形. 后台返回的数据格式: { "result": true, "data": { "category_sale": [ { "name": "我是你的哥", "sale_amount": 1, "gross_margin_ratio": 0.22 }, { "name

iOS富文本的使用方法示例详解

前言 常常会有一段文字显示不同的颜色和字体,或者给某几个文字加删除线或下划线的需求. 使用富文本NSMuttableAttstring(带属性的字符串),上面的一些需求都可以很简便的实现. 最近想实现一个功能,如图: 每月价格 最初实现的时候想到了用两个Label,来实现,第一个显示¥4000,设置一个字体,第二个显示/月,设置另一个字体.这样就能实现这个效果了,但是最后想一想还是用富文本比较好,顺便可以学习一下. 今天我们先实现这个简单的效果. 先创建一个Label: -(UILabel *)

iOS webview捕获H5按钮方法示例代码

前言 本文主要给大家介绍了关于iOS webview捕获H5按钮的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧 方法如下: 实现iOS webview捕获使用H5中按钮的点击方法,可以使用JSContext. 1.在工程中Linked Frameworks and Libraries中加入JavaScriptCore.framework 2.在使用的地方#import <JavaScriptCore/JavaScriptCore.h> 3.实现webview的代理方

iOS读写json文件的方法示例

前言 本文主要给大家介绍了关于iOS读写json文件的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧 一.获取沙盒路径 每个iOS应用都有自己专属的应用沙盒,应用沙盒就是文件系统中的目录.但是iOS系统会将每个应用的沙盒目录与文件系统的其他部分隔离,应用必须待在自己的沙盒里,并只能访问自己的沙盒. 沙盒目录 包含内容 Documents 存放应用运行时生成的并且需要保留的数据,iCloud同步时会同步该目录 Library/Caches 存放应用运行时生成的数据,iCl

iOS实现文本分页的方法示例

前言 本篇文章将分为两部分,一部分是静态文本分页,一部分是动态文本分页即边填写文本边进行文本的分页. 我们所采用的方案为:TextKit进行处理,通过glyphRangeForTextContainer方法获取文本内容视图可容纳的文本范围来对文本进行切割分页. // Returns the range of characters which have been laid into the given container.  This is a less efficient method than

iOS查找私有API的方法示例

喜接新项目往往预示的会出一堆问题.解决问题的同时往往也就是学到更多东西的时候,这也许就是学习到新东西最直接最快速的方法吧! 小编经过努力,新项目终于过测试了,可是被苹果大大给拒了,好苦啊,最近的审核真的是没有谁了.这回被拒是因为项目中存在私有api,下图为被拒信息. 这就坑了啊,这么大一个项目,我如何定位呢? 如果是代码里面运用到私有api,那就简单了,直接 command+Shift+F ,就可以定位了! prefs:root= 就是原来代码里面的,小编找到后果断删除了! 最麻烦的就是在第三方

iOS判断是否越狱设备方法示例

前言 苹果是非常看重产品的安全性的,所以给用户设计了一套复杂的安全机制.这让喜爱自由,崇尚一切开放的程序员们极度不爽,于是越狱就成了苹果和黑客们反复斗法的场所.总体来说,越狱可以让我们随意安装.共享应用,但确实也降低了设备的安全性,会给一些恶意应用提供方便之门. 有时我们的应用希望知道安装的设备是否已经越狱了,显然,苹果官方不会给出解决方案来的,那么我们怎么办呢?下面来一起看看详细的介绍吧 越狱设备打印   (lldb) po [[NSFileManager defaultManager ] f

在iOS中给视频添加滤镜的方法示例

「众所周知,视频可以 P」,今天我们来学习怎么给视频添加滤镜. 在 iOS 中,对视频进行图像处理一般有两种方式: GPUImage 和 AVFoundation . 一.GPUImage 在之前的文章中,我们对 GPUImage 已经有了一定的了解.之前一般使用它对摄像头采集的图像数据进行处理,然而,它对本地视频的处理也一样方便. 直接看代码: // movie NSString *path = [[NSBundle mainBundle] pathForResource:@"sample&q

iOS中利用KeyChain保存用户信息的方法示例

前言 说到保存用户名和密码,以前有用过本地的数据库来保存,也接触过用userdefault来保存,后来在一个项目中发现了一个新的方法--用Keychain来保存.下面话不多说了,直接通过示例代码来介绍吧. 方法示例 一.新建一个LYKeychainTool类,导入系统Security框架 ,LYKeychainTool.h文件实现如下: // // LYKeychainTool.h // keyChainTest // // Created by Liyu on 2017/6/2. // Cop

iOS Swift开发之日历插件开发示例

本文介绍了iOS Swift开发之日历插件开发示例,分享给大家,具体如下: 效果图 0x01 如何获取目前日期 关于日期,苹果给出了 Date 类,初始化一个 Date 类 let date = Date() 打印出来就是当前系统的日期和时间 那么如何单独获得当前年份,月份呢? var date: [Int] = [] let calendar: Calendar = Calendar(identifier: .gregorian) var comps: DateComponents = Dat