首页 > 代码库 > IOS-石头剪子布小程序

IOS-石头剪子布小程序

    今天忙里偷闲,写了个石头剪子布的小程序,给大家做个小参考

主要功能如图:1.未开始出拳时,双方不停的做动画,并伴随背景音乐。

                    2.出拳后,判断双方输赢,并给相应的一方加分,伴随相应音效。

                    3.点击继续按钮,重新开始游戏.

 

   首先,在StroryBoard中,拖几个控件,包括:电脑的出拳ImageView,玩家出拳的ImageView,双方的得分label;玩家选择出拳对象的button;承载button的View;然后在.h文件中  进行连线。

#import <UIKit/UIKit.h>

 

@interface ViewController : UIViewController

//电脑出拳ImageView

@property (weak, nonatomic) IBOutletUIImageView *computerImageView;

//玩家出拳ImageView

@property (weak, nonatomic) IBOutletUIImageView *playerImageVIew;

//电脑得分Label

@property (weak, nonatomic) IBOutletUILabel *computerScoreLable;

//玩家得分Label

@property (weak, nonatomic) IBOutletUILabel *playerScoreLabel;

//操作视图

@property (weak, nonatomic) IBOutletUIView *actionVIew;

//消息提示Label

@property (weak, nonatomic) IBOutletUILabel *messageLbael;

 

//继续游戏

- (IBAction)resumegame:(id)sender;

// 玩家出拳

- (IBAction)playAction:(UIButton *)sender;

 

@end


在.m文件中

#import <AVFoundation/AVFoundation.h>

#import <AudioToolbox/AudioToolbox.h>

#define kActionViewDuration 0.5f

 

@interfaceViewController ()

 

{

    NSArray *ImagesList;

    

    AVAudioPlayer   *_backMusicPlayer;

    

    // 胜利音效

    SystemSoundID   _winSound;

    // 失败音效

    SystemSoundID   _faildSound;

    // 和局音效

    SystemSoundID   _drewSound;

    // 单击音效

    SystemSoundID   _clickSound;

    

    CGPoint point;

    

}

 

在-(void)viewDidLoad方法中

  //设置序列动画  添加图片到数组

    ImagesList=@[[UIImageimageNamed:@"石头.png"],

                 [UIImage imageNamed:@"剪刀.png"],

                 [UIImage imageNamed:@".png"],

                 ];

    

    // 开始动画

    [_computerImageViewsetAnimationImages:ImagesList];

    [_computerImageViewsetAnimationDuration:1.0f];

    [_computerImageViewstartAnimating];

    

    [_playerImageVIewsetAnimationImages:ImagesList];

    [_playerImageVIewsetAnimationDuration:1.0f];

    [_playerImageVIewstartAnimating];

    

    _backMusicPlayer=[selfloadMusic];

    [_backMusicPlayersetVolume:0.5];

    [_backMusicPlayerplay];

    

    // 7. 初始化音效

    _winSound = [selfloadSound:@"胜利.aiff"];

    _faildSound = [selfloadSound:@"失败.aiff"];

    _drewSound = [selfloadSound:@"和局.aiff"];

    _clickSound = [selfloadSound:@"点击按钮.aiff"];

    

    point=[_actionVIewcenter];

 


然后开始游戏  点击相应的图片  出拳  

