现在的位置: 首页 > 综合 > 正文

【IOS】自己写的一个舒尔特方格app

2017年11月30日 ⁄ 综合 ⁄ 共 15274字 ⁄ 字号 评论关闭

这是我自己用来练手的一个app,实现了基本的功能...感觉还不错,分享出来,欢迎批评指正(附下载地址,最下边)

//
//  ShuConfigView.h
//  ShuRect
//
//  Created by 东 王 on 12-3-30.
//  Copyright (c) 2012年 __MyCompanyName__. All rights reserved.
//

#import <UIKit/UIKit.h>
#import <QuartzCore/QuartzCore.h>
#import "GameView.h"

@interface ShuConfigView : UIViewController
{
    UIView   *backView;
    UIView   *btnView;
    
    UIButton *modeBtn;   //模式按钮
    UIButton *numberBtn; //数量按钮
    UIButton *beginBtn;  //开始按钮
    
    UIImage  *kidsImage; //幼儿模式图片
    UIImage  *memoryImage; //记忆模式图片
    UIImage  *adultImage; //成人模式图片
    
    UIImage  *numThreeImage; //3*3图片
    UIImage  *numFourImage;  //4*4图片
    UIImage  *numFiveImage;  //5*5图片
    
    UIImage  *gameBeginImage; //开始按钮图片
    
    GameView *toGameView;
    
    int modeInt;
    int numInt;
}
@property (nonatomic, retain) UIButton *modeBtn;
@property (nonatomic, retain) UIButton *numberBtn;
@property (nonatomic, retain) UIButton *beginBtn;

@property (nonatomic, retain) UIView   *backView;
@property (nonatomic, retain) UIView   *btnView;

@property (nonatomic, retain) UIImage  *kidsImage;
@property (nonatomic, retain) UIImage  *memoryImage;
@property (nonatomic, retain) UIImage  *adultImage;

@property (nonatomic, retain) UIImage  *numThreeImage;
@property (nonatomic, retain) UIImage  *numFourImage;
@property (nonatomic, retain) UIImage  *numFiveImage;

@property (nonatomic, retain) UIImage  *gameBeginImage;

@property (nonatomic, retain) GameView *toGameView;
@end

//
//  ShuConfigView.m
//  ShuRect
//
//  Created by 东 王 on 12-3-30.
//  Copyright (c) 2012年 __MyCompanyName__. All rights reserved.
//

#import "ShuConfigView.h"

//#define kDuration 0.7  //动画持续播放时间

@implementation ShuConfigView
@synthesize modeBtn,numberBtn,beginBtn;
@synthesize backView,btnView;
@synthesize kidsImage,memoryImage,adultImage,numThreeImage,numFourImage,numFiveImage,gameBeginImage;
@synthesize toGameView;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
        modeInt = 0;
        numInt  = 3;
    
        backView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
        btnView  = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
        UIImage *backImage = [UIImage imageNamed:@"background.png"];
        UIImageView *backImageView = [[UIImageView alloc] initWithImage:backImage];
        [backView addSubview:backImageView];
        
        kidsImage = [UIImage imageNamed:@"child_mode_n.png"];
        memoryImage = [UIImage imageNamed:@"memory_mode_n.png"];
        adultImage = [UIImage imageNamed:@"audlt_mode_n.png"];
        
        numThreeImage = [UIImage imageNamed:@"level3_n.png"];
        numFourImage = [UIImage imageNamed:@"level4_n.png"];
        numFiveImage = [UIImage imageNamed:@"level5_n.png"];
        
        gameBeginImage = [UIImage imageNamed:@"start_n.png"];
        
        modeBtn = [UIButton buttonWithType:UIButtonTypeCustom];
        [modeBtn setImage:kidsImage forState:UIControlStateNormal];
        [modeBtn setFrame:CGRectMake(46, 200, 227, 50)];
        [modeBtn addTarget:self action:@selector(modePressed:) forControlEvents:UIControlEventTouchUpInside];
        [btnView addSubview:modeBtn];   
        
        numberBtn = [UIButton buttonWithType:UIButtonTypeCustom];
        [numberBtn setImage:numThreeImage forState:UIControlStateNormal];
        [numberBtn setFrame:CGRectMake(46, 270, 227, 50)];
        [numberBtn addTarget:self action:@selector(numPressed:) forControlEvents:UIControlEventTouchUpInside];
        [btnView addSubview:numberBtn];
        
        beginBtn = [UIButton buttonWithType:UIButtonTypeCustom];
        [beginBtn setImage:gameBeginImage forState:UIControlStateNormal];
        [beginBtn setFrame:CGRectMake(46, 340, 227, 50)];
        [beginBtn addTarget:self action:@selector(beginPressed:) forControlEvents:UIControlEventTouchUpInside];
        [btnView addSubview:beginBtn];
        
        
    }
    return self;
}

