Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //
- // 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
Advertisement
Add Comment
Please, Sign In to add comment