Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define CHDecodePiotrRankCase(caseVal,switchVariable,assignTo,valFor0,valFor1,valFor2,valFor3,valFor4,valFor5,valFor6,valFor7) case caseVal: switch(switchVariable) { case 0: assignTo = valFor0; break; case 1: assignTo = valFor1; break; case 2: assignTo = valFor2; break; case 3: assignTo = valFor3; break; case 4: assignTo = valFor4; break; case 5: assignTo = valFor5; break; case 6: assignTo = valFor6; break; case 7: assignTo = valFor7; break; default: NSAssert(NO,@"Invalid file value"); } break;
- -(NSString*) encodeMoveToPiotrFormat:(bool)forLive
- {
- char firstCharacter = -1, secondCharacter = -1;
- switch (self.sourceRank) {
- CHDecodePiotrRankCase(0, self.sourceFile, firstCharacter, 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h');
- CHDecodePiotrRankCase(1, self.sourceFile, firstCharacter, 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p');
- CHDecodePiotrRankCase(2, self.sourceFile, firstCharacter, 'q', 'r', 's', 't', 'u', 'v', 'w', 'x');
- CHDecodePiotrRankCase(3, self.sourceFile, firstCharacter, 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F');
- CHDecodePiotrRankCase(4, self.sourceFile, firstCharacter, 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N');
- CHDecodePiotrRankCase(5, self.sourceFile, firstCharacter, 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V');
- CHDecodePiotrRankCase(6, self.sourceFile, firstCharacter, 'W', 'X', 'Y', 'Z', '0', '1', '2', '3');
- CHDecodePiotrRankCase(7, self.sourceFile, firstCharacter, '4', '5', '6', '7', '8', '9', '!', '?');
- default:
- NSAssert(NO,@"Invalid rank value");
- break;
- }
- if([self isCastleMove])
- {
- if(forLive)
- {
- switch (self.sourceRank)
- {
- CHDecodePiotrRankCase(0, self.kingDestFile, secondCharacter, 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h');
- CHDecodePiotrRankCase(1, self.kingDestFile, secondCharacter, 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p');
- CHDecodePiotrRankCase(2, self.kingDestFile, secondCharacter, 'q', 'r', 's', 't', 'u', 'v', 'w', 'x');
- CHDecodePiotrRankCase(3, self.kingDestFile, secondCharacter, 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F');
- CHDecodePiotrRankCase(4, self.kingDestFile, secondCharacter, 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N');
- CHDecodePiotrRankCase(5, self.kingDestFile, secondCharacter, 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V');
- CHDecodePiotrRankCase(6, self.kingDestFile, secondCharacter, 'W', 'X', 'Y', 'Z', '0', '1', '2', '3');
- CHDecodePiotrRankCase(7, self.kingDestFile, secondCharacter, '4', '5', '6', '7', '8', '9', '!', '?');
- default:
- NSAssert(NO,@"Invalid rank value");
- break;
- }
- }
- else
- {
- switch (self.sourceRank)
- {
- CHDecodePiotrRankCase(0, self.rookSourceFile, secondCharacter, 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h');
- CHDecodePiotrRankCase(1, self.rookSourceFile, secondCharacter, 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p');
- CHDecodePiotrRankCase(2, self.rookSourceFile, secondCharacter, 'q', 'r', 's', 't', 'u', 'v', 'w', 'x');
- CHDecodePiotrRankCase(3, self.rookSourceFile, secondCharacter, 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F');
- CHDecodePiotrRankCase(4, self.rookSourceFile, secondCharacter, 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N');
- CHDecodePiotrRankCase(5, self.rookSourceFile, secondCharacter, 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V');
- CHDecodePiotrRankCase(6, self.rookSourceFile, secondCharacter, 'W', 'X', 'Y', 'Z', '0', '1', '2', '3');
- CHDecodePiotrRankCase(7, self.rookSourceFile, secondCharacter, '4', '5', '6', '7', '8', '9', '!', '?');
- default:
- NSAssert(NO,@"Invalid rank value");
- break;
- }
- }
- }
- else if(self.promotingPiece == -1)
- {
- switch (self.destRank)
- {
- CHDecodePiotrRankCase(0, self.destFile, secondCharacter, 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h');
- CHDecodePiotrRankCase(1, self.destFile, secondCharacter, 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p');
- CHDecodePiotrRankCase(2, self.destFile, secondCharacter, 'q', 'r', 's', 't', 'u', 'v', 'w', 'x');
- CHDecodePiotrRankCase(3, self.destFile, secondCharacter, 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F');
- CHDecodePiotrRankCase(4, self.destFile, secondCharacter, 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N');
- CHDecodePiotrRankCase(5, self.destFile, secondCharacter, 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V');
- CHDecodePiotrRankCase(6, self.destFile, secondCharacter, 'W', 'X', 'Y', 'Z', '0', '1', '2', '3');
- CHDecodePiotrRankCase(7, self.destFile, secondCharacter, '4', '5', '6', '7', '8', '9', '!', '?');
- default:
- NSAssert(NO,@"Invalid rank value");
- break;
- }
- }
- else
- {
- int fileDiff = self.destFile-self.sourceFile;
- char pieceToMove = [self pieceAtRank:self.sourceRank File:self.sourceFile];
- char promoteToPiece = self.promotingPiece;
- if(promoteToPiece > 90)
- promoteToPiece -= 32; //make promoteToPiece upper case
- if(pieceToMove == 'P')
- {
- switch(fileDiff)
- {
- case 0:
- if (promoteToPiece == 'N') secondCharacter = '^';
- else if (promoteToPiece == 'B') secondCharacter = '#';
- else if (promoteToPiece == 'R') secondCharacter = '_';
- else if (promoteToPiece == 'Q') secondCharacter = '~';
- else NSAssert(NO, @"Invalid promoting piece value %c", self.promotingPiece);
- break;
- case 1:
- if (promoteToPiece == 'N') secondCharacter = ')';
- else if (promoteToPiece == 'B') secondCharacter = '$';
- else if (promoteToPiece == 'R') secondCharacter = ']';
- else if (promoteToPiece == 'Q') secondCharacter = '}';
- else NSAssert(NO, @"Invalid promoting piece value %c", self.promotingPiece);
- break;
- case -1:
- if (promoteToPiece == 'N') secondCharacter = '(';
- else if (promoteToPiece == 'B') secondCharacter = '@';
- else if (promoteToPiece == 'R') secondCharacter = '[';
- else if (promoteToPiece == 'Q') secondCharacter = '{';
- else NSAssert(NO, @"Invalid promoting piece value %c", self.promotingPiece);
- break;
- default:
- NSAssert(NO, @"Invalid pawn promotion move - invalid file diff %d", fileDiff);
- }
- }
- else if(pieceToMove == 'p')
- {
- switch(fileDiff)
- {
- case 0:
- if (promoteToPiece == 'N') secondCharacter = '^';
- else if (promoteToPiece == 'B') secondCharacter = '#';
- else if (promoteToPiece == 'R') secondCharacter = '_';
- else if (promoteToPiece == 'Q') secondCharacter = '~';
- else NSAssert(NO, @"Invalid promoting piece value %c", self.promotingPiece);
- break;
- case 1:
- if (promoteToPiece == 'N') secondCharacter = ')';
- else if (promoteToPiece == 'B') secondCharacter = '$';
- else if (promoteToPiece == 'R') secondCharacter = ']';
- else if (promoteToPiece == 'Q') secondCharacter = '}';
- else NSAssert(NO, @"Invalid promoting piece value %c", self.promotingPiece);
- break;
- case -1:
- if (promoteToPiece == 'N') secondCharacter = '(';
- else if (promoteToPiece == 'B') secondCharacter = '@';
- else if (promoteToPiece == 'R') secondCharacter = '[';
- else if (promoteToPiece == 'Q') secondCharacter = '{';
- else NSAssert(NO, @"Invalid promoting piece value %c", self.promotingPiece);
- break;
- default:
- NSAssert(NO, @"Invalid pawn promotion move - invalid file diff %d", fileDiff);
- }
- }
- }
- return [NSString stringWithFormat:@"%c%c",firstCharacter,secondCharacter];
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement