翻翻看游戏小总结

  在做这个游戏前,我们首先要理清下整个设计思路。我们做翻翻看,游戏的效果就是:一开始图片全正面显示,给我们几秒的时间记住每一张图的位置,然后全部翻转过去,显示同一背景图片。当我们点击图片的时候,图片翻转过来,如果连续点击的两张图片是相同的话,图片消失,否则将翻转回去背景图片那一面。

  因为我们要有两两相同的图片一起出现,而且出现位置还需要是随机的。因为我们存储图片可以以他的图片名形式进行存储,所以这时我们就可以用一个可变数组先存进图片,例如我们创建一个有24张图片的翻翻看游戏,我们就要先创建个数组以接受图片(以下代码包含音效)

    

#import "ViewController.h"

#import <AVFoundation/AVFoundation.h>

@interfaceViewController ()

 

@end

 

@implementation ViewController

 

- (void)viewDidLoad

{

    [superviewDidLoad];

//创建有序的图片数组
    NSMutableArray *aryImg=[[[NSMutableArray alloc]init]autorelease];
    //创建一个声音数组
    NSMutableArray *soundAry=[[[NSMutableArray alloc]init]autorelease];
    //加入12张图片,每张加入2次,总共24张
    //循环添加图片名进数组
    for (int i=1; i<13; i++) {
        NSString *str=[NSString stringWithFormat:@"fruit_normal_%d",i];
        [aryImg addObject:str];//语句使用2次,就是重复加入一张图片2次
        [aryImg addObject:str];
        NSString *str1=[NSString stringWithFormat:@"sound_%d",i];
        [soundAry addObject:str1];
        [soundAry addObject:str1];
    }
}

  我们要使游戏有可玩性,肯定要时图片随机出现在24个位置的某个位置,而不是固定的某些位置,这时候我们就需要创建一个新的数组,将原本存储图片的数组内的元素进行随机打乱存入

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController
@property(retain,nonatomic)NSMutableArray *suijiAry,*sjSoundAry;//随机数组
@property(retain,nonatomic)UIImageView *lastimgV;//用来接收最后一次点击
@property(retain,nonatomic)UIAlertView *alertV;//提示视图窗
@end


#import "ViewController.h"

#import <AVFoundation/AVFoundation.h>


@interfaceViewController ()

@end

@implementation ViewController

- (void)viewDidLoad

{

    [superviewDidLoad];

//生成随机图片数组和像对应的声音数组
//创建一个随机数组,用来接收有序数组的随机
    self.suijiAry=[[[NSMutableArray alloc]init]autorelease];
    //创建随机数组,用来接受有序声音数组的随机
    self.sjSoundAry=[[[NSMutableArray alloc]init]autorelease];
    for (int i=0; i<24; i++) {
        int j= arc4random()%aryImg.count;//随机取下标
        NSString *str=[aryImg objectAtIndex:j];//根据下标取数组元素,并加入数组str
        NSString *str1=[soundAry objectAtIndex:j];
        [self.suijiAry addObject:str];
        [self.sjSoundAry addObject:str1];
        [aryImg removeObjectAtIndex:j];//接收后移除原本数组元素,避免重复获取
        [soundAry removeObjectAtIndex:j];
    }
}

 

  做好了这些前期准备后,我们就可以来创建我们的视图窗口以放置这些东西了

#import "ViewController.h"
#import <AVFoundation/AVFoundation.h>
@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

//根据随机数组创建一组随机排布的图片
    for (int i=0; i<24; i++) {
        UIImageView *imgV=[[UIImageView alloc]initWithFrame:CGRectMake(80*(i%4)+5, 75*(i/4)+5, 70, 70)];//创建图相框
        imgV.tag=1000+i;//给图相框添加标签 为1000+i格式
        imgV.image=[UIImage imageNamed:[self.suijiAry objectAtIndex:i]];//设置图相框图片
        
        [self.view addSubview:imgV];//添加图相框子示图
}

   整个视图都创建好了,这个时候我们就要对图片视图的整个效果进行丰富,是它能达到我们像要达到的效果。

