交代一下我做程序的工具: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. PHP 将数组的值赋值给一组变量

    经常需要将一个字符串分割成一组值,然后赋值给不同的变量. 逐行赋值非常繁琐,于是查了一下 PHP 中是否有类似 python 中 a, b = (a, b) 的操作. 果然有 $info = arra ...

  2. PHP中的一些常用函数

    <?php //===============================时间日期=============================== //y返回年最后两位,Y年四位数,m月份数字 ...

  3. Luogu P2426 【删数】

    状态定义: 一眼区间$DP$,从左右两边删不好定义状态,不如定义$dp[i][j]$表示$[i,j]$未删的最大值,转移就很自然了 转移: 从左边删$dp[i][j]=max(dp[i][j],dp[ ...

  4. python 全栈开发,Day124(MongoDB初识,增删改查操作,数据类型,$关键字以及$修改器,"$"的奇妙用法,Array Object 的特殊操作,选取跳过排序,客户端操作)

    一.MongoDB初识 什么是MongoDB MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介 ...

  5. python 全栈开发,Day35(TCP协议 粘包现象 和解决方案)

    一.TCP协议 粘包现象 和解决方案 黏包现象让我们基于tcp先制作一个远程执行命令的程序(命令ls -l ; lllllll ; pwd)执行远程命令的模块 需要用到模块subprocess sub ...

  6. Thread类中的join方法

    package charpter06; //类实现接口public class Processor implements Runnable { // 重写接口方法 @Override public v ...

  7. 《转》Pragma: no-cache 对性能的影响

    做了下go和java的http性能的简单比较服务端直接输出字符串使用JMeterwindows下  2000的并发,测试结果很出乎意料,go不会这么差吧 研究了半小时,原因如下tomcat的servl ...

  8. bootstrap 强调相关的类

    .text-muted:提示,使用浅灰色(#999) .text-primary:主要,使用蓝色(#428bca) .text-success:成功,使用浅绿色(#3c763d) .text-info ...

  9. android系统属性获取及设置

    系统属性获取及设置中的设置值 data/data/com.android.providers.settings/databases/settings.db 1.系统属性获取及设置 android.os ...

  10. java利用Jsch实现在windows平台远程操作linux服务器

    说明:exec用于执行命令:sftp用于文件处理 package com.wyg.simple; import java.io.BufferedReader; import java.io.File; ...