交代一下我做程序的工具: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

程序日志--ios“考反应扑克游戏”程序的更多相关文章

  1. 使用Log4j将程序日志实时写入Kafka(转)

    原文链接:使用Log4j将程序日志实时写入Kafka 很多应用程序使用Log4j记录日志,如何使用Kafka实时的收集与存储这些Log4j产生的日志呢?一种方案是使用其他组件(比如Flume,或者自己 ...

  2. 25 个增强iOS应用程序性能的提示和技巧 应用程序性能的提示和技巧

    初级 在开发过程中,下面这些初级技巧需要时刻注意: 1.使用ARC进行内存管理2.在适当的情况下使用reuseIdentifier3.尽可能将View设置为不透明(Opaque)4.避免臃肿的XIBs ...

  3. iOS的常见文件及程序的启动原理

    一. iOS中常见文件 (一). Xcode6之前 创建项目,默认可以看见一个存放框架的文件夹 info文件以工程文件名开头,如:第一个项目-Info.plist 项目中默认有一个PCH文件 (二). ...

  4. 分析Tapjoy的模式—分发用于ios设备的企业级应用程序

    下面简单介绍下Tapjoy的模式,供大家参考: Tapjoy最初的合作模式:“按安装奖励”(pay-per-install) Tapjoy利用非常成功的奖励性下载模式影响了App Store的免费游戏 ...

  5. 使用LogMaster4Net实现应用程序日志的集中管理

    日志在软件系统中的重要性我在此也不赘述了,几乎所有程序员每天都会更日志打交道. 那么你是否曾今为这样的一些事情而困扰过: - 远程登录到不同的服务器,找到应用程序目然后查看应用日志: - 来回切换于不 ...

  6. iOS 打开本地 其他应用程序(URL Types)

    iOS 打开本地其他应用程序(URL Types) /*前言废话:Xcode是神奇的,是我所见到的编译器中最为神奇的,如:它可以同时运行两个甚至更多Project到我们模拟器上,可以同时使用一个模拟器 ...

  7. 利用C#自带组件强壮程序日志

    在项目正式上线后,如果出现错误,异常,崩溃等情况 我们往往第一想到的事就是查看日志 所以日志对于一个系统的维护是非常重要的 声明 正文中的代码只是一个栗子,一个非常简单的栗子,只是说明这个框架是怎么工 ...

  8. GJM : 游戏程序员的学习之路

    原文作者:miloyip  原帖地址:http://gad.qq.com/article/detail/7180681 原帖备注:版权所有,禁止匿名转载:禁止商业使用:禁止个人使用. 腾讯前端技术总监 ...

  9. C# 使用Log4Net记录程序日志

    在之前的博客中,写过使用系统内置的Trace类记录程序日志,具体请参考:C# 使用Trace记录程序日志.这篇博客将介绍如何使用Log4Net记录程序日志. 首先需要引用Log4Net.dll,我们可 ...

随机推荐

  1. webpack-clean-webpack-plugin

    在webpack中打包生成的文件会覆盖之前的文件,不过生成文件的时候文件名加了hash之后会每次都生成不一样的文件,这就会很麻烦,不但会生成很多冗余的文件,还很难搞清楚到底是哪个文件,这就需要引入该插 ...

  2. idea 快键键

    debug快键键 F9 resume programe 恢复程序 Alt+F10 show execution point 显示执行断点 F8 Step Over 相当于eclipse的f6 跳到下一 ...

  3. 使用spring-boot-starter-data-jpa 怎么配置使运行时输出SQL语句

    在 application.properties 中加入以下配置 spring.jpa.show-sql=true

  4. 注解工具ButterKnife用法和注意点

    // implementation 'com.android.support:appcompat-v7:28.0.0-Beta1' // implementation 'com.android.sup ...

  5. Rstudio+mysql写入中文表

    1.在mysql中输入sql语句,新建一个支持中文的数据库 create database Chinadaydata DEFAULT CHARACTER SET gbk COLLATE gbk_chi ...

  6. Environment error: “CodeBloks can't find compiler executable in your configured search path's for GNU GCC compiler”

    codeblock安装后,提示cant find compiler executable in your configured search paths for GNU GCC Compiler 可能 ...

  7. poj 2253 Frogger (最小最大路段)【dijkstra】

    <题目链接> 题目大意: 给出青蛙A,B和若干石头的坐标,现青蛙A想到青蛙B那,A可通过任意石头到达B,问从A到B多条路径中最小的最长边. 解题分析: 这是最短路的一类典型题目,与普通的最 ...

  8. P3147 [USACO16OPEN]262144

    P3147 [USACO16OPEN]262144一道非常有趣的游戏,不,题目.当数据水时,可以这样表示状态.f[i][j]表示合并[i,j]区间所能得到的最大值,有点floyed的小味道.if(f[ ...

  9. MIT-6.824 Raft协议

    摘要 raft是一种比paxos容易理解的一致性算法,实现起来比paxos简单许多.本文前部分描述算法的细节,后部分尝试探讨下该算法的原理. 算法描述 raft算法之所以简单的原因之一是它将问题分解成 ...

  10. JavaScript学习总结(六)——前端模块化开发

    早期的javascript版本没有块级作用域.没有类.没有包.也没有模块,这样会带来一些问题,如复用.依赖.冲突.代码组织混乱等,随着前端的膨胀,模块化显得非常迫切. 前端模块化规范如下: 一.前端模 ...