- (IBAction)playAction:(UIButton *)sender {

    NSLog(@"%ld",sender.tag);

    

    //当点击出拳的时候  停止动画

    [_computerImageViewstopAnimating];

    [_playerImageVIewstopAnimating];

    NSInteger computerResult=arc4random()%3;

    NSInteger playerResult=sender.tag;

    

    //玩家视图显示选择的图像  电脑随机选择

    [_computerImageViewsetImage:ImagesList[computerResult]];

    [_playerImageVIewsetImage:ImagesList[playerResult]];

    

    //判定结果

    NSInteger result=playerResult-computerResult;

    NSLog(@"result  %ld",result);

    

    if (result ==0)

    {

        [_messageLbael setText:@"和局"];

        

        AudioServicesPlaySystemSound(_drewSound);

        

        

    }

    else if (result == -2 ||result ==1)

        

    {

        AudioServicesPlaySystemSound(_faildSound);

        [_messageLbael setText:@"你输了"];

        NSInteger  score=[_computerScoreLable.textintegerValue];

        score ++;

        [_computerScoreLablesetText:[NSStringstringWithFormat:@"%ld",score]];

        

    }

    else

    {

        [_messageLbael setText:@"你赢了"];

        

        AudioServicesPlaySystemSound(_winSound);

        

        

        NSInteger  score=[_playerScoreLabel.textintegerValue];

        score ++;

        [_playerScoreLabelsetText:[NSStringstringWithFormat:@"%ld",score]];

    }

    

   NSLog(@"%f",[_actionVIewcenter].y);

 

    //操作视图下移,显示出继续游戏的按钮

    [UIViewanimateWithDuration:kActionViewDurationanimations:^{

        [_actionVIewsetCenter:CGPointMake(_actionVIew.center.x, _actionVIew.center.y+100)];

        

    }];

 

    //判断距离;  如果不判断  操作视图会一直下移虽然在设备上已经移出便捷  但是作为一个程序  要有严谨的思路

    float Distance=[_actionVIew center].y-point.y;

 

    if (Distance >100)

    {

         [_actionVIewsetCenter:CGPointMake(_actionVIew.center.x, point.y+100)];

 

    }

    

}

 

然后进行  继续游戏 按钮的操作

 

- (IBAction)resumegame:(id)sender {

    AudioServicesPlaySystemSound(_clickSound);

    //点击继续  开始动画

    [_computerImageViewsetAnimationImages:ImagesList];

    [_computerImageViewsetAnimationDuration:1.0f];

    [_computerImageViewstartAnimating];

    

    [_playerImageVIewsetAnimationImages:ImagesList];

    [_playerImageVIewsetAnimationDuration:1.0f];

    [_playerImageVIewstartAnimating];

    

    //让操作视图上移  覆盖继续游戏按钮

    [UIViewanimateWithDuration:kActionViewDurationanimations:^{

        [_actionVIewsetCenter:CGPointMake(_actionVIew.center.x, _actionVIew.center.y-100)];

    }];

    

    //判断距离  以防点击多次继续游戏按钮  操作视图多次上次的现象

    float Distance=[_actionVIew center].y-point.y;

    

    if (Distance <100)

    {

        [_actionVIewsetCenter:CGPointMake(_actionVIew.center.x, point.y)];

      }

    }

 最后  实现音效  要加入相应的框架才可以

// 加载音效

- (SystemSoundID)loadSound:(NSString *)soundFileName

{

    // 1. 需要指定声音的文件路径,这个方法需要加载不同的音效

    NSString *path = [[NSBundlemainBundle]pathForResource:soundFileName ofType:nil];

    // 2. 将路径字符串转换成url

    NSURL *url = [NSURLfileURLWithPath:path];

    

    // 3. 初始化音效

    // 3.1 url => CFURLRef

    // 3.2 SystemSoundID

    SystemSoundID soundId;

    // url先写个错的,然后让xcode帮我们智能修订,这里的方法不要硬记!

    AudioServicesCreateSystemSoundID((__bridgeCFURLRef)(url), &soundId);

    

    return soundId;

}

-(AVAudioPlayer *)loadMusic

{

    NSString *path=[[NSBundlemainBundle] pathForResource:@"背景音乐" ofType:@"caf"];

    NSURL *url=[NSURLfileURLWithPath:path];

    AVAudioPlayer *player=[[AVAudioPlayeralloc]initWithContentsOfURL:url error:nil];

    

    [player setNumberOfLoops:-1];

    [player prepareToPlay];

    return player;

}