サイモンゲーム ソース公開(その4)
以前作成していたサイモンゲームのソースを公開していってます。
Objective-Cを十分理解出来ていない時に、作成してますので、
おかしい使い方をしているかもしれません。
例えば、プロパティの初期化なんてset〜を使用するべきでしょうし・・・
まぁ、ツッコミどころ満載ですが、公開します。
今回は、「SimonGamesViewController.h」と「SimonGamesViewController.m」を書いておきます。
SimonGamesViewController.h
#import <UIKit/UIKit.h>
#import "UIImageViewPlus.h"
#import "PlistDataClass.h"
#import "InofoViewController.h"
#import <AudioToolbox/AudioServices.h>@interface SimonGamesViewController : UIViewController <InofoViewControllerDelegate>
{
IBOutlet UILabel* highScoreLbl;
IBOutlet UIImageView* backGround;
IBOutlet UIImageViewPlus* simonLogo;
IBOutlet UIImageViewPlus* simonImage_1;
IBOutlet UIImageViewPlus* simonBackImage_1;
IBOutlet UIImageViewPlus* simonImage_2;
IBOutlet UIImageViewPlus* simonBackImage_2;
IBOutlet UIImageViewPlus* simonImage_3;
IBOutlet UIImageViewPlus* simonBackImage_3;
IBOutlet UIImageViewPlus* simonImage_4;
IBOutlet UIImageViewPlus* simonBackImage_4;
IBOutlet UILabel* scoreLbl;
IBOutlet UILabel* debugLabel1;
IBOutlet UILabel* debugLabel2;
IBOutlet UIButton* startUIButton;
IBOutlet UIButton* infoView;
IBOutlet UILabel* nowLbl;
long score;
long highScore;
SystemSoundID soundID[4];
SystemSoundID soundAlert;
NSMutableArray *muArrStac;
NSTimer *timer;
NSTimer *timerMondai;
int step;
NSInteger count;
NSInteger ansCount;
PlistDataClass *plistData;
}
@property (nonatomic, retain) IBOutlet UIImageViewPlus* simonLogo;
@property (nonatomic, retain) IBOutlet UIImageViewPlus* simonImage_1;
@property (nonatomic, retain) IBOutlet UIImageViewPlus* simonBackImage_1;
@property (nonatomic, retain) IBOutlet UIImageViewPlus* simonImage_2;
@property (nonatomic, retain) IBOutlet UIImageViewPlus* simonBackImage_2;
@property (nonatomic, retain) IBOutlet UIImageViewPlus* simonImage_3;
@property (nonatomic, retain) IBOutlet UIImageViewPlus* simonBackImage_3;
@property (nonatomic, retain) IBOutlet UIImageViewPlus* simonImage_4;
@property (nonatomic, retain) IBOutlet UIImageViewPlus* simonBackImage_4;@property (nonatomic, retain) IBOutlet UIImageView* backGround;
@property (nonatomic, retain) IBOutlet UILabel* nowLbl;
@property (nonatomic, retain) IBOutlet UILabel* scoreLbl;
@property (nonatomic, retain) IBOutlet UILabel* highScoreLbl;@property (nonatomic, retain) PlistDataClass *plistData;
- (IBAction)infoViewOpen:(id)sender;
- (IBAction)startButtonPush:(id)sender;- (void)scoreSet;
- (void)soundInit;- (void)ansArrayInit;
- (void)lockImage:(Boolean)bol;
- (void)offImage;
- (void)timerInit;- (void) setNowLblSetText:(NSString*) strText
red:(int)red
green:(int)green
blue:(int)blue;- (void)pushImage:(NSInteger)number;
- (void)startUIButtonSet:(NSInteger)number;
- (void)reset:(BOOL)alertFLG initWithTitle:(NSString *)initWithTitle message:(NSString *)message;
- (NSString *)dataFilePath;
- (void)writeDefaultInit;
- (void)readInit;
- (void)writeInit ;@end
SimonGamesViewController.m
#import "SimonGamesViewController.h"@implementation SimonGamesViewController
@synthesize backGround;@synthesize simonLogo;
@synthesize simonImage_1;
@synthesize simonBackImage_1;
@synthesize simonImage_2;
@synthesize simonBackImage_2;
@synthesize simonImage_3;
@synthesize simonBackImage_3;
@synthesize simonImage_4;
@synthesize simonBackImage_4;@synthesize nowLbl;
@synthesize scoreLbl;
@synthesize highScoreLbl;@synthesize plistData;
#pragma mark -
#pragma mark ボタン処理- (IBAction)infoViewOpen:(id)sender
{
[self writeInit];
InofoViewController *controller = [[InofoViewController alloc] initWithNibName:@"InofoView" bundle:nil];
controller.delegate = self;
controller.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal ;
[self presentModalViewController:controller animated:YES];
[controller release];
}
- (IBAction)startButtonPush:(id)sender
{
if(step == 0)
{
//スタートボタン
[self startUIButtonSet:1];
[muArrStac removeAllObjects];
[self scoreSet];
step = 1;
}else
{
[self reset:FALSE initWithTitle:@"" message:@"GameOver"];
}
}- (void) pushImage:(NSInteger)number{
if ( [muArrStac count] > ansCount)
{
if( (number != 0) && (number <= 4))
{
NSInteger ansNumber = [[muArrStac objectAtIndex:ansCount] intValue];
if (ansNumber == (number -1)){
AudioServicesPlaySystemSound(soundID[number - 1]);
NSLog(@"OK");
if([muArrStac count] - 1 <= ansCount )
{
score ++;
[self scoreSet];
[self lockImage:TRUE];
step ++;
}
ansCount++;
}else{
NSLog(@"NO");
//スタートボタン
[self startUIButtonSet:0];
[self lockImage:TRUE];
count = 1000;
step = 0;
[self reset:TRUE initWithTitle:@"" message:@"GameOver"];
}
}
}
}- (void)reset:(BOOL)alertFLG initWithTitle:(NSString *)initWithTitle message:(NSString *)message
{
[self lockImage:TRUE];
if (alertFLG ==TRUE)
{
AudioServicesPlaySystemSound(soundAlert);
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(initWithTitle, @"")
message:message
delegate:self
cancelButtonTitle:nil
otherButtonTitles:@"OK",nil];
[alert show];
[alert release];
}
infoView.hidden = NO;
[muArrStac removeAllObjects];
if (highScore < score )
{
highScore = score ;
[highScoreLbl setText:[NSString stringWithFormat:@"HIGHT SCORE : %4d", highScore]];
}
score = 0;
count = 1000;
step = 0;
[self startUIButtonSet:0];
[self offImage];
[backGround setImage:[UIImage imageNamed:plistData.bkTop]];
}#pragma mark -
#pragma mark 画像関連
- (void) startUIButtonSet:(NSInteger)number
{
NSString *strTitle;
NSString *strImage;
switch (number) {
case 0:
default:
strImage = plistData.bt_0 ;
strTitle = @"Start";
break;
case 1:
strImage = plistData.bt_1 ;
strTitle = @"Stop";
break;
case 2:
strImage = plistData.bt_2 ;
strTitle = @"Puse";
break;
}
[startUIButton setBackgroundImage:[UIImage imageNamed:strImage] forState:UIControlStateNormal];
[startUIButton setTitle:strTitle forState:UIControlStateNormal];
}-(void)lockImage:(Boolean)bol
{
[simonImage_1 setLockFLG:bol];
[simonImage_2 setLockFLG:bol];
[simonImage_3 setLockFLG:bol];
[simonImage_4 setLockFLG:bol];
}-(void)offImage
{
[simonImage_1 lightOff];
[simonImage_2 lightOff];
[simonImage_3 lightOff];
[simonImage_4 lightOff];
}#pragma mark -
#pragma mark 問題処理- (void)onTimerMondai:(NSTimer*)timer
{
if ( ( [muArrStac count] * 2 ) > count )
{
if ( count % 2 == 0 )
{
NSInteger indexNum = (count - (count % 2))/2;
NSInteger number = [[muArrStac objectAtIndex:indexNum] intValue];
UIImageViewPlus* tempObj;
switch (number) {
case 0:
tempObj = simonImage_1;
break;
case 1:
tempObj = simonImage_2;
break;
case 2:
tempObj = simonImage_3;
break;
case 3:
tempObj = simonImage_4;
break;
default:
break;
}
AudioServicesPlaySystemSound(soundID[number]);
[tempObj lightOn];
}
else
{
[self offImage];
}
count ++;
}else
{
if ([timerMondai isValid]){
[timerMondai invalidate];
if (step != 0 )step ++;
}
//回答処理
[self lockImage:FALSE];
[self offImage];
ansCount = 0;
}
}- (void)onTimer:(NSTimer*)timer
{
switch (step) {
case 0:
[self reset:FALSE initWithTitle:@"" message:@"GameOver"];
[backGround setImage:[UIImage imageNamed:plistData.bkTop]];
[self setNowLblSetText:@"Please push Start" red:0x99 green:0x99 blue:0xff];
break;
case 1:
infoView.hidden = YES;
[self lockImage:TRUE];
[self offImage];
{
//問題作成
//現在の日付、時刻を取得
NSDate *now = [[NSDate date] retain];
// NSDateFormatterのインスタンスを取得
NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat: @"s"];
int timeNum = [[dateFormatter stringFromDate:now] intValue];
timeNum = ( ( random() % 4 ) * timeNum ) %4;
[muArrStac addObject:[NSNumber numberWithInteger: timeNum]];
step ++;
}
break;
case 2:
step++;
break;
case 3:
//問題提出
[self setNowLblSetText:@"CPU" red:0xff green:0x99 blue:0x99];
[self lockImage:TRUE];
[self offImage];
count = 0;
NSTimeInterval interval =0;
if ([muArrStac count] < 5) interval = 0.5;
else if ([muArrStac count] < 10) interval = 0.4;
else if ([muArrStac count] < 15) interval = 0.25;
else if ([muArrStac count] < 20) interval = 0.1;
else if ([muArrStac count] < 25) interval = 0.05;
else if ([muArrStac count] < 30) interval = 0.005;
timerMondai = [NSTimer scheduledTimerWithTimeInterval:(interval)
target:self selector:@selector(onTimerMondai:)
userInfo:nil repeats:YES];
[backGround setImage:[UIImage imageNamed:plistData.bkLockOn ]];
step ++;
break;
case 4:
//CPU側
//待機中
break;
case 5:
//MAN側
// [nowLbl setText:@"YOU"] ;
[self setNowLblSetText:@"YOU" red:0x99 green:0xff blue:0x99];
[backGround setImage:[UIImage imageNamed:plistData.bkLockOff]];
break;
case 6:
//待機中
step = 1;
break;
case 7:
//結果
break;
default:
step = 0;
break;
}
}- (void) setNowLblSetText:(NSString*) strText
red:(int)red
green:(int)green
blue:(int)blue
{
[nowLbl setText:strText] ;
[nowLbl setTextColor:[[UIColor alloc] initWithRed:(float) red / 0xff
green:(float) green / 0xff
blue:(float) blue / 0xff
alpha:1.0]] ;
}
#pragma mark -
#pragma mark 初期設定
//ファイルデータ
- (NSString *)dataFilePath
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
return [documentsDirectory stringByAppendingPathComponent:kFilename];
}- (void)writeInit
{
plistData.hightScore =[NSNumbe