/*
 *********模式按钮按下
 */
-(void)modePressed:(id)sender
{
    
    UIButton *myBtn = (UIButton *)sender;
    modeInt ++;
    if (modeInt == 1) {
        [myBtn setImage:memoryImage forState:UIControlStateNormal];
    }
    else if(modeInt == 2)
    {
        [myBtn setImage:adultImage forState:UIControlStateNormal];
    }
    else {
        modeInt = 0;
        [myBtn setImage:kidsImage forState:UIControlStateNormal];
    }
    
    NSLog(@"进来%d",modeInt);
}

/*
 *********开始按钮按下
 */
-(void)beginPressed:(id)sender
{
    toGameView = [[GameView alloc] init];
    toGameView.modNum = modeInt;
    switch (numInt) {
        case 3:
            toGameView.rowNum = 3;
            break;
        case 4:
            toGameView.rowNum = 4;
            break;
        case 5:
            toGameView.rowNum = 5;
            break;
        default:
            break;
    }
    /*
     *另一种跳转效果
     */
    /*CATransition *animation = [CATransition animation];
    
    animation.delegate = self;
    animation.duration = kDuration;
    animation.timingFunction = UIViewAnimationCurveEaseInOut;
    animation.type = kCATransitionFade;
    animation.subtype = kCATransitionFromLeft;*/
    
    [toGameView resetGame:nil];
    [self presentModalViewController:toGameView animated:YES];
}

/*
 *********数量按钮按下
 */
-(void)numPressed:(id)sender
{
    UIButton *myBtn = (UIButton *)sender;
    if (numInt == 3) {
        numInt = 4;
        [myBtn setImage:numFourImage forState:UIControlStateNormal];
    }
    else if (numInt == 4) 
    {
        numInt = 5;
        [myBtn setImage:numFiveImage forState:UIControlStateNormal];
    }else {
        numInt = 3;
        [myBtn setImage:numThreeImage forState:UIControlStateNormal];
    }
}
- (void)viewDidLoad
{
    [super viewDidLoad];
	// Do any additional setup after loading the view.
    [self.view addSubview:backView];
    
    [self.view addSubview:btnView];
}

