标签:考反应扑克游戏
交代一下我做程序的工具:mac os x虚拟机10.9.3 Xcode6 百度^-^ 参考书iPhone30天精通
总结与经验,还有遇到的问题,都在程序里面写出来了,看着长,其实从头往下看10分钟就全都搞懂了,我的注释很“白话”。
// ViewController.h
// 12.1@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
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:考反应扑克游戏
原文地址:http://blog.csdn.net/v7595v/article/details/47135349