Frame 2
stop();
Instance of Symbol 95 MovieClip "piece_3_7" in Frame 3
onClipEvent (load) {
}
Frame 4
function MovementRules() {
this.up = 0;
this.down = 0;
this.left = 0;
this.right = 0;
this.up_left = 0;
this.up_right = 0;
this.down_left = 0;
this.down_right = 0;
this.isKnight = false;
this.isPawn = false;
}
function Move(firstPosX, firstPosY, lastPosX, lastPosY) {
this.fPX = firstPosX;
this.fPY = firstPosY;
this.lPX = lastPosX;
this.lPY = lastPosY;
}
function rulesFor(piece) {
if ((piece == PAWN_W) || (piece == PAWN_B)) {
return(pawnRules);
}
if ((piece == KNIGHT_W) || (piece == KNIGHT_B)) {
return(knightRules);
}
if ((piece == ROOK_W) || (piece == ROOK_B)) {
return(rookRules);
}
if ((piece == BISSHOP_W) || (piece == BISSHOP_B)) {
return(bisshopRules);
}
if ((piece == QUEEN_W) || (piece == QUEEN_B)) {
return(queenRules);
}
if ((piece == KING_W) || (piece == KING_B)) {
return(kingRules);
}
}
function initChessBoard() {
chessBoard = new Array(8);
chessBoard[0] = new Array(ROOK_B, KNIGHT_B, BISSHOP_B, QUEEN_B, KING_B, BISSHOP_B, KNIGHT_B, ROOK_B);
chessBoard[1] = new Array(PAWN_B, PAWN_B, PAWN_B, PAWN_B, PAWN_B, PAWN_B, PAWN_B, PAWN_B);
chessBoard[2] = new Array(VOID, VOID, VOID, VOID, VOID, VOID, VOID, VOID);
chessBoard[3] = new Array(VOID, VOID, VOID, VOID, VOID, VOID, VOID, VOID);
chessBoard[4] = new Array(VOID, VOID, VOID, VOID, VOID, VOID, VOID, VOID);
chessBoard[5] = new Array(VOID, VOID, VOID, VOID, VOID, VOID, VOID, VOID);
chessBoard[6] = new Array(PAWN_W, PAWN_W, PAWN_W, PAWN_W, PAWN_W, PAWN_W, PAWN_W, PAWN_W);
chessBoard[7] = new Array(ROOK_W, KNIGHT_W, BISSHOP_W, QUEEN_W, KING_W, BISSHOP_W, KNIGHT_W, ROOK_W);
var _local3 = 0;
while (_local3 < 8) {
var _local2 = 0;
while (_local2 < 8) {
_root[(("piece_" + _local3) + "_") + _local2].showPiece(chessBoard[_local3][_local2]);
_root[(("piece_" + _local3) + "_") + _local2].row = _local3;
_root[(("piece_" + _local3) + "_") + _local2].col = _local2;
_local2++;
}
_local3++;
}
}
function calculateMoves(row, col, side) {
if (chessBoard[row][col] == VOID) {
trace("Error: no piece to calculate moves for !!");
return(null);
}
var _local3 = new Array();
rules = rulesFor(chessBoard[row][col]);
var _local11;
if (rules.isKnight) {
var _local8 = row - 1;
var _local7 = col + 2;
if ((((_local8 >= 0) && (_local8 < 8)) && (_local7 >= 0)) && (_local7 < 8)) {
if ((chessBoard[_local8][_local7] == VOID) || (side != (chessBoard[_local8][_local7] & 1))) {
_local3[_local3.length] = (((row << 9) | (col << 6)) | (_local8 << 3)) | _local7;
}
}
_local8 = row - 1;
_local7 = col - 2;
if ((((_local8 >= 0) && (_local8 < 8)) && (_local7 >= 0)) && (_local7 < 8)) {
if ((chessBoard[_local8][_local7] == VOID) || (side != (chessBoard[_local8][_local7] & 1))) {
_local3[_local3.length] = (((row << 9) | (col << 6)) | (_local8 << 3)) | _local7;
}
}
_local8 = row + 1;
_local7 = col + 2;
if ((((_local8 >= 0) && (_local8 < 8)) && (_local7 >= 0)) && (_local7 < 8)) {
if ((chessBoard[_local8][_local7] == VOID) || (side != (chessBoard[_local8][_local7] & 1))) {
_local3[_local3.length] = (((row << 9) | (col << 6)) | (_local8 << 3)) | _local7;
}
}
_local8 = row + 1;
_local7 = col - 2;
if ((((_local8 >= 0) && (_local8 < 8)) && (_local7 >= 0)) && (_local7 < 8)) {
if ((chessBoard[_local8][_local7] == VOID) || (side != (chessBoard[_local8][_local7] & 1))) {
_local3[_local3.length] = (((row << 9) | (col << 6)) | (_local8 << 3)) | _local7;
}
}
_local8 = row - 2;
_local7 = col + 1;
if ((((_local8 >= 0) && (_local8 < 8)) && (_local7 >= 0)) && (_local7 < 8)) {
if ((chessBoard[_local8][_local7] == VOID) || (side != (chessBoard[_local8][_local7] & 1))) {
_local3[_local3.length] = (((row << 9) | (col << 6)) | (_local8 << 3)) | _local7;
}
}
_local8 = row - 2;
_local7 = col - 1;
if ((((_local8 >= 0) && (_local8 < 8)) && (_local7 >= 0)) && (_local7 < 8)) {
if ((chessBoard[_local8][_local7] == VOID) || (side != (chessBoard[_local8][_local7] & 1))) {
_local3[_local3.length] = (((row << 9) | (col << 6)) | (_local8 << 3)) | _local7;
}
}
_local8 = row + 2;
_local7 = col - 1;
if ((((_local8 >= 0) && (_local8 < 8)) && (_local7 >= 0)) && (_local7 < 8)) {
if ((chessBoard[_local8][_local7] == VOID) || (side != (chessBoard[_local8][_local7] & 1))) {
_local3[_local3.length] = (((row << 9) | (col << 6)) | (_local8 << 3)) | _local7;
}
}
_local8 = row + 2;
_local7 = col + 1;
if ((((_local8 >= 0) && (_local8 < 8)) && (_local7 >= 0)) && (_local7 < 8)) {
if ((chessBoard[_local8][_local7] == VOID) || (side != (chessBoard[_local8][_local7] & 1))) {
_local3[_local3.length] = (((row << 9) | (col << 6)) | (_local8 << 3)) | _local7;
}
}
} else if (rules.isPawn) {
if (side == SIDE_PLAYER) {
var _local10 = false;
var _local6 = row - 1;
if (chessBoard[_local6][col] == VOID) {
_local3[_local3.length] = (((row << 9) | (col << 6)) | (_local6 << 3)) | col;
_local10 = true;
}
if ((row == 6) && (_local10)) {
_local6--;
if (chessBoard[_local6][col] == VOID) {
_local3[_local3.length] = (((row << 9) | (col << 6)) | (_local6 << 3)) | col;
}
}
var _local8 = row - 1;
var _local7 = col - 1;
if (((((_local8 >= 0) && (_local8 < 8)) && (_local7 >= 0)) && (_local7 < 8)) && ((chessBoard[_local8][_local7] != VOID) && (side != (chessBoard[_local8][_local7] & 1)))) {
_local3[_local3.length] = (((row << 9) | (col << 6)) | (_local8 << 3)) | _local7;
}
_local8 = row - 1;
_local7 = col + 1;
if (((((_local8 >= 0) && (_local8 < 8)) && (_local7 >= 0)) && (_local7 < 8)) && ((chessBoard[_local8][_local7] != VOID) && (side != (chessBoard[_local8][_local7] & 1)))) {
_local3[_local3.length] = (((row << 9) | (col << 6)) | (_local8 << 3)) | _local7;
}
} else {
var _local10 = false;
var _local6 = row + 1;
if (chessBoard[_local6][col] == VOID) {
_local3[_local3.length] = (((row << 9) | (col << 6)) | (_local6 << 3)) | col;
_local10 = true;
}
if ((row == 1) && (_local10)) {
_local6++;
if (chessBoard[_local6][col] == VOID) {
_local3[_local3.length] = (((row << 9) | (col << 6)) | (_local6 << 3)) | col;
}
}
var _local8 = row + 1;
var _local7 = col - 1;
if (((((_local8 >= 0) && (_local8 < 8)) && (_local7 >= 0)) && (_local7 < 8)) && ((chessBoard[_local8][_local7] != VOID) && (side != (chessBoard[_local8][_local7] & 1)))) {
_local3[_local3.length] = (((row << 9) | (col << 6)) | (_local8 << 3)) | _local7;
}
_local8 = row + 1;
_local7 = col + 1;
if (((((_local8 >= 0) && (_local8 < 8)) && (_local7 >= 0)) && (_local7 < 8)) && ((chessBoard[_local8][_local7] != VOID) && (side != (chessBoard[_local8][_local7] & 1)))) {
_local3[_local3.length] = (((row << 9) | (col << 6)) | (_local8 << 3)) | _local7;
}
}
} else {
var _local9 = rules.up;
var _local6 = row - 1;
while ((_local9 > 0) && (_local6 >= 0)) {
if ((chessBoard[_local6][col] == VOID) || (side != (chessBoard[_local6][col] & 1))) {
_local3[_local3.length] = (((row << 9) | (col << 6)) | (_local6 << 3)) | col;
} else {
break;
}
if (chessBoard[_local6][col] != VOID) {
break;
}
_local6--;
_local9--;
}
_local9 = rules.down;
_local6 = row + 1;
while ((_local9 > 0) && (_local6 < 8)) {
if ((chessBoard[_local6][col] == VOID) || (side != (chessBoard[_local6][col] & 1))) {
_local3[_local3.length] = (((row << 9) | (col << 6)) | (_local6 << 3)) | col;
} else {
break;
}
if (chessBoard[_local6][col] != VOID) {
break;
}
_local6++;
_local9--;
}
_local9 = rules.left;
var _local5 = col - 1;
while ((_local9 > 0) && (_local5 >= 0)) {
if ((chessBoard[row][_local5] == VOID) || (side != (chessBoard[row][_local5] & 1))) {
_local3[_local3.length] = (((row << 9) | (col << 6)) | (row << 3)) | _local5;
} else {
break;
}
if (chessBoard[row][_local5] != VOID) {
break;
}
_local5--;
_local9--;
}
_local9 = rules.right;
_local5 = col + 1;
while ((_local9 > 0) && (_local5 < 8)) {
if ((chessBoard[row][_local5] == VOID) || (side != (chessBoard[row][_local5] & 1))) {
_local3[_local3.length] = (((row << 9) | (col << 6)) | (row << 3)) | _local5;
} else {
break;
}
if (chessBoard[row][_local5] != VOID) {
break;
}
_local5++;
_local9--;
}
_local9 = rules.up_left;
_local6 = row - 1;
_local5 = col - 1;
while (((_local9 > 0) && (_local5 >= 0)) && (_local6 >= 0)) {
if ((chessBoard[_local6][_local5] == VOID) || (side != (chessBoard[_local6][_local5] & 1))) {
_local3[_local3.length] = (((row << 9) | (col << 6)) | (_local6 << 3)) | _local5;
} else {
break;
}
if (chessBoard[_local6][_local5] != VOID) {
break;
}
_local6--;
_local5--;
_local9--;
}
_local9 = rules.up_right;
_local6 = row - 1;
_local5 = col + 1;
while (((_local9 > 0) && (_local5 < 8)) && (_local6 >= 0)) {
if ((chessBoard[_local6][_local5] == VOID) || (side != (chessBoard[_local6][_local5] & 1))) {
_local3[_local3.length] = (((row << 9) | (col << 6)) | (_local6 << 3)) | _local5;
} else {
break;
}
if (chessBoard[_local6][_local5] != VOID) {
break;
}
_local6--;
_local5++;
_local9--;
}
_local9 = rules.down_left;
_local6 = row + 1;
_local5 = col - 1;
while (((_local9 > 0) && (_local5 >= 0)) && (_local6 < 8)) {
if ((chessBoard[_local6][_local5] == VOID) || (side != (chessBoard[_local6][_local5] & 1))) {
_local3[_local3.length] = (((row << 9) | (col << 6)) | (_local6 << 3)) | _local5;
} else {
break;
}
if (chessBoard[_local6][_local5] != VOID) {
break;
}
_local6++;
_local5--;
_local9--;
}
_local9 = rules.down_right;
_local6 = row + 1;
_local5 = col + 1;
while (((_local9 > 0) && (_local5 < 8)) && (_local6 < 8)) {
if ((chessBoard[_local6][_local5] == VOID) || (side != (chessBoard[_local6][_local5] & 1))) {
_local3[_local3.length] = (((row << 9) | (col << 6)) | (_local6 << 3)) | _local5;
} else {
break;
}
if (chessBoard[_local6][_local5] != VOID) {
break;
}
_local6++;
_local5++;
_local9--;
}
}
return(_local3);
}
function checkChessState(side) {
var _local3;
var _local4;
var _local6 = 0;
while (_local6 < 8) {
var _local5 = 0;
while (_local5 < 8) {
if (((chessBoard[_local6][_local5] & 1) == getOpponent(side)) && (chessBoard[_local6][_local5] != VOID)) {
compMoves = calculateMoves(_local6, _local5, getOpponent(side));
var _local2 = 0;
while (_local2 < compMoves.length) {
_local3 = (compMoves[_local2] >> 3) & 7;
_local4 = compMoves[_local2] & 7;
if (((chessBoard[_local3][_local4] == KING_W) && (side == SIDE_PLAYER)) || ((chessBoard[_local3][_local4] == KING_B) && (side == SIDE_COMPUTER))) {
if (side == SIDE_PLAYER) {
kingInChess(_local3, _local4, side);
}
return(false);
}
_local2++;
}
}
_local5++;
}
_local6++;
}
if (side == SIDE_PLAYER) {
var _local7 = 0;
_local6 = 0;
while (_local6 < 8) {
var _local5 = 0;
while (_local5 < 8) {
if (((chessBoard[_local6][_local5] & 1) == SIDE_PLAYER) && (chessBoard[_local6][_local5] != VOID)) {
_local7 = _local7 + select(_local6, _local5, true);
}
_local5++;
}
_local6++;
}
if (_local7 == 0) {
invalidateAll();
messages.gotoAndStop("Pat");
}
}
return(true);
}
function computerLoose() {
trace("ComputerLost");
invalidateAll();
messages.gotoAndStop(2);
stop();
}
function deselect(piece) {
resetAllSelection();
pieceSelected = null;
possiblePositions = null;
}
function displayMove(move, side) {
var _local7 = (move >> 9) & 7;
var _local6 = (move >> 6) & 7;
var _local5 = (move >> 3) & 7;
var _local4 = move & 7;
var _local2 = " ";
if (side == SIDE_COMPUTER) {
_local2 = _local2 + "Comp: ";
} else {
_local2 = _local2 + "You: ";
}
_local2 = _local2 + letters[_local6];
_local2 = _local2 + (9 - (_local7 + 1));
_local2 = _local2 + " - ";
_local2 = _local2 + letters[_local4];
_local2 = _local2 + (9 - (_local5 + 1));
_root.myscroll.appendText(_local2);
}
function do_move(move, side) {
var _local3 = VOID;
var _local5 = (move >> 9) & 7;
var _local4 = (move >> 6) & 7;
var _local2 = (move >> 3) & 7;
var _local1 = move & 7;
if (side == SIDE_COMPUTER) {
if (chessBoard[_local2][_local1] != VOID) {
_local3 = chessBoard[_local2][_local1];
playerScore = playerScore - (chessBoard[_local2][_local1] >> 1);
computerScore = computerScore + (chessBoard[_local2][_local1] >> 1);
}
chessBoard[_local2][_local1] = chessBoard[_local5][_local4];
chessBoard[_local5][_local4] = VOID;
return(_local3);
}
if (chessBoard[_local2][_local1] != VOID) {
_local3 = chessBoard[_local2][_local1];
playerScore = playerScore + (chessBoard[_local2][_local1] >> 1);
computerScore = computerScore - (chessBoard[_local2][_local1] >> 1);
}
chessBoard[_local2][_local1] = chessBoard[_local5][_local4];
chessBoard[_local5][_local4] = VOID;
return(_local3);
}
function invalidateAll() {
var _local3 = 0;
while (_local3 < 8) {
var _local2 = 0;
while (_local2 < 8) {
_root[(("piece_" + _local3) + "_") + _local2].marker.gotoAndStop("disabled");
_local2++;
}
_local3++;
}
}
function movePlayer() {
messages.gotoAndStop(0);
resetAllSelection();
checkChessState(SIDE_PLAYER);
signal.gotoAndStop("player");
}
function moveRealPlayer(move, side) {
var _local3 = (move >> 9) & 7;
var _local2 = (move >> 6) & 7;
var _local5 = (move >> 3) & 7;
var _local4 = move & 7;
if (pieceSelected == null) {
trace("ERROR: no piece selected");
return(undefined);
}
if ((chessBoard[_local3][_local2] == KING_W) && (chessBoard[_local5][_local4] == ROOK_W)) {
trace("rocade");
possibleRocade = false;
chessBoard[_local3][_local2] = VOID;
chessBoard[_local5][_local4] = VOID;
if (_local2 < _local4) {
chessBoard[_local3][_local2 + 2] = KING_W;
chessBoard[_local3][_local2 + 1] = ROOK_W;
_root[(("piece_" + _local3) + "_") + (_local2 + 1)].showPiece(chessBoard[_local3][_local2 + 1]);
_root[(("piece_" + _local3) + "_") + (_local2 + 2)].showPiece(chessBoard[_local3][_local2 + 2]);
} else {
chessBoard[_local3][_local2 - 2] = KING_W;
chessBoard[_local3][_local2 - 1] = ROOK_W;
_root[(("piece_" + _local3) + "_") + (_local2 - 1)].showPiece(chessBoard[_local3][_local2 - 1]);
_root[(("piece_" + _local3) + "_") + (_local2 - 2)].showPiece(chessBoard[_local3][_local2 - 2]);
}
_root[(("piece_" + _local5) + "_") + _local4].showPiece(chessBoard[_local5][_local4]);
_root[(("piece_" + _local3) + "_") + _local2].showPiece(chessBoard[_local3][_local2]);
} else {
if ((chessBoard[_local3][_local2] == KING_W) || (chessBoard[_local3][_local2] == ROOK_W)) {
possibleRocade = false;
}
var _local7 = chessBoard[_local5][_local4];
if (((_local7 & 1) == SIDE_COMPUTER) && (_local7 != VOID)) {
trace("capture the computer piece");
}
chessBoard[_local5][_local4] = chessBoard[_local3][_local2];
chessBoard[_local3][_local2] = VOID;
_root[(("piece_" + _local5) + "_") + _local4].showPiece(chessBoard[_local5][_local4]);
_root[(("piece_" + _local3) + "_") + _local2].showPiece(VOID);
}
invalidateAll();
if ((_local5 == 0) && (chessBoard[_local5][_local4] == PAWN_W)) {
trace("promotion");
chessBoard[_local5][_local4] = QUEEN_W;
_root[(("piece_" + _local5) + "_") + _local4].showPiece(QUEEN_W);
}
displayMove(move, SIDE_PLAYER);
gotoAndPlay (7);
}
function moveRealComputer(move) {
var _local6 = (move >> 9) & 7;
var _local5 = (move >> 6) & 7;
var _local2 = (move >> 3) & 7;
var _local3 = move & 7;
var _local7 = chessBoard[_local2][_local3];
if (((_local7 & 1) == SIDE_PLAYER) && (_local7 != VOID)) {
trace("captures the player piece");
}
chessBoard[_local2][_local3] = chessBoard[_local6][_local5];
chessBoard[_local6][_local5] = VOID;
_root[(("piece_" + _local2) + "_") + _local3].showPiece(chessBoard[_local2][_local3]);
_root[(("piece_" + _local6) + "_") + _local5].showPiece(VOID);
if ((_local2 == 7) && (chessBoard[_local2][_local3] == PAWN_B)) {
trace("promotion");
chessBoard[_local2][_local3] = QUEEN_B;
_root[(("piece_" + _local2) + "_") + _local3].showPiece(QUEEN_B);
}
displayMove(move, SIDE_COMPUTER);
movePlayer();
}
function resetAllSelection() {
var _local3 = 0;
while (_local3 < 8) {
var _local2 = 0;
while (_local2 < 8) {
if ((chessBoard[_local3][_local2] == VOID) || ((chessBoard[_local3][_local2] & 1) == SIDE_COMPUTER)) {
_root[(("piece_" + _local3) + "_") + _local2].marker.gotoAndStop("disabled");
} else {
_root[(("piece_" + _local3) + "_") + _local2].marker.gotoAndStop("normal");
}
_local2++;
}
_local3++;
}
}
function select(row, col, real) {
resetAllSelection();
var _local4 = calculateMoves(row, col, SIDE_PLAYER);
if (possibleRocade && (real != true)) {
if (chessBoard[row][col] == KING_W) {
var _local3 = col;
var _local7 = true;
while (_local7) {
_local3++;
if (chessBoard[row][_local3] != VOID) {
if (chessBoard[row][_local3] == ROOK_W) {
if (verifyKingState((((row << 9) | (col << 6)) | (row << 3)) | (col + 2), SIDE_PLAYER)) {
_local4[_local4.length] = (((row << 9) | (col << 6)) | (row << 3)) | _local3;
}
}
_local7 = false;
}
}
_local3 = col;
_local7 = true;
while (_local7) {
_local3--;
if (chessBoard[row][_local3] != VOID) {
if (chessBoard[row][_local3] == ROOK_W) {
if (verifyKingState((((row << 9) | (col << 6)) | (row << 3)) | (col - 2), SIDE_PLAYER)) {
_local4[_local4.length] = (((row << 9) | (col << 6)) | (row << 3)) | _local3;
}
}
}
_local7 = false;
}
}
}
var _local6 = new Array();
var _local8 = 0;
while (_local8 < _local4.length) {
if (verifyKingState(_local4[_local8], SIDE_PLAYER)) {
_local6[_local6.length] = _local4[_local8];
}
_local8++;
}
if (real != true) {
_local8 = 0;
while (_local8 < _local6.length) {
_root[(("piece_" + ((_local6[_local8] >> 3) & 7)) + "_") + (_local6[_local8] & 7)].marker.gotoAndStop("selectedTo");
_local8++;
}
pieceSelected = _root[(("piece_" + row) + "_") + col];
} else {
return(_local6.length);
}
}
function kingInChess(rowKing, colKing, side) {
trace(" >>>> CHESS " + side);
possibleRocade = false;
if (side == SIDE_PLAYER) {
messages.gotoAndStop("playerChess");
} else {
messages.gotoAndStop("computerChess");
}
var _local4;
var _local6 = true;
var _local3 = 0;
while (_local3 < 8) {
var _local2 = 0;
while (_local2 < 8) {
if (((chessBoard[_local3][_local2] & 1) == side) && (chessBoard[_local3][_local2] != VOID)) {
_local4 = calculateMoves(_local3, _local2, side);
disabled = true;
var _local1 = 0;
while (_local1 < _local4.length) {
if (verifyKingState(_local4[_local1], side)) {
_local6 = false;
}
_local1++;
}
}
_local2++;
}
_local3++;
}
if (_local6) {
loose(side);
}
}
function loose(side) {
if (side == SIDE_COMPUTER) {
computerLoose();
} else {
playerLoose();
}
}
function playerLoose() {
trace("Player Lost");
invalidateAll();
messages.gotoAndStop(3);
stop();
}
function search(side, depth, alpha, beta) {
var _local5 = -INFINITY;
var _local3 = new Array();
var _local8 = null;
var _local7;
var _local11;
var _local6 = 0;
while (_local6 < 8) {
var _local1 = 0;
while (_local1 < 8) {
if (((chessBoard[_local6][_local1] & 1) == side) && (chessBoard[_local6][_local1] != VOID)) {
_local3 = _local3.concat(calculateMoves(_local6, _local1, side));
}
_local1++;
}
_local6++;
}
_local6 = 0;
while (_local6 < _local3.length) {
_local8 = do_move(_local3[_local6], side);
if (depth == 0) {
_local7 = ((side == SIDE_COMPUTER) ? (computerScore) : (playerScore));
} else {
_local7 = -search(getOpponent(side), depth - 1, -1 * beta, -1 * alpha);
}
undo_move(_local3[_local6], side, _local8);
if (_local5 < _local7) {
_local5 = _local7;
}
if (alpha < _local5) {
alpha = _local5;
}
if (alpha >= beta) {
return(alpha);
}
_local6++;
}
return(_local5);
}
function shuffle(collection) {
var _local4 = new Array();
var _local3;
var _local2;
while (collection.length != 0) {
_local2 = Math.round(Math.random() * (collection.length - 1));
_local3 = collection[_local2];
collection.splice(_local2, 1);
_local4.push(_local3);
}
return(_local4);
}
function getOpponent(side) {
if (side == SIDE_PLAYER) {
return(SIDE_COMPUTER);
}
return(SIDE_PLAYER);
}
function undo_move(move, side, pieceCaptured) {
var _local6 = (move >> 9) & 7;
var _local5 = (move >> 6) & 7;
var _local2 = (move >> 3) & 7;
var _local1 = move & 7;
if (side == SIDE_COMPUTER) {
chessBoard[_local6][_local5] = chessBoard[_local2][_local1];
if (pieceCaptured != VOID) {
chessBoard[_local2][_local1] = pieceCaptured;
playerScore = playerScore + (chessBoard[_local2][_local1] >> 1);
computerScore = computerScore - (chessBoard[_local2][_local1] >> 1);
} else {
chessBoard[_local2][_local1] = VOID;
}
} else {
chessBoard[_local6][_local5] = chessBoard[_local2][_local1];
if (pieceCaptured != VOID) {
chessBoard[_local2][_local1] = pieceCaptured;
playerScore = playerScore - (chessBoard[_local2][_local1] >> 1);
computerScore = computerScore + (chessBoard[_local2][_local1] >> 1);
} else {
chessBoard[_local2][_local1] = VOID;
}
}
}
function verifyKingState(move, side) {
var _local8;
var _local4;
var _local5;
var _local6;
_local8 = do_move(move, side);
var _local7 = 0;
while (_local7 < 8) {
var _local3 = 0;
while (_local3 < 8) {
if (((chessBoard[_local7][_local3] & 1) == getOpponent(side)) && (chessBoard[_local7][_local3] != VOID)) {
_local4 = calculateMoves(_local7, _local3, getOpponent(side));
var _local1 = 0;
while (_local1 < _local4.length) {
_local5 = (_local4[_local1] >> 3) & 7;
_local6 = _local4[_local1] & 7;
if (((chessBoard[_local5][_local6] == KING_W) && (side == SIDE_PLAYER)) || ((chessBoard[_local5][_local6] == KING_B) && (side == SIDE_COMPUTER))) {
undo_move(move, side, _local8);
return(false);
}
_local1++;
}
}
_local3++;
}
_local7++;
}
undo_move(move, side, _local8);
return(true);
}
VOID = -1;
PAWN_W = 5;
KNIGHT_W = 13;
ROOK_W = 21;
BISSHOP_W = 17;
QUEEN_W = 29;
KING_W = 2001;
PAWN_B = 4;
KNIGHT_B = 12;
ROOK_B = 20;
BISSHOP_B = 16;
QUEEN_B = 28;
KING_B = 4000;
SIDE_COMPUTER = 0;
SIDE_PLAYER = 1;
letters = new Array("a", "b", "c", "d", "e", "f", "g", "h");
possibleRocade = true;
pawnRules = new MovementRules();
pawnRules.isPawn = true;
pawnRules.up = 1;
knightRules = new MovementRules();
knightRules.isKnight = true;
rookRules = new MovementRules();
rookRules.up = 8;
rookRules.down = 8;
rookRules.left = 8;
rookRules.right = 8;
bisshopRules = new MovementRules();
bisshopRules.up_left = 8;
bisshopRules.up_right = 8;
bisshopRules.down_left = 8;
bisshopRules.down_right = 8;
queenRules = new MovementRules();
queenRules.up = 8;
queenRules.down = 8;
queenRules.left = 8;
queenRules.right = 8;
queenRules.up_left = 8;
queenRules.up_right = 8;
queenRules.down_left = 8;
queenRules.down_right = 8;
kingRules = new MovementRules();
kingRules.up = 1;
kingRules.down = 1;
kingRules.left = 1;
kingRules.right = 1;
kingRules.up_left = 1;
kingRules.up_right = 1;
kingRules.down_left = 1;
kingRules.down_right = 1;
poMo = new Array();
initChessBoard();
movePlayer();
myscroll.clearText();
stop();
Frame 7
signal.gotoAndStop("comp");
messages.gotoAndStop(1);
computerScore = 0;
playerScore = 0;
var i = 0;
while (i < 8) {
j = 0;
while (j < 8) {
if (chessBoard[i][j] != VOID) {
if ((chessBoard[i][j] & 1) == SIDE_COMPUTER) {
computerScore = computerScore + (chessBoard[i][j] >> 1);
playerScore = playerScore - (chessBoard[i][j] >> 1);
} else if ((chessBoard[i][j] & 1) == SIDE_PLAYER) {
computerScore = computerScore - (chessBoard[i][j] >> 1);
playerScore = playerScore + (chessBoard[i][j] >> 1);
}
}
j++;
}
i++;
}
Frame 8
computerScore = 0;
INFINITY = 10000000 /* 0x989680 */;
s = getTimer();
trace("my turn");
alpha = -INFINITY;
beta = INFINITY;
bestMove = null;
bestScore = -INFINITY;
allPossibleMoves = new Array();
capturedPiece = null;
side = SIDE_COMPUTER;
depth = MAXDEPTH;
var i = 0;
while (i < 8) {
var j = 0;
while (j < 8) {
if (((chessBoard[i][j] & 1) == side) && (chessBoard[i][j] != VOID)) {
compMoves = calculateMoves(i, j, side);
allPossibleMoves = allPossibleMoves.concat(compMoves);
}
j++;
}
i++;
}
allPossibleMoves = shuffle(allPossibleMoves);
index = 0;
Frame 9
if (index < allPossibleMoves.length) {
progressBar.show(index, allPossibleMoves.length - 1);
capturedPiece = do_move(allPossibleMoves[index], side);
moveScore = -search(getOpponent(side), depth, -1 * beta, -1 * alpha);
} else {
gotoAndPlay (11);
}
Frame 10
undo_move(allPossibleMoves[index], side, capturedPiece);
if (bestScore < moveScore) {
bestScore = moveScore;
bestMove = allPossibleMoves[index];
}
if (alpha < bestScore) {
alpha = bestScore;
}
if (alpha >= beta) {
gotoAndPlay (11);
}
index++;
gotoAndPlay(_currentframe - 1);
Frame 11
trace("best: " + bestMove);
delete allPossibleMoves;
trace("time " + (getTimer() - s));
if (bestMove == null) {
messages.gotoAndStop("Pat");
}
isPat = checkChessState(SIDE_COMPUTER);
tempP = do_move(bestMove, SIDE_COMPUTER);
isNotMat = checkChessState(SIDE_COMPUTER);
undo_move(bestMove, SIDE_COMPUTER, tempP);
if (isNotMat) {
moveRealComputer(bestMove);
} else if (isPat) {
messages.gotoAndStop("Pat");
} else {
computerLoose();
}
stop();
Symbol 12 MovieClip [energyBar] Frame 1
function show(value, maxValue) {
_visible = true;
var _local1 = Math.round((value * 20) / maxValue);
if (_local1 == 0) {
_local1 = 1;
}
gotoAndStop(_local1);
}
function hide() {
_visible = false;
}
stop();
Symbol 14 MovieClip Frame 1
stop();
Symbol 15 MovieClip Frame 1
_root.stop();
movieSize = _root.getBytesTotal();
Symbol 15 MovieClip Frame 2
movieLoaded = _root.getBytesLoaded();
percent = Math.round((movieLoaded / movieSize) * 100);
loadbar.gotoAndStop(percent);
Symbol 15 MovieClip Frame 3
if (movieLoaded < movieSize) {
gotoAndPlay(_currentframe - 1);
}
Symbol 15 MovieClip Frame 4
_root.play();
Symbol 31 Button
on (release) {
stopAllSounds();
MAXDEPTH = 0;
play();
}
Symbol 34 Button
on (release) {
gotoAndStop (12);
}
Symbol 37 Button
on (release) {
stopAllSounds();
MAXDEPTH = 1;
play();
}
Symbol 63 Button
on (release) {
_root.select(this._parent.row, this._parent.col);
gotoAndStop (3);
}
Symbol 65 Button
on (release) {
_root.moveRealPlayer((((_root.pieceSelected.row << 9) | (_root.pieceSelected.col << 6)) | (this._parent.row << 3)) | this._parent.col, _root.SIDE_PLAYER);
}
Symbol 67 Button
on (release) {
_root.deselect(this._parent);
_root.gotoAndStop("normal");
}
Symbol 68 MovieClip Frame 1
stop();
Symbol 68 MovieClip Frame 2
stop();
Symbol 68 MovieClip Frame 3
stop();
Symbol 68 MovieClip Frame 4
stop();
Symbol 93 MovieClip Frame 1
function showPiece(piece) {
if (piece == _root.VOID) {
gotoAndStop (1);
} else if (piece == _root.PAWN_W) {
gotoAndStop (2);
} else if (piece == _root.KNIGHT_W) {
gotoAndStop (3);
} else if (piece == _root.ROOK_W) {
gotoAndStop (4);
} else if (piece == _root.BISSHOP_W) {
gotoAndStop (5);
} else if (piece == _root.QUEEN_W) {
gotoAndStop (6);
} else if (piece == _root.KING_W) {
gotoAndStop (7);
} else if (piece == _root.PAWN_B) {
gotoAndStop (9);
} else if (piece == _root.KNIGHT_B) {
gotoAndStop (10);
} else if (piece == _root.ROOK_B) {
gotoAndStop (11);
} else if (piece == _root.BISSHOP_B) {
gotoAndStop (12);
} else if (piece == _root.QUEEN_B) {
gotoAndStop (13);
} else if (piece == _root.KING_B) {
gotoAndStop (14);
}
}
piece = "void";
stop();
Symbol 93 MovieClip Frame 2
piece = "pawn_w";
stop();
Symbol 93 MovieClip Frame 3
piece = "knight_w";
stop();
Symbol 93 MovieClip Frame 4
piece = "rook_w";
stop();
Symbol 93 MovieClip Frame 5
piece = "bisshop_w";
stop();
Symbol 93 MovieClip Frame 6
piece = "queen_w";
stop();
Symbol 93 MovieClip Frame 7
piece = "king_w";
stop();
Symbol 93 MovieClip Frame 9
piece = "pawn_b";
stop();
Symbol 93 MovieClip Frame 10
piece = "knight_b";
stop();
Symbol 93 MovieClip Frame 11
piece = "rook_b";
stop();
Symbol 93 MovieClip Frame 12
piece = "bisshop_b";
stop();
Symbol 93 MovieClip Frame 13
piece = "queen_b";
stop();
Symbol 93 MovieClip Frame 14
piece = "king_b";
stop();
Symbol 94 MovieClip Frame 1
function showPiece(piece) {
if (piece == _root.VOID) {
gotoAndStop (1);
} else if (piece == _root.PAWN_W) {
gotoAndStop (2);
} else if (piece == _root.KNIGHT_W) {
gotoAndStop (3);
} else if (piece == _root.ROOK_W) {
gotoAndStop (4);
} else if (piece == _root.BISSHOP_W) {
gotoAndStop (5);
} else if (piece == _root.QUEEN_W) {
gotoAndStop (6);
} else if (piece == _root.KING_W) {
gotoAndStop (7);
} else if (piece == _root.PAWN_B) {
gotoAndStop (9);
} else if (piece == _root.KNIGHT_B) {
gotoAndStop (10);
} else if (piece == _root.ROOK_B) {
gotoAndStop (11);
} else if (piece == _root.BISSHOP_B) {
gotoAndStop (12);
} else if (piece == _root.QUEEN_B) {
gotoAndStop (13);
} else if (piece == _root.KING_B) {
gotoAndStop (14);
}
}
piece = "void";
stop();
Symbol 94 MovieClip Frame 2
piece = "pawn_w";
stop();
Symbol 94 MovieClip Frame 3
piece = "knight_w";
stop();
Symbol 94 MovieClip Frame 4
piece = "rook_w";
stop();
Symbol 94 MovieClip Frame 5
piece = "bisshop_w";
stop();
Symbol 94 MovieClip Frame 6
piece = "queen_w";
stop();
Symbol 94 MovieClip Frame 7
piece = "king_w";
stop();
Symbol 94 MovieClip Frame 9
piece = "pawn_b";
stop();
Symbol 94 MovieClip Frame 10
piece = "knight_b";
stop();
Symbol 94 MovieClip Frame 11
piece = "rook_b";
stop();
Symbol 94 MovieClip Frame 12
piece = "bisshop_b";
stop();
Symbol 94 MovieClip Frame 13
piece = "queen_b";
stop();
Symbol 94 MovieClip Frame 14
piece = "king_b";
stop();
Symbol 95 MovieClip Frame 1
function showPiece(piece) {
if (piece == _root.VOID) {
gotoAndStop (1);
} else if (piece == _root.PAWN_W) {
gotoAndStop (2);
} else if (piece == _root.KNIGHT_W) {
gotoAndStop (3);
} else if (piece == _root.ROOK_W) {
gotoAndStop (4);
} else if (piece == _root.BISSHOP_W) {
gotoAndStop (5);
} else if (piece == _root.QUEEN_W) {
gotoAndStop (6);
} else if (piece == _root.KING_W) {
gotoAndStop (7);
} else if (piece == _root.PAWN_B) {
gotoAndStop (9);
} else if (piece == _root.KNIGHT_B) {
gotoAndStop (10);
} else if (piece == _root.ROOK_B) {
gotoAndStop (11);
} else if (piece == _root.BISSHOP_B) {
gotoAndStop (12);
} else if (piece == _root.QUEEN_B) {
gotoAndStop (13);
} else if (piece == _root.KING_B) {
gotoAndStop (14);
}
}
piece = "void";
stop();
Symbol 95 MovieClip Frame 2
piece = "pawn_w";
stop();
Symbol 95 MovieClip Frame 3
piece = "knight_w";
stop();
Symbol 95 MovieClip Frame 4
piece = "rook_w";
stop();
Symbol 95 MovieClip Frame 5
piece = "bisshop_w";
stop();
Symbol 95 MovieClip Frame 6
piece = "queen_w";
stop();
Symbol 95 MovieClip Frame 7
piece = "king_w";
stop();
Symbol 95 MovieClip Frame 9
piece = "pawn_b";
stop();
Symbol 95 MovieClip Frame 10
piece = "knight_b";
stop();
Symbol 95 MovieClip Frame 11
piece = "rook_b";
stop();
Symbol 95 MovieClip Frame 12
piece = "bisshop_b";
stop();
Symbol 95 MovieClip Frame 13
piece = "queen_b";
stop();
Symbol 95 MovieClip Frame 14
piece = "king_b";
stop();
Symbol 103 Button
on (release) {
stopAllSounds();
gotoAndPlay (1);
}
Symbol 117 MovieClip Frame 1
_root.progressBar._visible = false;
stop();
Symbol 117 MovieClip Frame 2
_root.progressBar._visible = true;
_root.progressBar.gotoAndStop(1);
stop();
Symbol 133 Button
on (release) {
stopAllSounds();
gotoAndStop (1);
}