- (void)viewDidUnload
{
    [super viewDidUnload];
    // Release any retained subviews of the main view.
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

@end

//
//  GameView.m
//  ShuRect
//
//  Created by 东 王 on 12-3-30.
//  Copyright (c) 2012年 __MyCompanyName__. All rights reserved.
//

#import "GameView.h"

@interface GameView ()
-(void)initNumArray;
-(void)numBtnPressed:(id)sender;
@end

@implementation GameView
@synthesize gameBtnView,gameBackView;
@synthesize gameNumArray;
@synthesize gameNumBtn,redBtnImage,greenBtnImage;
@synthesize resetGameBtn,resetBtnNormalImage,resetBtnPressedImage,backGameBtn,backBtnNormalImage,backBtnPressedImage,stillTime,beginTime;
@synthesize rowNum,modNum;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
        
        rowNum = 3;
        modNum = 0;
        currentNum = 1;
        timeInt = 3;
        timeFloat = 0.00;
        
        stillTime = [[UILabel alloc] initWithFrame:CGRectMake(110, 30, 100, 40)];
        [stillTime setText:@"3"];
        [stillTime setBackgroundColor:[UIColor colorWithWhite:0 alpha:0]];
        [stillTime setTextAlignment:UITextAlignmentCenter];

        beginTime = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timerFireMethod:) userInfo:nil repeats:YES];
        [self initNumArray];
        
        gameBackView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
        gameBtnView  = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
        
        UIImage *backImage = [UIImage imageNamed:@"background.png"];
        UIImageView *backImageView = [[UIImageView alloc] initWithImage:backImage];
        [gameBackView addSubview:backImageView];
        redBtnImage = [UIImage imageNamed:@"orange.png"];
        greenBtnImage = [UIImage imageNamed:@"green.png"];
        
        resetBtnNormalImage = [UIImage imageNamed:@"btn_replay_normal.png"];
        resetBtnPressedImage = [UIImage imageNamed:@"btn_replay_pressed.png"];
        resetGameBtn = [UIButton buttonWithType:UIButtonTypeCustom];
        [resetGameBtn setImage:resetBtnNormalImage forState:UIControlStateNormal];
        [resetGameBtn setImage:resetBtnPressedImage forState:UIControlEventTouchDown];
        [resetGameBtn setFrame:CGRectMake(240, 10, 60, 60)];
        [resetGameBtn addTarget:self action:@selector(resetGame:) forControlEvents:UIControlEventTouchUpInside];
        
        [gameBtnView addSubview:resetGameBtn];
        
        backBtnNormalImage = [UIImage imageNamed:@"btn_back_normal.png"];
        backBtnPressedImage = [UIImage imageNamed:@"btn_back_pressed.png"];
        backGameBtn = [UIButton buttonWithType:UIButtonTypeCustom];
        [backGameBtn setImage:backBtnNormalImage forState:UIControlStateNormal];
        [backGameBtn setImage:backBtnPressedImage forState:UIControlEventTouchDown];
        [backGameBtn setFrame:CGRectMake(10, 10, 60, 60)];
        [backGameBtn addTarget:self action:@selector(backGame:) forControlEvents:UIControlEventTouchUpInside];
        
        [gameBackView addSubview:stillTime];
        [gameBtnView addSubview:backGameBtn];
    }
    return self;
}

/*
 *******倒数3秒开始
 */
-(void)timerFireMethod:(NSTimer *)theTimer
{
    if (timeInt == 1) {
        [beginTime invalidate];
        
        if (modNum == 1) {
            [self initBtnRectMemory];
        }
        
        NSLog(@"jieshu");
        beginTime = [NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(timerFireMethodBegin:) userInfo:nil repeats:YES];
        return;
    }
        timeInt--;
        [stillTime setText:[NSString stringWithFormat:@"%d",timeInt]];
    
}

/*
 *******开始毫秒计时
 */
-(void)timerFireMethodBegin:(NSTimer *)theTimer
{
    timeFloat+=0.01;
    [stillTime setText:[NSString stringWithFormat:@"%.2f",timeFloat]];
}

/*
 *******返回主菜单
 */
-(void)backGame:(id)sender
{
    /*ShuConfigView *backHome = [[ShuConfigView alloc] init];
    
    backHome.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
    
    [self presentModalViewController:backHome animated:YES];*/
    self.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
    [self dismissModalViewControllerAnimated:YES];
}

/*
 *******重新游戏
 */
-(void)resetGame:(id)sender
{
    
    if (gameNumBtn!=nil) {
        
        gameNumBtn = nil;
        [gameBtnView removeFromSuperview];
    }
    currentNum = 1;
    NSLog(@"%d",rowNum);
    [self initNumArray];
    [self initBtnRect];
    [self.view addSubview:gameBtnView];
    
    timeFloat = 0.00;
    timeInt = 3;
    [beginTime invalidate];
    [stillTime setText:[NSString stringWithFormat:@"%d",timeInt]];
    beginTime = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timerFireMethod:) userInfo:nil repeats:YES];
    
}

/*
 *******初始化数字按钮
 */
-(void)initBtnRect
{
    float btnWidth = (290-10*(rowNum-1))/rowNum;
    float btnHeight = (380-10*(rowNum-1))/rowNum;
    for (int i = 0, countNum = 1; i<rowNum; i++) {
        for (int j = 0; j<rowNum; j++) {
            gameNumBtn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
            [gameNumBtn setBackgroundImage:redBtnImage forState:UIControlStateNormal];
            
            [gameNumBtn setTitle:[NSString stringWithFormat:@"%d",[[gameNumArray objectAtIndex:countNum-1] intValue]] forState:UIControlStateNormal];
            
            [gameNumBtn setFrame:CGRectMake(15+(btnWidth+10)*j, 80+(btnHeight+10)*i, btnWidth, btnHeight)];
            [gameNumBtn addTarget:self action:@selector(numBtnPressed:) forControlEvents:UIControlEventTouchUpInside];
            gameNumBtn.tag = [[gameNumArray objectAtIndex:countNum-1] intValue];
            [gameBtnView addSubview:gameNumBtn];
            
            countNum++;
        }
    }
}

