Advertisement
Guest User

Untitled

a guest
Jan 29th, 2015
155
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.59 KB | None | 0 0
  1. #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;
  2. -(NSString*) encodeMoveToPiotrFormat:(bool)forLive
  3. {
  4. char firstCharacter = -1, secondCharacter = -1;
  5.  
  6. switch (self.sourceRank) {
  7. CHDecodePiotrRankCase(0, self.sourceFile, firstCharacter, 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h');
  8. CHDecodePiotrRankCase(1, self.sourceFile, firstCharacter, 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p');
  9. CHDecodePiotrRankCase(2, self.sourceFile, firstCharacter, 'q', 'r', 's', 't', 'u', 'v', 'w', 'x');
  10. CHDecodePiotrRankCase(3, self.sourceFile, firstCharacter, 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F');
  11. CHDecodePiotrRankCase(4, self.sourceFile, firstCharacter, 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N');
  12. CHDecodePiotrRankCase(5, self.sourceFile, firstCharacter, 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V');
  13. CHDecodePiotrRankCase(6, self.sourceFile, firstCharacter, 'W', 'X', 'Y', 'Z', '0', '1', '2', '3');
  14. CHDecodePiotrRankCase(7, self.sourceFile, firstCharacter, '4', '5', '6', '7', '8', '9', '!', '?');
  15. default:
  16. NSAssert(NO,@"Invalid rank value");
  17. break;
  18. }
  19. if([self isCastleMove])
  20. {
  21. if(forLive)
  22. {
  23. switch (self.sourceRank)
  24. {
  25. CHDecodePiotrRankCase(0, self.kingDestFile, secondCharacter, 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h');
  26. CHDecodePiotrRankCase(1, self.kingDestFile, secondCharacter, 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p');
  27. CHDecodePiotrRankCase(2, self.kingDestFile, secondCharacter, 'q', 'r', 's', 't', 'u', 'v', 'w', 'x');
  28. CHDecodePiotrRankCase(3, self.kingDestFile, secondCharacter, 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F');
  29. CHDecodePiotrRankCase(4, self.kingDestFile, secondCharacter, 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N');
  30. CHDecodePiotrRankCase(5, self.kingDestFile, secondCharacter, 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V');
  31. CHDecodePiotrRankCase(6, self.kingDestFile, secondCharacter, 'W', 'X', 'Y', 'Z', '0', '1', '2', '3');
  32. CHDecodePiotrRankCase(7, self.kingDestFile, secondCharacter, '4', '5', '6', '7', '8', '9', '!', '?');
  33. default:
  34. NSAssert(NO,@"Invalid rank value");
  35. break;
  36. }
  37. }
  38. else
  39. {
  40. switch (self.sourceRank)
  41. {
  42. CHDecodePiotrRankCase(0, self.rookSourceFile, secondCharacter, 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h');
  43. CHDecodePiotrRankCase(1, self.rookSourceFile, secondCharacter, 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p');
  44. CHDecodePiotrRankCase(2, self.rookSourceFile, secondCharacter, 'q', 'r', 's', 't', 'u', 'v', 'w', 'x');
  45. CHDecodePiotrRankCase(3, self.rookSourceFile, secondCharacter, 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F');
  46. CHDecodePiotrRankCase(4, self.rookSourceFile, secondCharacter, 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N');
  47. CHDecodePiotrRankCase(5, self.rookSourceFile, secondCharacter, 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V');
  48. CHDecodePiotrRankCase(6, self.rookSourceFile, secondCharacter, 'W', 'X', 'Y', 'Z', '0', '1', '2', '3');
  49. CHDecodePiotrRankCase(7, self.rookSourceFile, secondCharacter, '4', '5', '6', '7', '8', '9', '!', '?');
  50. default:
  51. NSAssert(NO,@"Invalid rank value");
  52. break;
  53. }
  54. }
  55. }
  56. else if(self.promotingPiece == -1)
  57. {
  58. switch (self.destRank)
  59. {
  60. CHDecodePiotrRankCase(0, self.destFile, secondCharacter, 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h');
  61. CHDecodePiotrRankCase(1, self.destFile, secondCharacter, 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p');
  62. CHDecodePiotrRankCase(2, self.destFile, secondCharacter, 'q', 'r', 's', 't', 'u', 'v', 'w', 'x');
  63. CHDecodePiotrRankCase(3, self.destFile, secondCharacter, 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F');
  64. CHDecodePiotrRankCase(4, self.destFile, secondCharacter, 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N');
  65. CHDecodePiotrRankCase(5, self.destFile, secondCharacter, 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V');
  66. CHDecodePiotrRankCase(6, self.destFile, secondCharacter, 'W', 'X', 'Y', 'Z', '0', '1', '2', '3');
  67. CHDecodePiotrRankCase(7, self.destFile, secondCharacter, '4', '5', '6', '7', '8', '9', '!', '?');
  68. default:
  69. NSAssert(NO,@"Invalid rank value");
  70. break;
  71. }
  72. }
  73. else
  74. {
  75. int fileDiff = self.destFile-self.sourceFile;
  76. char pieceToMove = [self pieceAtRank:self.sourceRank File:self.sourceFile];
  77. char promoteToPiece = self.promotingPiece;
  78.  
  79. if(promoteToPiece > 90)
  80. promoteToPiece -= 32; //make promoteToPiece upper case
  81.  
  82. if(pieceToMove == 'P')
  83. {
  84. switch(fileDiff)
  85. {
  86. case 0:
  87. if (promoteToPiece == 'N') secondCharacter = '^';
  88. else if (promoteToPiece == 'B') secondCharacter = '#';
  89. else if (promoteToPiece == 'R') secondCharacter = '_';
  90. else if (promoteToPiece == 'Q') secondCharacter = '~';
  91. else NSAssert(NO, @"Invalid promoting piece value %c", self.promotingPiece);
  92. break;
  93. case 1:
  94. if (promoteToPiece == 'N') secondCharacter = ')';
  95. else if (promoteToPiece == 'B') secondCharacter = '$';
  96. else if (promoteToPiece == 'R') secondCharacter = ']';
  97. else if (promoteToPiece == 'Q') secondCharacter = '}';
  98. else NSAssert(NO, @"Invalid promoting piece value %c", self.promotingPiece);
  99. break;
  100. case -1:
  101. if (promoteToPiece == 'N') secondCharacter = '(';
  102. else if (promoteToPiece == 'B') secondCharacter = '@';
  103. else if (promoteToPiece == 'R') secondCharacter = '[';
  104. else if (promoteToPiece == 'Q') secondCharacter = '{';
  105. else NSAssert(NO, @"Invalid promoting piece value %c", self.promotingPiece);
  106. break;
  107. default:
  108. NSAssert(NO, @"Invalid pawn promotion move - invalid file diff %d", fileDiff);
  109. }
  110. }
  111. else if(pieceToMove == 'p')
  112. {
  113. switch(fileDiff)
  114. {
  115. case 0:
  116. if (promoteToPiece == 'N') secondCharacter = '^';
  117. else if (promoteToPiece == 'B') secondCharacter = '#';
  118. else if (promoteToPiece == 'R') secondCharacter = '_';
  119. else if (promoteToPiece == 'Q') secondCharacter = '~';
  120. else NSAssert(NO, @"Invalid promoting piece value %c", self.promotingPiece);
  121. break;
  122. case 1:
  123. if (promoteToPiece == 'N') secondCharacter = ')';
  124. else if (promoteToPiece == 'B') secondCharacter = '$';
  125. else if (promoteToPiece == 'R') secondCharacter = ']';
  126. else if (promoteToPiece == 'Q') secondCharacter = '}';
  127. else NSAssert(NO, @"Invalid promoting piece value %c", self.promotingPiece);
  128. break;
  129. case -1:
  130. if (promoteToPiece == 'N') secondCharacter = '(';
  131. else if (promoteToPiece == 'B') secondCharacter = '@';
  132. else if (promoteToPiece == 'R') secondCharacter = '[';
  133. else if (promoteToPiece == 'Q') secondCharacter = '{';
  134. else NSAssert(NO, @"Invalid promoting piece value %c", self.promotingPiece);
  135. break;
  136. default:
  137. NSAssert(NO, @"Invalid pawn promotion move - invalid file diff %d", fileDiff);
  138. }
  139. }
  140. }
  141. return [NSString stringWithFormat:@"%c%c",firstCharacter,secondCharacter];
  142. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement