//
// BMGameDynamics.m
// tic tac toe
//
// Created by Bogdan Michalchuk on 10/27/15.
// Copyright © 2015 PDXRR. All rights reserved.
//
#import "BMGameDynamics.h"
#import "Values.h"
@implementation BMGameDynamics
@synthesize tillCatsGame;
@synthesize playersTurn;
- (void)cleanArray {
for (int i = 0; i < 9; i++) {
xoSpots[i] = 0;
}
}
- (void)modifyXOSpotsWithIndex:(int)indexOfSquare {
if (playersTurn == BMPlayerTypeX) {
xoSpots[indexOfSquare-1] = BMPlayerTypeX;
[_pDelegate updateCurrentSquare:indexOfSquare withCurrentPlayer:BMPlayerTypeX];
playersTurn = BMPlayerTypeO;
}
else if (playersTurn == BMPlayerTypeO) {
xoSpots[indexOfSquare-1] = BMPlayerTypeO;
[_pDelegate updateCurrentSquare:indexOfSquare withCurrentPlayer:BMPlayerTypeO];
playersTurn = BMPlayerTypeX;
}
[self checkForWinWithMove:YES];
}
- (void)checkForWinWithMove:(BOOL)move {
NSUInteger winArray[24]={0,1,2, 3,4,5, 6,7,8, 0,3,6, 1,4,7, 2,5,8, 0,4,8, 2,4,6};
for(NSUInteger i=0;i<24; i+=3){
NSInteger totalPoint = xoSpots[winArray[i]] + xoSpots[winArray[i+1]] + xoSpots[winArray[i+2]];
switch (totalPoint) {
case BMPlayerTypeX * 3:
[_pDelegate updateGameStatusWithWinner:BMPlayerTypeX];
return;
case BMPlayerTypeO * 3:
[_pDelegate updateGameStatusWithWinner:BMPlayerTypeO];
return;
default:
break;
}
}
if (move) {
// This checks if its a Cats Game
tillCatsGame = tillCatsGame -1;
if (tillCatsGame == 0) {
[_pDelegate updateGameStatusWithWinner:BMPlayerTypeTie];
}
}
}
- (void)startAnew {
tillCatsGame = 9;
[self cleanArray];
}
- (void)restoreGame {
for (int i = 0; i < 9; i++) {
switch (xoSpots[i]) {
case BMPlayerTypeX:
[_pDelegate updateCurrentSquare:(i+1) withCurrentPlayer:BMPlayerTypeX];
break;
case BMPlayerTypeO:
[_pDelegate updateCurrentSquare:(i+1) withCurrentPlayer:BMPlayerTypeO];
break;
default:
break;
}
}
[self checkForWinWithMove:FALSE];
}
- (NSArray*)returnSpotArray {
NSMutableArray* spotsArray = [[NSMutableArray alloc] initWithObjects:@0,@0,@0,@0,@0,@0,@0,@0,@0, nil ];
for (int i = 0; i < 9; ++i) {
NSNumber *value = [NSNumber numberWithInt:xoSpots[i]];
[spotsArray replaceObjectAtIndex:i withObject:value];
}
return spotsArray;
}
- (void)setXOSpots:(NSArray*)incomingValues {
for (int i = 0; i < [incomingValues count]; ++i) {
xoSpots[i] = [[incomingValues objectAtIndex:i] intValue];
}
}
//- (void) saveGameState {
// NSArray *spotsStateArray = [[NSArray alloc] initWithArray:[self returnSpotArray]]; // For saving each players' moves
// NSNumber *gameCount = [[NSNumber alloc] initWithInt:tillCatsGame]; // For saving the countdown to Scratch game
// NSNumber *currentTurn = [[NSNumber alloc] initWithInt:playersTurn]; // For saving the player turn
// NSDictionary *dataDict = [NSDictionary dictionaryWithObjectsAndKeys:
// spotsStateArray, @"squares",
// gameCount, @"count",
// currentTurn, @"turn",
// nil];
// [NSKeyedArchiver archiveRootObject:dataDict toFile:[self stateFileLocation]];
//}
//
//- (BOOL)loadGameState {
// if ([[NSFileManager defaultManager] fileExistsAtPath:[self stateFileLocation]]) {
// NSData *data = [NSData dataWithContentsOfFile:[self stateFileLocation]];
// NSDictionary *savedData = [NSKeyedUnarchiver unarchiveObjectWithData:data];
//
// NSArray *spotsStateArray = [[NSArray alloc] initWithArray:[savedData objectForKey:@"squares"]];
// [self setXOSpots:spotsStateArray];
// tillCatsGame = [[savedData objectForKey:@"count"] intValue];
// playersTurn = [[savedData objectForKey:@"turn"] intValue];
// return 1;
// }
// return 0;
//}
- (id)initWithCoder:(NSCoder *)decoder {
self = [super init];
if (!self) {
return nil;
}
NSArray *myspots = [[NSArray alloc] initWithArray:[decoder decodeObjectForKey:@"squares"]];
[self setXOSpots:myspots];
// [self setXOSpots:[decoder decodeObjectForKey:@"squares"]];
// [decoder decodeArrayOfObjCType:@encode(int) count:9 at:xoSpots];
int yes = [decoder decodeIntForKey:@"count"];
self.tillCatsGame = yes;
self.playersTurn = [decoder decodeIntForKey:@"turn"];
return self;
}
- (void)encodeWithCoder:(NSCoder *)encoder {
NSArray *spotsStateArray = [[NSArray alloc] initWithArray:[self returnSpotArray]];
[encoder encodeObject:spotsStateArray forKey:@"squares"];
// [encoder encodeArrayOfObjCType:@encode(int) count:9 at:xoSpots];
[encoder encodeInt:self.tillCatsGame forKey:@"count"];
[encoder encodeInt:self.playersTurn forKey:@"turn"];
}
@end
Comments
0 B
|👍
/👎
0 B
|👍
/👎