/*
 *******记忆模式下再次初始化数字按钮
 */
-(void)initBtnRectMemory
{
    float btnWidth = (290-10*(rowNum-1))/rowNum;
    float btnHeight = (380-10*(rowNum-1))/rowNum;
    for (int i = 0, countNum = 1; i<rowNum; i++) {
        for (int j = 0; j<rowNum; j++) {
            gameNumBtn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
            [gameNumBtn setBackgroundImage:redBtnImage forState:UIControlStateNormal];
            
            //[gameNumBtn setTitle:[NSString stringWithFormat:@"%d",[[gameNumArray objectAtIndex:countNum-1] intValue]] forState:UIControlStateNormal];
            
            [gameNumBtn setFrame:CGRectMake(15+(btnWidth+10)*j, 80+(btnHeight+10)*i, btnWidth, btnHeight)];
            [gameNumBtn addTarget:self action:@selector(numBtnPressed:) forControlEvents:UIControlEventTouchUpInside];
            gameNumBtn.tag = [[gameNumArray objectAtIndex:countNum-1] intValue];
            [gameBtnView addSubview:gameNumBtn];
            
            countNum++;
        }
    }
}

/*
 *******按下数字按钮时触发的函数
 */
-(void)numBtnPressed:(id)sender
{
    UIButton *myBtn = (UIButton *)sender;
    NSLog(@"myBtnNum:%d",myBtn.tag);
    if (timeFloat >= 0.01) {
        if (myBtn.tag == currentNum) {
            if (modNum == 0) {
                [myBtn setBackgroundImage:greenBtnImage forState:UIControlStateNormal];
            }
            
            if (modNum == 1) {
                [myBtn setTitle:[NSString stringWithFormat:@"%d",myBtn.tag] forState:UIControlStateNormal];
            }
            
            if (myBtn.tag == rowNum*rowNum) {
                [beginTime invalidate];
                GameAlertC *alert = [[GameAlertC alloc] initGameAlert:@"alertBack.jpg" rect:CGRectMake(0, 0, 300, 300) title:[NSString stringWithFormat:@"恭喜你:%.2f秒",timeFloat]];
                alert._delegate = self;
                [self.view addSubview:alert];
                return;
            }
            currentNum ++;
        }
    }
}

/*
 *******点击弹出层按钮后响应函数
 */
-(void) AfterClickBtn:(id)sender
{
    UIButton * sc = (UIButton *)sender;
    if (sc.tag == 1) {
        [self dismissModalViewControllerAnimated:YES];
    }else {
        [self resetGame:nil];
    }
}

/*
 *******初始化随机数组
 */
-(void)initNumArray
{
    int array_insert;
    gameNumArray = [NSMutableArray arrayWithCapacity:rowNum*rowNum];
    array_insert=(int)(arc4random() % (rowNum*rowNum))+1;
    [gameNumArray addObject:[NSNumber numberWithInt:array_insert]];
    for (int i=0; i<rowNum*rowNum-1; i++) {
        
        while ([gameNumArray containsObject:[NSNumber numberWithInt:array_insert]]) {
            array_insert=(int)(arc4random() % (rowNum*rowNum))+1;
        }
        [gameNumArray addObject:[NSNumber numberWithInt:array_insert]];
    }
}

- (void)viewDidLoad
{
    [super viewDidLoad];
	// Do any additional setup after loading the view.
    NSLog(@"你好");
    [self.view addSubview:gameBackView];
    
    [self.view addSubview:gameBtnView];
}

- (void)viewDidUnload
{
    [super viewDidUnload];
    // Release any retained subviews of the main view.
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

@end

//
//  GameAlertC.m
//  ShuRect
//
//  Created by 东 王 on 12-4-4.
//  Copyright (c) 2012年 __MyCompanyName__. All rights reserved.
//

#import "GameAlertC.h"

@implementation GameAlertC
@synthesize _delegate;

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
    }
    return self;
}

