Frame 1
stop();
_parent.titlePageShown();
Frame 2
stop();
_parent.instructionsPageShown();
Frame 3
function initialize() {
var i;
var j;
var ballsPerType = ((dimensionX * dimensionY) / ballTypes);
var ballTypeArray = new Array();
i = 0;
while (i < ballTypes) {
j = 0;
while (j < ballsPerType) {
ballTypeArray[ballTypeArray.length] = i;
j++;
}
i++;
}
shuffleArray(ballTypeArray);
i = 0;
while (i < (dimensionX * dimensionY)) {
ballsHolder.attachMovie("ball" + ballTypeArray[i], "ball" + i, i);
balls[i] = eval ("ballsHolder.ball" + i);
balls[i]._x = (i % dimensionX) * blockSize;
balls[i]._y = Math.floor(i / dimensionX) * blockSize;
balls[i].x = i % dimensionX;
balls[i].y = Math.floor(i / dimensionX);
balls[i].type = ballTypeArray[i];
i++;
}
beginTime = getTimer();
}
function shuffleArray(array) {
var i;
var j;
var temp;
i = 0;
while (i < array.length) {
j = Math.floor(Math.random() * array.length);
temp = array[i];
array[i] = array[j];
array[j] = temp;
i++;
}
}
function updateTime() {
if (!gameStarted) {
return(undefined);
}
time = getTimer() - beginTime;
}
function chooseBall(ball) {
var line;
if (!chosenBall) {
chosenBall = ball;
ball.gotoAndStop("chosen");
} else if ((line = getLine(chosenBall, ball))) {
chosenBall.gotoAndStop("disappear");
ball.gotoAndStop("disappear");
drawLine(line, chosenBall, ball);
chosenBall = null;
soundMatch.start();
} else {
chosenBall.gotoAndStop("normal");
chosenBall = ball;
ball.gotoAndStop("chosen");
}
soundClick.start();
}
function unchooseBall(ball) {
ball.gotoAndStop("normal");
chosenBall = null;
soundClick.start();
}
function getLine(ball1, ball2) {
var i;
var small;
var large;
var maxShift;
if (!ball1) {
return(null);
}
if (!ball2) {
return(null);
}
if (ball1.type != ball2.type) {
return(null);
}
if (ball1.x != ball2.x) {
if (ball1.y < ball2.y) {
small = ball1.y;
large = ball2.y;
} else {
small = ball2.y;
large = ball1.y;
}
i = small;
while (i <= large) {
if (!canConnect(ball1.x, ball1.y, ball1.x, i, ball2.x, i, ball2.x, ball2.y)) {
} else {
return(new Array(ball1.x, ball1.y, ball1.x, i, ball2.x, i, ball2.x, ball2.y));
}
i++;
}
maxShift = (((dimensionY - large) > (small + 1)) ? (dimensionY - large) : (small + 1));
i = 1;
while (i <= maxShift) {
if (canConnect(ball1.x, ball1.y, ball1.x, small - i, ball2.x, small - i, ball2.x, ball2.y)) {
return(new Array(ball1.x, ball1.y, ball1.x, small - i, ball2.x, small - i, ball2.x, ball2.y));
}
if (canConnect(ball1.x, ball1.y, ball1.x, large + i, ball2.x, large + i, ball2.x, ball2.y)) {
return(new Array(ball1.x, ball1.y, ball1.x, large + i, ball2.x, large + i, ball2.x, ball2.y));
}
i++;
}
}
if (ball1.y != ball2.y) {
if (ball1.x < ball2.x) {
small = ball1.x;
large = ball2.x;
} else {
small = ball2.x;
large = ball1.x;
}
i = small;
while (i <= large) {
if (!canConnect(ball1.x, ball1.y, i, ball1.y, i, ball2.y, ball2.x, ball2.y)) {
} else {
return(new Array(ball1.x, ball1.y, i, ball1.y, i, ball2.y, ball2.x, ball2.y));
}
i++;
}
maxShift = (((dimensionY - large) > (small + 1)) ? (dimensionX - large) : (small + 1));
i = 1;
while (i <= maxShift) {
if (canConnect(ball1.x, ball1.y, small - i, ball1.y, small - i, ball2.y, ball2.x, ball2.y)) {
return(new Array(ball1.x, ball1.y, small - i, ball1.y, small - i, ball2.y, ball2.x, ball2.y));
}
if (canConnect(ball1.x, ball1.y, large + i, ball1.y, large + i, ball2.y, ball2.x, ball2.y)) {
return(new Array(ball1.x, ball1.y, large + i, ball1.y, large + i, ball2.y, ball2.x, ball2.y));
}
i++;
}
}
return(null);
}
function canConnect(x1, y1, x2, y2, x3, y3, x4, y4) {
if ((x1 != x2) || (y1 != y2)) {
if ((((x2 >= 0) && (x2 < dimensionX)) && (y2 >= 0)) && (y2 < dimensionY)) {
if (balls[(y2 * dimensionX) + x2]) {
return(false);
}
}
}
if ((x3 != x4) || (y3 != y4)) {
if ((((x3 >= 0) && (x3 < dimensionX)) && (y3 >= 0)) && (y3 < dimensionY)) {
if (balls[(y3 * dimensionX) + x3]) {
return(false);
}
}
}
if (!canConnectStraight(x1, y1, x2, y2)) {
return(false);
}
if (!canConnectStraight(x2, y2, x3, y3)) {
return(false);
}
if (!canConnectStraight(x3, y3, x4, y4)) {
return(false);
}
return(true);
}
function canConnectStraight(x1, y1, x2, y2) {
var i;
var begin;
var end;
if (x1 != x2) {
if ((y1 < 0) || (y1 >= dimensionY)) {
return(true);
}
begin = ((x1 < x2) ? (x1 + 1) : (x2 + 1));
end = ((x1 < x2) ? (x2 - 1) : (x1 - 1));
i = begin;
while (i <= end) {
if (balls[(y1 * dimensionX) + i]) {
return(false);
}
i++;
}
} else {
if ((x1 < 0) || (x1 >= dimensionX)) {
return(true);
}
begin = ((y1 < y2) ? (y1 + 1) : (y2 + 1));
end = ((y1 < y2) ? (y2 - 1) : (y1 - 1));
i = begin;
while (i <= end) {
if (balls[(i * dimensionX) + x1]) {
return(false);
}
i++;
}
}
return(true);
}
function drawLine(line, ball1, ball2) {
var i;
var noOfLines = ((line.length / 2) - 1);
var xs = new Array();
var ys = new Array();
var theLine;
if (!line) {
return(undefined);
}
i = 0;
while (i <= noOfLines) {
xs[i] = line[i * 2];
ys[i] = line[(i * 2) + 1];
i++;
}
i = 0;
while (i < noOfLines) {
linesHolder.attachMovie("line", "line" + totalLines, totalLines);
theLine = eval ("linesHolder.line" + totalLines);
theLine._x = xs[i] * blockSize;
theLine._y = ys[i] * blockSize;
if (xs[i] != xs[i + 1]) {
theLine._width = Math.abs((xs[i + 1] - xs[i]) * blockSize);
if (xs[i + 1] < xs[i]) {
theLine._xscale = -theLine._xscale;
}
} else {
theLine._width = Math.abs((ys[i + 1] - ys[i]) * blockSize);
if (ys[i + 1] < ys[i]) {
theLine._xscale = -theLine._xscale;
}
theLine._rotation = 90;
}
if (i == 0) {
theLine.ball1 = ball1;
}
if (i == (noOfLines - 1)) {
theLine.ball2 = ball2;
}
totalLines++;
i++;
}
}
function removeBall(ball) {
if (!ball) {
return(undefined);
}
balls[(ball.y * dimensionX) + ball.x] = null;
ball.removeMovieClip();
checkWin();
}
function checkWin() {
var i;
i = 0;
while (i < (dimensionX * dimensionY)) {
if (balls[i]) {
return(undefined);
}
i++;
}
gameOver();
}
function gameOver() {
gameStarted = false;
score = baseScore - time;
soundWin.start();
playAgainDialog.gotoAndStop(2);
_parent.showEnter(score);
}
var dimensionX = 10;
var dimensionY = 10;
var blockSize = 30;
var ballTypes = 10;
var disappearFrames = 5;
var baseScore = 100000;
var balls = new Array();
var chosenBall = null;
var totalLines = 0;
var gameStarted = true;
var beginTime = 0;
var time = 0;
var score = 0;
var soundClick = new Sound(this);
var soundMatch = new Sound(this);
var soundWin = new Sound(this);
soundClick.attachSound("clickSound");
soundMatch.attachSound("matchSound");
soundWin.attachSound("winSound");
stop();
_parent.gamePageShown();
initialize();
Instance of Symbol 27 MovieClip in Frame 3
onClipEvent (enterFrame) {
_parent.updateTime();
}
Symbol 6 Button
on (press) {
_parent._parent.chooseBall(this);
}
Symbol 7 Button
on (press) {
_parent._parent.unchooseBall(this);
}
Symbol 8 MovieClip [ball1] Frame 1
var type;
var x;
var y;
stop();
Symbol 8 MovieClip [ball1] Frame 8
stop();
Symbol 8 MovieClip [ball1] Frame 15
stop();
Symbol 10 MovieClip [ball2] Frame 1
var type;
var x;
var y;
stop();
Symbol 10 MovieClip [ball2] Frame 8
stop();
Symbol 10 MovieClip [ball2] Frame 15
stop();
Symbol 12 MovieClip [ball3] Frame 1
var type;
var x;
var y;
stop();
Symbol 12 MovieClip [ball3] Frame 8
stop();
Symbol 12 MovieClip [ball3] Frame 15
stop();
Symbol 14 MovieClip [ball4] Frame 1
var type;
var x;
var y;
stop();
Symbol 14 MovieClip [ball4] Frame 8
stop();
Symbol 14 MovieClip [ball4] Frame 15
stop();
Symbol 16 MovieClip [ball5] Frame 1
var type;
var x;
var y;
stop();
Symbol 16 MovieClip [ball5] Frame 8
stop();
Symbol 16 MovieClip [ball5] Frame 15
stop();
Symbol 18 MovieClip [ball6] Frame 1
var type;
var x;
var y;
stop();
Symbol 18 MovieClip [ball6] Frame 8
stop();
Symbol 18 MovieClip [ball6] Frame 15
stop();
Symbol 20 MovieClip [ball7] Frame 1
var type;
var x;
var y;
stop();
Symbol 20 MovieClip [ball7] Frame 8
stop();
Symbol 20 MovieClip [ball7] Frame 15
stop();
Symbol 22 MovieClip [ball8] Frame 1
var type;
var x;
var y;
stop();
Symbol 22 MovieClip [ball8] Frame 8
stop();
Symbol 22 MovieClip [ball8] Frame 15
stop();
Symbol 24 MovieClip [ball9] Frame 1
var type;
var x;
var y;
stop();
Symbol 24 MovieClip [ball9] Frame 8
stop();
Symbol 24 MovieClip [ball9] Frame 15
stop();
Symbol 26 MovieClip [ball0] Frame 1
var type;
var x;
var y;
stop();
Symbol 26 MovieClip [ball0] Frame 8
stop();
Symbol 26 MovieClip [ball0] Frame 15
stop();
Symbol 28 MovieClip [line] Frame 1
function disappear() {
count++;
if (count >= _parent._parent.disappearFrames) {
_parent._parent.removeBall(ball1);
_parent._parent.removeBall(ball2);
this.removeMovieClip();
return(undefined);
}
this._alpha = ((_parent._parent.disappearFrames - count) / _parent._parent.disappearFrames) * 100;
ball1._alpha = ((_parent._parent.disappearFrames - count) / _parent._parent.disappearFrames) * 100;
ball2._alpha = ((_parent._parent.disappearFrames - count) / _parent._parent.disappearFrames) * 100;
}
var ball1;
var ball2;
var count = -1;
Instance of Symbol 27 MovieClip in Symbol 28 MovieClip [line] Frame 1
onClipEvent (enterFrame) {
_parent.disappear();
}
Symbol 39 Button
on (release) {
nextFrame();
}
Symbol 44 Button
on (release) {
_parent.showHighscores();
}
Symbol 61 Button
on (release) {
_parent.gotoAndStop(1);
}
Symbol 62 MovieClip Frame 1
stop();
Symbol 62 MovieClip Frame 2
stop();