Frame 2
stop();
Instance of Symbol 57 MovieClip "myscroll" in Frame 3
onClipEvent (enterFrame) {
if (dragging == true) {
_root.text.scroll = 1 + int(((_y - top) * totalLines) / (96.6 - _height));
}
}
onClipEvent (load) {
update();
updateAfterEvent();
}
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 i = 0;
while (i < 8) {
var j = 0;
while (j < 8) {
_root[(("piece_" + i) + "_") + j].showPiece(chessBoard[i][j]);
_root[(("piece_" + i) + "_") + j].row = i;
_root[(("piece_" + i) + "_") + j].col = j;
j++;
}
i++;
}
}
function calculateMoves(row, col, side) {
if (chessBoard[row][col] == VOID) {
trace("Error: no piece to calculate moves for !!");
return(null);
}
var poMo = new Array();
rules = rulesFor(chessBoard[row][col]);
var poTa;
if (rules.isKnight) {
var x = (row - 1);
var y = (col + 2);
if ((((x >= 0) && (x < 8)) && (y >= 0)) && (y < 8)) {
if ((chessBoard[x][y] == VOID) || (side != (chessBoard[x][y] & 1))) {
poMo[poMo.length] = (((row << 9) | (col << 6)) | (x << 3)) | y;
}
}
x = row - 1;
y = col - 2;
if ((((x >= 0) && (x < 8)) && (y >= 0)) && (y < 8)) {
if ((chessBoard[x][y] == VOID) || (side != (chessBoard[x][y] & 1))) {
poMo[poMo.length] = (((row << 9) | (col << 6)) | (x << 3)) | y;
}
}
x = row + 1;
y = col + 2;
if ((((x >= 0) && (x < 8)) && (y >= 0)) && (y < 8)) {
if ((chessBoard[x][y] == VOID) || (side != (chessBoard[x][y] & 1))) {
poMo[poMo.length] = (((row << 9) | (col << 6)) | (x << 3)) | y;
}
}
x = row + 1;
y = col - 2;
if ((((x >= 0) && (x < 8)) && (y >= 0)) && (y < 8)) {
if ((chessBoard[x][y] == VOID) || (side != (chessBoard[x][y] & 1))) {
poMo[poMo.length] = (((row << 9) | (col << 6)) | (x << 3)) | y;
}
}
x = row - 2;
y = col + 1;
if ((((x >= 0) && (x < 8)) && (y >= 0)) && (y < 8)) {
if ((chessBoard[x][y] == VOID) || (side != (chessBoard[x][y] & 1))) {
poMo[poMo.length] = (((row << 9) | (col << 6)) | (x << 3)) | y;
}
}
x = row - 2;
y = col - 1;
if ((((x >= 0) && (x < 8)) && (y >= 0)) && (y < 8)) {
if ((chessBoard[x][y] == VOID) || (side != (chessBoard[x][y] & 1))) {
poMo[poMo.length] = (((row << 9) | (col << 6)) | (x << 3)) | y;
}
}
x = row + 2;
y = col - 1;
if ((((x >= 0) && (x < 8)) && (y >= 0)) && (y < 8)) {
if ((chessBoard[x][y] == VOID) || (side != (chessBoard[x][y] & 1))) {
poMo[poMo.length] = (((row << 9) | (col << 6)) | (x << 3)) | y;
}
}
x = row + 2;
y = col + 1;
if ((((x >= 0) && (x < 8)) && (y >= 0)) && (y < 8)) {
if ((chessBoard[x][y] == VOID) || (side != (chessBoard[x][y] & 1))) {
poMo[poMo.length] = (((row << 9) | (col << 6)) | (x << 3)) | y;
}
}
} else if (rules.isPawn) {
if (side == SIDE_PLAYER) {
var possibleEmpassant = false;
var i = (row - 1);
if (chessBoard[i][col] == VOID) {
poMo[poMo.length] = (((row << 9) | (col << 6)) | (i << 3)) | col;
possibleEmpassant = true;
}
if ((row == 6) && (possibleEmpassant)) {
i--;
if (chessBoard[i][col] == VOID) {
poMo[poMo.length] = (((row << 9) | (col << 6)) | (i << 3)) | col;
}
}
var x = (row - 1);
var y = (col - 1);
if (((((x >= 0) && (x < 8)) && (y >= 0)) && (y < 8)) && ((chessBoard[x][y] != VOID) && (side != (chessBoard[x][y] & 1)))) {
poMo[poMo.length] = (((row << 9) | (col << 6)) | (x << 3)) | y;
}
var x = (row - 1);
var y = (col + 1);
if (((((x >= 0) && (x < 8)) && (y >= 0)) && (y < 8)) && ((chessBoard[x][y] != VOID) && (side != (chessBoard[x][y] & 1)))) {
poMo[poMo.length] = (((row << 9) | (col << 6)) | (x << 3)) | y;
}
} else {
var possibleEmpassant = false;
var i = (row + 1);
if (chessBoard[i][col] == VOID) {
poMo[poMo.length] = (((row << 9) | (col << 6)) | (i << 3)) | col;
possibleEmpassant = true;
}
if ((row == 1) && (possibleEmpassant)) {
i++;
if (chessBoard[i][col] == VOID) {
poMo[poMo.length] = (((row << 9) | (col << 6)) | (i << 3)) | col;
}
}
x = row + 1;
y = col - 1;
if (((((x >= 0) && (x < 8)) && (y >= 0)) && (y < 8)) && ((chessBoard[x][y] != VOID) && (side != (chessBoard[x][y] & 1)))) {
poMo[poMo.length] = (((row << 9) | (col << 6)) | (x << 3)) | y;
}
x = row + 1;
y = col + 1;
if (((((x >= 0) && (x < 8)) && (y >= 0)) && (y < 8)) && ((chessBoard[x][y] != VOID) && (side != (chessBoard[x][y] & 1)))) {
poMo[poMo.length] = (((row << 9) | (col << 6)) | (x << 3)) | y;
}
}
} else {
var delta = rules.up;
var i = (row - 1);
while ((0 < delta) && (i >= 0)) {
if ((chessBoard[i][col] == VOID) || (side != (chessBoard[i][col] & 1))) {
poMo[poMo.length] = (((row << 9) | (col << 6)) | (i << 3)) | col;
} else {
break;
}
if (chessBoard[i][col] != VOID) {
break;
}
i--;
delta--;
}
var delta = rules.down;
var i = (row + 1);
while ((0 < delta) && (i < 8)) {
if ((chessBoard[i][col] == VOID) || (side != (chessBoard[i][col] & 1))) {
poMo[poMo.length] = (((row << 9) | (col << 6)) | (i << 3)) | col;
} else {
break;
}
if (chessBoard[i][col] != VOID) {
break;
}
i++;
delta--;
}
var delta = rules.left;
var j = (col - 1);
while ((0 < delta) && (j >= 0)) {
if ((chessBoard[row][j] == VOID) || (side != (chessBoard[row][j] & 1))) {
poMo[poMo.length] = (((row << 9) | (col << 6)) | (row << 3)) | j;
} else {
break;
}
if (chessBoard[row][j] != VOID) {
break;
}
j--;
delta--;
}
var delta = rules.right;
var j = (col + 1);
while ((0 < delta) && (j < 8)) {
if ((chessBoard[row][j] == VOID) || (side != (chessBoard[row][j] & 1))) {
poMo[poMo.length] = (((row << 9) | (col << 6)) | (row << 3)) | j;
} else {
break;
}
if (chessBoard[row][j] != VOID) {
break;
}
j++;
delta--;
}
var delta = rules.up_left;
var i = (row - 1);
var j = (col - 1);
while (((0 < delta) && (j >= 0)) && (i >= 0)) {
if ((chessBoard[i][j] == VOID) || (side != (chessBoard[i][j] & 1))) {
poMo[poMo.length] = (((row << 9) | (col << 6)) | (i << 3)) | j;
} else {
break;
}
if (chessBoard[i][j] != VOID) {
break;
}
i--;
j--;
delta--;
}
var delta = rules.up_right;
var i = (row - 1);
var j = (col + 1);
while (((0 < delta) && (j < 8)) && (i >= 0)) {
if ((chessBoard[i][j] == VOID) || (side != (chessBoard[i][j] & 1))) {
poMo[poMo.length] = (((row << 9) | (col << 6)) | (i << 3)) | j;
} else {
break;
}
if (chessBoard[i][j] != VOID) {
break;
}
i--;
j++;
delta--;
}
var delta = rules.down_left;
var i = (row + 1);
var j = (col - 1);
while (((0 < delta) && (j >= 0)) && (i < 8)) {
if ((chessBoard[i][j] == VOID) || (side != (chessBoard[i][j] & 1))) {
poMo[poMo.length] = (((row << 9) | (col << 6)) | (i << 3)) | j;
} else {
break;
}
if (chessBoard[i][j] != VOID) {
break;
}
i++;
j--;
delta--;
}
var delta = rules.down_right;
var i = (row + 1);
var j = (col + 1);
while (((0 < delta) && (j < 8)) && (i < 8)) {
if ((chessBoard[i][j] == VOID) || (side != (chessBoard[i][j] & 1))) {
poMo[poMo.length] = (((row << 9) | (col << 6)) | (i << 3)) | j;
} else {
break;
}
if (chessBoard[i][j] != VOID) {
break;
}
i++;
j++;
delta--;
}
}
return(poMo);
}
function checkChessState(side) {
var row;
var col;
var i = 0;
while (i < 8) {
var j = 0;
while (j < 8) {
if (((chessBoard[i][j] & 1) == getOpponent(side)) && (chessBoard[i][j] != VOID)) {
compMoves = calculateMoves(i, j, getOpponent(side));
var k = 0;
while (k < compMoves.length) {
row = (compMoves[k] >> 3) & 7;
col = compMoves[k] & 7;
if (((chessBoard[row][col] == KING_W) && (side == SIDE_PLAYER)) || ((chessBoard[row][col] == KING_B) && (side == SIDE_COMPUTER))) {
if (side == SIDE_PLAYER) {
kingInChess(row, col, side);
}
return(false);
}
k++;
}
}
j++;
}
i++;
}
if (side == SIDE_PLAYER) {
var totalMoves = 0;
var i = 0;
while (i < 8) {
var j = 0;
while (j < 8) {
if (((chessBoard[i][j] & 1) == SIDE_PLAYER) && (chessBoard[i][j] != VOID)) {
totalMoves = totalMoves + select(i, j, true);
}
j++;
}
i++;
}
if (totalMoves == 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 fPX = ((move >> 9) & 7);
var fPY = ((move >> 6) & 7);
var lPX = ((move >> 3) & 7);
var lPY = (move & 7);
var text = " ";
if (side == SIDE_COMPUTER) {
text = text + "Comp: ";
} else {
text = text + "You: ";
}
text = text + letters[fPY];
text = text + (9 - (fPX + 1));
text = text + " - ";
text = text + letters[lPY];
text = text + (9 - (lPX + 1));
_root.myscroll.appendText(text);
}
function do_move(move, side) {
var pieceCaptured = VOID;
var fPX = ((move >> 9) & 7);
var fPY = ((move >> 6) & 7);
var lPX = ((move >> 3) & 7);
var lPY = (move & 7);
if (side == SIDE_COMPUTER) {
if (chessBoard[lPX][lPY] != VOID) {
pieceCaptured = chessBoard[lPX][lPY];
playerScore = playerScore - (chessBoard[lPX][lPY] >> 1);
computerScore = computerScore + (chessBoard[lPX][lPY] >> 1);
}
chessBoard[lPX][lPY] = chessBoard[fPX][fPY];
chessBoard[fPX][fPY] = VOID;
return(pieceCaptured);
}
if (chessBoard[lPX][lPY] != VOID) {
pieceCaptured = chessBoard[lPX][lPY];
playerScore = playerScore + (chessBoard[lPX][lPY] >> 1);
computerScore = computerScore - (chessBoard[lPX][lPY] >> 1);
}
chessBoard[lPX][lPY] = chessBoard[fPX][fPY];
chessBoard[fPX][fPY] = VOID;
return(pieceCaptured);
}
function invalidateAll() {
var i = 0;
while (i < 8) {
var j = 0;
while (j < 8) {
_root[(("piece_" + i) + "_") + j].marker.gotoAndStop("disabled");
j++;
}
i++;
}
}
function movePlayer() {
messages.gotoAndStop(0);
resetAllSelection();
checkChessState(SIDE_PLAYER);
signal.gotoAndStop("player");
}
function moveRealPlayer(move, side) {
var fPX = ((move >> 9) & 7);
var fPY = ((move >> 6) & 7);
var lPX = ((move >> 3) & 7);
var lPY = (move & 7);
if (pieceSelected == null) {
trace("ERROR: no piece selected");
return(undefined);
}
if ((chessBoard[fPX][fPY] == KING_W) && (chessBoard[lPX][lPY] == ROOK_W)) {
trace("rocade");
possibleRocade = false;
chessBoard[fPX][fPY] = VOID;
chessBoard[lPX][lPY] = VOID;
if (fPY < lPY) {
chessBoard[fPX][fPY + 2] = KING_W;
chessBoard[fPX][fPY + 1] = ROOK_W;
_root[(("piece_" + fPX) + "_") + (fPY + 1)].showPiece(chessBoard[fPX][fPY + 1]);
_root[(("piece_" + fPX) + "_") + (fPY + 2)].showPiece(chessBoard[fPX][fPY + 2]);
} else {
chessBoard[fPX][fPY - 2] = KING_W;
chessBoard[fPX][fPY - 1] = ROOK_W;
_root[(("piece_" + fPX) + "_") + (fPY - 1)].showPiece(chessBoard[fPX][fPY - 1]);
_root[(("piece_" + fPX) + "_") + (fPY - 2)].showPiece(chessBoard[fPX][fPY - 2]);
}
_root[(("piece_" + lPX) + "_") + lPY].showPiece(chessBoard[lPX][lPY]);
_root[(("piece_" + fPX) + "_") + fPY].showPiece(chessBoard[fPX][fPY]);
} else {
if ((chessBoard[fPX][fPY] == KING_W) || (chessBoard[fPX][fPY] == ROOK_W)) {
possibleRocade = false;
}
var target = chessBoard[lPX][lPY];
if (((target & 1) == SIDE_COMPUTER) && (target != VOID)) {
trace("capture the computer piece");
}
chessBoard[lPX][lPY] = chessBoard[fPX][fPY];
chessBoard[fPX][fPY] = VOID;
_root[(("piece_" + lPX) + "_") + lPY].showPiece(chessBoard[lPX][lPY]);
_root[(("piece_" + fPX) + "_") + fPY].showPiece(VOID);
}
invalidateAll();
if ((lPX == 0) && (chessBoard[lPX][lPY] == PAWN_W)) {
trace("promotion");
chessBoard[lPX][lPY] = QUEEN_W;
_root[(("piece_" + lPX) + "_") + lPY].showPiece(QUEEN_W);
}
displayMove(move, SIDE_PLAYER);
gotoAndPlay (7);
}
function moveRealComputer(move) {
var fPX = ((move >> 9) & 7);
var fPY = ((move >> 6) & 7);
var lPX = ((move >> 3) & 7);
var lPY = (move & 7);
var target = chessBoard[lPX][lPY];
if (((target & 1) == SIDE_PLAYER) && (target != VOID)) {
trace("captures the player piece");
}
chessBoard[lPX][lPY] = chessBoard[fPX][fPY];
chessBoard[fPX][fPY] = VOID;
_root[(("piece_" + lPX) + "_") + lPY].showPiece(chessBoard[lPX][lPY]);
_root[(("piece_" + fPX) + "_") + fPY].showPiece(VOID);
if ((lPX == 7) && (chessBoard[lPX][lPY] == PAWN_B)) {
trace("promotion");
chessBoard[lPX][lPY] = QUEEN_B;
_root[(("piece_" + lPX) + "_") + lPY].showPiece(QUEEN_B);
}
displayMove(move, SIDE_COMPUTER);
movePlayer();
}
function resetAllSelection() {
var i = 0;
while (i < 8) {
var j = 0;
while (j < 8) {
if ((chessBoard[i][j] == VOID) || ((chessBoard[i][j] & 1) == SIDE_COMPUTER)) {
_root[(("piece_" + i) + "_") + j].marker.gotoAndStop("disabled");
} else {
_root[(("piece_" + i) + "_") + j].marker.gotoAndStop("normal");
}
j++;
}
i++;
}
}
function select(row, col, real) {
resetAllSelection();
var possibleMoves = calculateMoves(row, col, SIDE_PLAYER);
if (possibleRocade && (real != true)) {
if (chessBoard[row][col] == KING_W) {
var k = col;
var adv = true;
while (adv) {
k++;
if (chessBoard[row][k] != VOID) {
if (chessBoard[row][k] == ROOK_W) {
if (verifyKingState((((row << 9) | (col << 6)) | (row << 3)) | (col + 2), SIDE_PLAYER)) {
possibleMoves[possibleMoves.length] = (((row << 9) | (col << 6)) | (row << 3)) | k;
}
}
adv = false;
}
}
k = col;
adv = true;
while (adv) {
k--;
if (chessBoard[row][k] != VOID) {
if (chessBoard[row][k] == ROOK_W) {
if (verifyKingState((((row << 9) | (col << 6)) | (row << 3)) | (col - 2), SIDE_PLAYER)) {
possibleMoves[possibleMoves.length] = (((row << 9) | (col << 6)) | (row << 3)) | k;
}
}
adv = false;
}
}
}
}
var validMoves = new Array();
var i = 0;
while (i < possibleMoves.length) {
if (verifyKingState(possibleMoves[i], SIDE_PLAYER)) {
validMoves[validMoves.length] = possibleMoves[i];
}
i++;
}
if (real != true) {
var i = 0;
while (i < validMoves.length) {
_root[(("piece_" + ((validMoves[i] >> 3) & 7)) + "_") + (validMoves[i] & 7)].marker.gotoAndStop("selectedTo");
i++;
}
pieceSelected = _root[(("piece_" + row) + "_") + col];
} else {
return(validMoves.length);
}
}
function kingInChess(rowKing, colKing, side) {
trace(" >>>> CHESS " + side);
possibleRocade = false;
if (side == SIDE_PLAYER) {
messages.gotoAndStop("playerChess");
} else {
messages.gotoAndStop("computerChess");
}
var possibleMoves;
var isChessMat = true;
var i = 0;
while (i < 8) {
var j = 0;
while (j < 8) {
if (((chessBoard[i][j] & 1) == side) && (chessBoard[i][j] != VOID)) {
possibleMoves = calculateMoves(i, j, side);
disabled = true;
var k = 0;
while (k < possibleMoves.length) {
if (verifyKingState(possibleMoves[k], side)) {
isChessMat = false;
}
k++;
}
}
j++;
}
i++;
}
if (isChessMat) {
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 bestScore = (-INFINITY);
var aM = new Array();
var capturedPiece = null;
var moveScore;
var compMoves;
var i = 0;
while (i < 8) {
var j = 0;
while (j < 8) {
if (((chessBoard[i][j] & 1) == side) && (chessBoard[i][j] != VOID)) {
aM = aM.concat(calculateMoves(i, j, side));
}
j++;
}
i++;
}
var i = 0;
while (i < aM.length) {
capturedPiece = do_move(aM[i], side);
if (depth == 0) {
moveScore = ((side == SIDE_COMPUTER) ? (computerScore) : (playerScore));
} else {
moveScore = -search(getOpponent(side), depth - 1, -1 * beta, -1 * alpha);
}
undo_move(aM[i], side, capturedPiece);
if (bestScore < moveScore) {
bestScore = moveScore;
}
if (alpha < bestScore) {
alpha = bestScore;
}
if (alpha >= beta) {
return(alpha);
}
i++;
}
return(bestScore);
}
function shuffle(collection) {
var nCollection = new Array();
var value;
var val;
while (collection.length != 0) {
val = Math.round(Math.random() * (collection.length - 1));
value = collection[val];
collection.splice(val, 1);
nCollection.push(value);
}
delete collection;
return(nCollection);
}
function getOpponent(side) {
if (side == SIDE_PLAYER) {
return(SIDE_COMPUTER);
}
return(SIDE_PLAYER);
}
function undo_move(move, side, pieceCaptured) {
var fPX = ((move >> 9) & 7);
var fPY = ((move >> 6) & 7);
var lPX = ((move >> 3) & 7);
var lPY = (move & 7);
if (side == SIDE_COMPUTER) {
chessBoard[fPX][fPY] = chessBoard[lPX][lPY];
if (pieceCaptured != VOID) {
chessBoard[lPX][lPY] = pieceCaptured;
playerScore = playerScore + (chessBoard[lPX][lPY] >> 1);
computerScore = computerScore - (chessBoard[lPX][lPY] >> 1);
} else {
chessBoard[lPX][lPY] = VOID;
}
} else {
chessBoard[fPX][fPY] = chessBoard[lPX][lPY];
if (pieceCaptured != VOID) {
chessBoard[lPX][lPY] = pieceCaptured;
playerScore = playerScore - (chessBoard[lPX][lPY] >> 1);
computerScore = computerScore + (chessBoard[lPX][lPY] >> 1);
} else {
chessBoard[lPX][lPY] = VOID;
}
}
}
function verifyKingState(move, side) {
var capturedPiece;
var compMoves;
var row;
var col;
capturedPiece = do_move(move, side);
var i = 0;
while (i < 8) {
var j = 0;
while (j < 8) {
if (((chessBoard[i][j] & 1) == getOpponent(side)) && (chessBoard[i][j] != VOID)) {
compMoves = calculateMoves(i, j, getOpponent(side));
var k = 0;
while (k < compMoves.length) {
row = (compMoves[k] >> 3) & 7;
col = compMoves[k] & 7;
if (((chessBoard[row][col] == KING_W) && (side == SIDE_PLAYER)) || ((chessBoard[row][col] == KING_B) && (side == SIDE_COMPUTER))) {
undo_move(move, side, capturedPiece);
return(false);
}
k++;
}
}
j++;
}
i++;
}
undo_move(move, side, capturedPiece);
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 6 MovieClip [energyBar] Frame 1
function show(value, maxValue) {
_visible = true;
var frame = Math.round((value * 20) / maxValue);
if (frame == 0) {
frame = 1;
}
gotoAndStop(frame);
}
function hide() {
_visible = false;
}
stop();
Symbol 8 MovieClip Frame 1
stop();
Symbol 9 MovieClip Frame 1
_root.stop();
movieSize = _root.getBytesTotal();
Symbol 9 MovieClip Frame 2
movieLoaded = _root.getBytesLoaded();
percent = Math.round((movieLoaded / movieSize) * 100);
loadbar.gotoAndStop(percent);
Symbol 9 MovieClip Frame 3
if (movieLoaded < movieSize) {
gotoAndPlay(_currentframe - 1);
}
Symbol 9 MovieClip Frame 4
_root.play();
Symbol 24 Button
on (release) {
MAXDEPTH = 0;
play();
}
Symbol 30 Button
on (release) {
MAXDEPTH = 1;
play();
}
Symbol 37 Button
on (release) {
gotoAndPlay (1);
}
Symbol 40 MovieClip Frame 1
_root.progressBar._visible = false;
stop();
Symbol 40 MovieClip Frame 2
_root.progressBar._visible = true;
_root.progressBar.gotoAndStop(1);
stop();
Symbol 47 MovieClip Frame 1
stop();
Symbol 47 MovieClip Frame 2
stop();
Symbol 47 MovieClip Frame 3
stop();
Symbol 47 MovieClip Frame 4
stop();
Symbol 47 MovieClip Frame 5
stop();
Symbol 47 MovieClip Frame 6
stop();
Symbol 51 Button
on (release, keyPress "<Down>") {
text.scroll++;
if (myscroll._y < ((96.6 - myscroll._height) + myscroll.top)) {
myscroll._y = myscroll._y + ((96.4 - myscroll._height) / myscroll.totalLines);
}
}
Symbol 52 Button
on (release, keyPress "<Up>") {
text.scroll--;
if (myscroll.top < myscroll._y) {
myscroll._y = myscroll._y - ((96.4 - myscroll._height) / myscroll.totalLines);
}
}
Symbol 56 Button
on (press) {
startDrag ("", false, left, top, right, bottom);
dragging = true;
}
on (release, releaseOutside) {
stopDrag();
dragging = false;
}
Symbol 57 MovieClip Frame 1
function update() {
_height = (576 / (totalLines + 5));
bottom = top + (96.6 - _height);
}
function appendText(tx) {
moveNumber++;
text = (((("" + moveNumber) + ".") + tx) + newline) + text;
_root.text = title + text;
totalLines++;
update();
gotoBottom();
}
function clearText() {
_root.text = title;
text = "";
totalLines = 1;
update();
moveNumber = 0;
}
totalLines = 0;
title = newline;
text = "";
top = _y;
left = _x;
right = _x;
clearText();
Symbol 57 MovieClip Frame 3
gotoAndPlay(_currentframe - 1);
Symbol 61 Button
on (release) {
_root.select(this._parent.row, this._parent.col);
gotoAndStop (3);
}
Symbol 63 Button
on (release) {
_root.moveRealPlayer((((_root.pieceSelected.row << 9) | (_root.pieceSelected.col << 6)) | (this._parent.row << 3)) | this._parent.col, _root.SIDE_PLAYER);
}
Symbol 65 Button
on (release) {
_root.deselect(this._parent);
_root.gotoAndStop("normal");
}
Symbol 66 MovieClip Frame 1
stop();
Symbol 66 MovieClip Frame 2
stop();
Symbol 66 MovieClip Frame 3
stop();
Symbol 66 MovieClip Frame 4
stop();
Symbol 79 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 79 MovieClip Frame 2
piece = "pawn_w";
stop();
Symbol 79 MovieClip Frame 3
piece = "knight_w";
stop();
Symbol 79 MovieClip Frame 4
piece = "rook_w";
stop();
Symbol 79 MovieClip Frame 5
piece = "bisshop_w";
stop();
Symbol 79 MovieClip Frame 6
piece = "queen_w";
stop();
Symbol 79 MovieClip Frame 7
piece = "king_w";
stop();
Symbol 79 MovieClip Frame 9
piece = "pawn_b";
stop();
Symbol 79 MovieClip Frame 10
piece = "knight_b";
stop();
Symbol 79 MovieClip Frame 11
piece = "rook_b";
stop();
Symbol 79 MovieClip Frame 12
piece = "bisshop_b";
stop();
Symbol 79 MovieClip Frame 13
piece = "queen_b";
stop();
Symbol 79 MovieClip Frame 14
piece = "king_b";
stop();