-(id)initGameAlert:(NSString *)backImageStr rect:(CGRect)backRect title:(NSString *)alertTitleStr
{
    self = [super initWithFrame:CGRectMake(0, 0, 320, 480)];
    if (self) {
        self.userInteractionEnabled = YES;
        NSLog(@"RectHeight:%f",backRect.size.height*2/3);
        UIImageView *alertBackImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:backImageStr]];
        alertBackImageView.userInteractionEnabled = YES;
        [alertBackImageView setFrame:backRect];
        UILabel *alertLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, backRect.size.width, backRect.size.height*2/3)];
        [alertLabel  setText:alertTitleStr];
        [alertLabel setBackgroundColor:[UIColor colorWithWhite:0 alpha:0]];
        [alertLabel setTextAlignment:UITextAlignmentCenter];
        alertLabel.center = alertBackImageView.center;
        [alertBackImageView addSubview:alertLabel];
        alertBackImageView.center = self.center;
        
        //设置弹出层圆角及border颜色宽度
        alertBackImageView.layer.cornerRadius = 8;
        alertBackImageView.layer.borderWidth  = 2;
        alertBackImageView.layer.borderColor  = [UIColor lightGrayColor].CGColor;
        alertBackImageView.layer.masksToBounds = YES;
        
        //设置弹出动画
        CAKeyframeAnimation *animation;
        animation = [CAKeyframeAnimation animationWithKeyPath:@"transform"];
        animation.duration = 0.3;
        animation.delegate = self;
        animation.removedOnCompletion = YES;
        animation.fillMode = kCAFillModeForwards;
        
        NSMutableArray *values = [NSMutableArray array];
        [values addObject:[NSValue valueWithCATransform3D:CATransform3DMakeScale(0.1, 0.1, 1.0)]];
        [values addObject:[NSValue valueWithCATransform3D:CATransform3DMakeScale(1.2, 1.2, 1.0)]];
        [values addObject:[NSValue valueWithCATransform3D:CATransform3DMakeScale(0.9, 0.9, 0.9)]];
        [values addObject:[NSValue valueWithCATransform3D:CATransform3DMakeScale(1.0, 1.0, 1.0)]];
        
        animation.values = values;
        [alertBackImageView.layer addAnimation:animation forKey:nil];
        
        UIButton *okBtn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        okBtn.tag = 1;
        okBtn.frame = CGRectMake(alertBackImageView.frame.size.width/2-55, 6*alertBackImageView.frame.size.height/7-25, 50, 30);
        /*[okBtn setBackgroundColor:[UIColor yellowColor]];
        okBtn.layer.cornerRadius = 8;
        okBtn.layer.masksToBounds = YES;*/
        
        [okBtn setTitle:@"Menu" forState:UIControlStateNormal];
        [okBtn addTarget:self action:@selector(popAlert:) forControlEvents:UIControlEventTouchUpInside];
        [alertBackImageView addSubview:okBtn];
        
        UIButton *againBtn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        againBtn.frame = CGRectMake(alertBackImageView.frame.size.width/2+45, 6*alertBackImageView.frame.size.height/7-25, 50, 30);
        /*[okBtn setBackgroundColor:[UIColor yellowColor]];
         okBtn.layer.cornerRadius = 8;
         okBtn.layer.masksToBounds = YES;*/
        
        [againBtn setTitle:@"Again" forState:UIControlStateNormal];
        againBtn.tag = 2;
        [againBtn addTarget:self action:@selector(popAlert:) forControlEvents:UIControlEventTouchUpInside];
        [alertBackImageView addSubview:againBtn];
        [self addSubview:alertBackImageView];
    }
    return  self;
}
//点击弹出层按钮响应函数
-(void)popAlert:(id)sender
{
    UIButton *switchBtn = (UIButton *)sender;
    [_delegate AfterClickBtn:switchBtn];
    [self removeFromSuperview];
}
/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{
    // Drawing code
}
*/

@end

完整项目下载地址:http://download.csdn.net/detail/dongge_111/4206406

抱歉!评论已关闭.