サイモンゲーム ソース公開(その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