zoukankan      html  css  js  c++  java
  • 程序日志--ios“考反应扑克游戏”程序

    交代一下我做程序的工具:mac os x虚拟机10.9.3         Xcode6         百度^-^         參考书iPhone30天精通


    总结与经验,还有遇到的问题,都在程序里面写出来了,看着长,事实上从头往下看10分钟就全都搞懂了,我的凝视非常“白话”。



    //  ViewController.h

    //  12.1
    //
    //  Created by 李迪 on 15-7-28.
    //  Copyright (c) 2015年 李迪. All rights reserved.
    //
    /*
     在这里总结一下本次程序:我这个程序与书上的逻辑不一样。我是使用的循环的计时器完毕的。我认为书上的做法不适合我敲代码的思想。
     这个程序做了一天
     1.有新的控件“UIImageView”用来显示图片的控件,把控件放到storyboard里面自己调整好大小,便能够在“UIImageView”上面显示图片,将要显示的图片格式换成png格式,然后将图片随便加入在目录里面,显示就调用“imageName.image = [UIImage imageNamed:@"name.png"];”方法就可以。


     2.发现后面确实没什么好说的。详细的经验与敲代码的过程遇到的问题都在程序里面写出来了。


     */
    #import <UIKit/UIKit.h>
    #import <Foundation/Foundation.h>
    @interface ViewController : UIViewController{
        IBOutlet UIImageView *pokerImage;
        NSDate * startDate;
        NSTimer * timer;
    }

    @property UIImageView *pokerImage;
    @property NSDate *startDate;
    @property NSTimer *timer;

    -(IBAction)pokerPressed;


    @end


    //  ViewController.m
    //  12.1
    //
    //  Created by 李迪 on 15-7-28.
    //  Copyright (c) 2015年 李迪. All rights reserved.
    //

    #import "ViewController.h"

    @interface ViewController ()
                

    @end

    @implementation ViewController
    @synthesize startDate,pokerImage,timer;

    int spadeOn;

    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view, typically from a nib.
        //当视图控制器(ViewController)读取到内存的时候就建立一个提示框,介绍游戏
        
        //把游戏扑克图像视图对象定义为“扑克背面”----起始时为扑克背面
        pokerImage.image = [UIImage imageNamed:@"0000.png"];
        
        //显示本提示框,以下的提示框仅仅有一个“确定”选项。当按确定的时候对话框就隐藏起来了
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"考反应扑克游戏" message:@"当黑桃出现时以最高速度按下扑克" delegate:self cancelButtonTitle:@"游戏開始" otherButtonTitles:nil, nil];
        [alert show];
    }


    //接下来就是启动游戏的方法了,也是UIAlertView默认的方法,当提示框隐藏时自己主动运行的代码,不须要实现代理什么的,仅仅要把方法名写对就能够了
    -(void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex{
        
        //让“控制器”spadeOn为0,这样假设刚開始就点击扑克牌的话就有提示。做出的反应是错误的。
        spadeOn = 0;
        
        //做定时器,定时更换游戏显示的扑克
        //要推断计时器是否开了,没开就打开,假设开了就不用管了,所以用一个if语句控制。
        //isValid这种方法是推断计时器是否在运行。返回的是布尔类型的值
        //我做的这个定时器是让它一直反复运行的,每1秒换一张扑克。所以在点击扑克然后做出点击是否正确的推断的时候,须要暂停该计时器。即在pokerPressed方法内做出暂停的举动。
        if (![self.timer isValid]){
            self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(onAceTimer) userInfo:nil repeats:YES];
            //注意:我在之前程序一直有bug,就是停止后面的计时器的方法一直不奏效,原因就是我前面的语句没有“self.timer = ”这句代码,也就是我定义的计时器一直就是一个空指针。所以没办法给这个空指针计时器暂停,后来加上“self.timer = ”这句代码之后。使用暂停语句就能够给计时器暂停了。
        }
    }


    //这个是点击扑克牌的响应方法,与此方法链接的就是button,我把button放大了。让它铺在扑克牌的图片上面。这样点击扑克牌的画面就是点击button
    -(IBAction)pokerPressed{
        //计时器开启了,那么咱就给他关闭了
        if (self.timer) {
            [self.timer invalidate];
            self.timer = nil;
        }

        //不同情况下点击扑克会有不同的结果,如今就先写一下IBAction的方法,最后写启动程序的方法吧
        //两种情况发生,一种点对的。一种是点错的。对的情况就要算出反应时间,错的情况便弹出警告框。
        NSString *reactionTime;//两种情况的提示语也不同。在这里做一下推断
        if (spadeOn==1) {
            double  noSeconds = (double)[self.startDate timeIntervalSinceNow]*-1000; //timeIntervalSinceNow * -1000;
            reactionTime = [[NSString alloc] initWithFormat:@"响应速度为%1.0f毫秒,继续。",noSeconds];
        }
        if (spadeOn==0) {
            reactionTime = @"请不要急,等黑桃A出现再按";
        }
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"再来一次" message:reactionTime delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];
        [alert show];
    }


    //上面的提示框按下“開始游戏”的时候,提示框便消失了。那么便能够利用视图隐藏后调用的方法
    //(   -(void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex    )来启动游戏。


    //计时器调用本方法来显示一张张扑克牌的方法
    -(void)onAceTimer{
        int rNumber = rand()%4;//4张扑克牌,0,1。2,3四个随机数。控制4张扑克牌的显示
        switch (rNumber) {
            case 0:
                pokerImage.image = [UIImage imageNamed:@"11.png"];
                spadeOn = 1;
                startDate = [NSDate date];//黑桃出现的时候,便创建date对象。后面便能够调用NSDate方法来得到时间差了
                break;
            case 1:
                pokerImage.image = [UIImage imageNamed:@"21.png"];
                spadeOn = 0;
                break;
            case 2:
                pokerImage.image = [UIImage imageNamed:@"31.png"];
                spadeOn = 0;
                break;
            case 3:
                pokerImage.image = [UIImage imageNamed:@"41.png"];
                spadeOn = 0;
        }//随机的4种结果,仅仅有第一种结果会显示黑桃A,所以让自己定义的控制条件spadeOn = 1,其它都为0。然后后面会有假设spadeOn分别为1或0时,点击扑克会出现不同效果的IBAction方法。
    }



    - (void)didReceiveMemoryWarning {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }

    @end



  • 相关阅读:
    C8051逆向电阻屏:头儿拍脑袋说电阻屏IC好赚钱3块钱成本能卖20几块。,一个月不分昼夜逆向成功后头儿说电阻屏已经被市场淘汰请放弃治疗。
    Google大数据三篇著名论文----中文版
    推荐相关博客
    基于hadoop的电影推荐结果可视化
    爬虫(heritrix框架)
    标准SVD和改进的SVD
    基于矩阵分解的隐因子模型
    SVD奇异值分解的几何物理意义资料汇总
    (大数据工程师学习路径)第五步 MySQL参考手册中文版----MySQL数据库管理
    (大数据工程师学习路径)第五步 MySQL参考手册中文版----MySQL视图
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/8951464.html
Copyright © 2011-2022 走看看