因为图片是无法点击的,所以我们要启用用户交互,然后给图片加上手势

imgV.userInteractionEnabled=YES;//打开图相框交互,才能添加手势
        
        //添加单击事件(手势)
        UITapGestureRecognizer*danji=[[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(danjiAction:)]autorelease];
        //给图片加上手势:单击  注:因为图片不支持点击,所以我们只能给图片视图增加一个手势用来支持
        [imgV addGestureRecognizer:danji];
        
        
        //将图片延迟两秒后翻转
        [self performSelector:@selector(fanzhuan:) withObject:imgV afterDelay:2];

  我们再写一下实现单击和翻转的方法

//翻转事件
-(void)fanzhuan:(UIImageView*)imgView{
    //翻转语句 随着时间变化的动画 1部分代表是翻转所用时间,也就是翻转速度 “2”部分为枚举类的第3个选项。
    [UIView animateWithDuration:1 animations:^{
        imgView.image=[UIImage imageNamed:@"beijing.jpg"];//设置初始背景
        [UIView setAnimationTransition:2 forView:imgView cache:YES];
    } completion:^(BOOL finished) {  }];
    //启用用户交换,启用次选项才能使图像可用被触发点击事件
    imgView.userInteractionEnabled=YES;

}
//单击事件
-(void)danjiAction:(UITapGestureRecognizer*)sender{
    //设置翻转对象为发送过来的对象
    UIImageView *imgV=(UIImageView*)sender.view;
    //播放相应的声音
    NSURL *url=[NSURL fileURLWithPath:[[NSBundle mainBundle]pathForResource:[self.sjSoundAry objectAtIndex:imgV.tag-1000] ofType:@"mp3"]];
    AVAudioPlayer *player=[[AVAudioPlayer alloc]initWithContentsOfURL:url error:nil];
    [player play];
    //设置翻转效果
    [UIView animateWithDuration:1 animations:^{
        //设置翻转后的图片,用标签法确定
        imgV.image=[UIImage imageNamed:[self.suijiAry objectAtIndex:imgV.tag-1000]];
        //设置动画翻转方式,对象,存储
        [UIView setAnimationTransition:1 forView:imgV cache:YES];
        
    } completion:^(BOOL finished) {
        //翻转之后事件
        if (self.lastimgV!=nil) {
            //后面点击的图片和之前点击的图片是否相同,并且点击的图片编号不是同一张
            if ([self.lastimgV.image isEqual:imgV.image]&&self.lastimgV.tag!=sender.view.tag) {
                //设置动画效果
                [UIView animateWithDuration:1 animations:^{
                         //alpha:设置透明度,为0隐藏
                        self.lastimgV.alpha=0;
                        imgV.alpha=0;
  
                    }];
                //设置通关提醒
                static int serco=0;
                serco++;
                if (serco==self.suijiAry.count/2) {
                    self.alertV=[[UIAlertView alloc]initWithTitle:@"过关" message:@"恭喜你过关" delegate:nil cancelButtonTitle:@"退出" otherButtonTitles:@"下一关", nil];
                    [self.alertV show];
                    [self.alertV release];
                }
  
            }else{
                //如果图片.image属性不同,将图片翻转回原来的背景
                [self performSelector:@selector(fanzhuan:) withObject:self.lastimgV afterDelay:1];
                [self performSelector:@selector(fanzhuan:) withObject:imgV afterDelay:1];
            }
            //执行完对比后,将lastimgV设为空,以便下次判断
            self.lastimgV=nil;
        }else{
            //如果lastimgV是空的,就为他存储这次点击的图片
            self.lastimgV=imgV;
        }
        
    }];

    

}

 

 

posted on 2013-10-29 09:26  IOS菜菜菜菜鸟  阅读(401)  评论(0编辑  收藏  举报

导航