I am trying to create a movieclip that will be used in other projects. It is actually the 15-puzzle game. I have every thing working except how to execute the movieclip when someone wins the game. Checking for win works so I know when I need to play the clip, I just don't know how. Every thing needs to stay under the Puzzle movieclip. I will attach the code. I am using the "false" win to test so I don't have to play the game everytime I want to test it. I am a 40 year vet of COBOL programming, but VERY new to Flash. What I need to know is: 1) Where to put the win_mc 2) How to call it from the mousedown handler where I test for a win 3) Comments on coding greatly appreciated. I want to learn Flash the right way.
Thanks for any help. Ray
Action Layer of "Puzzle"
Function to initialize a new game.
// Should include:
// tile size
// x Offset
// y Offset
// Reset any counters used to record statistics for any given game.
function initGame()
{
_global.numMoves = 0;
_global.hours = 0;
_global.minutes = 0;
_global.seconds = 0;
var _loc1 = this;
//
// Place tiles on the board in the "solved" state.
//
tileDist = 52; // Tile size
xOffset = -16; // Tile x offset, controls where the left side of the tiles start.
yOffset = 115; // Tile y offset, controls where the top side of the tiles start.
_global.solutionTileName = new Array;
_global.solutionTileX = new Array;
_global.solutionTileY = new Array;
SliderFrame._x = 114;
SliderFrame._y = 245;
//
for (x = 1; x <= 4; x++)
{
for (y = 0; y <= 3; y++)
{
tile = x + y * 4;
_loc1["tile" + tile]._x = xOffset + (x * tileDist);
_loc1["tile" + tile]._y = yOffset + (y * tileDist + tileDist);
//
// Build a solution matrix for the puzzle.
//
_global.solutionTileName[tile] = "Tile" + tile;
_global.solutionTileX[tile] = xOffset + (x * tileDist);
_global.solutionTileY[tile] = yOffset + (y * tileDist + tileDist);
//
} // end of for
} // end of for
//trace(solutionTileName);
//trace(solutionTileX);
//trace(solutionTileY);
//
// Randomize the tiles after placing them on the board.
// NOTE: According to references, about half of the initial random configurations are unsolvable.
// This puzzle is always solvable because the shuffle algorithm starts from the "final"
// image and makes a series of random legal moves.
//
for (tilenum = 0; tilenum < 100; tilenum++)
{
do
{
tile = "tile" + (random(15) + 1);
emptySpace = findEmpty(tile);
} while (emptySpace == "none")
moveTile(tile, findEmpty(tile));
} // end of for
_global.numMoves = 0;
this.txt = numMoves;
} // End of the function
//
//
// Function to find an empty slot adjacent to a given tile.
// Returns :
// "left", "right", "above", "below", or "none"
//
function findEmpty(tile)
{
tilex = this[tile]._x;
tiley = this[tile]._y;
// trace("findEmpty - Tile=" + tile + "(" + tilex + "," + tiley + ")");
// Check for empty slot - LEFT
if (tilex > xOffset + tileDist)
{
if (!tileThere((tilex - tileDist), tiley))
{
//trace("tile not there LEFT - (" + (tilex - tileDist) + "," + tiley + ")");
return ("left");
} // end if
} // end if
// Check for empty slot - RIGHT
if (tilex < (xOffset + (tileDist * 4)))
{
if (!tileThere((tilex + tileDist), tiley))
{
//trace("tile not there RIGHT - (" + (tilex + tileDist) + "," + tiley + ")");
return ("right");
} // end if
} // end if
// Check for empty slot - ABOVE
if (tiley > (yOffset + tileDist))
{
if (!tileThere(tilex, (tiley - tileDist)))
{
//trace("tile not there ABOVE - (" + tilex + "," + (tiley - tileDist) + ")");
return ("above");
} // end if
} // end if
// Check for empty slot - BELOW
if (tiley < (yOffset + (tileDist * 4)))
{
if (!tileThere(tilex, (tiley + tileDist)))
{
//trace("tile not there BELOW - (" + tilex + "," + (tiley + tileDist) + ")");
return ("below");
} // end if
} // end if
return ("none");
} // End of the function
//
// Function to test if there is a tile in a given slot.
// Returns :
// "true" or "false"
//
function tileThere(thisx, thisy)
{
var _loc1 = this;
var _loc2 = thisx;
var _loc3 = thisy;
for (i = 1; i <= 15; i++)
{
if (_loc1["tile" + i]._x == _loc2)
{
if (_loc1["tile" + i]._y == _loc3)
{
return (true);
} // end if
} // end if
} // end of for
return (false);
} // End of the function
//
// Function to move a given tile left, right, up, or down depending on direction passed.
// Returns :
// nothing
//
function moveTile(tile, direction)
{
var _loc1 = tile;
var _loc2 = this;
var _loc3 = direction;
if (_loc3 == "above")
{
_loc2[_loc1]._y = _loc2[_loc1]._y - tileDist;
_global.numMoves = _global.numMoves + 1;
this.txt = numMoves;
return;
} // end if
if (_loc3 == "below")
{
_loc2[_loc1]._y = _loc2[_loc1]._y + tileDist;
_global.numMoves = _global.numMoves + 1;
this.txt = numMoves;
return;
} // end if
if (_loc3 == "left")
{
_loc2[_loc1]._x = _loc2[_loc1]._x - tileDist;
_global.numMoves = _global.numMoves + 1;
this.txt = numMoves;
return;
} // end if
if (_loc3 == "right")
{
_loc2[_loc1]._x = _loc2[_loc1]._x + tileDist;
_global.numMoves = _global.numMoves + 1;
this.txt = numMoves;
} // end if
} // End of the function
//
//
// Function to find which tile is under the mouse when clicked.
// Returns :
// i an integer indicating Tile1, Tile2,...,Tile15
//
function tileUnderMouse()
{
var _loc1 = this;
for (i = 1; i <= 15; i++)
{
if (_loc1["Tile" + i].hitTest(_xmouse, _ymouse))
{
return (i);
} // end if
} // end of for
} // End of the function
function GetElapsedTime()
{
_global.hours;
_global.minutes;
_global.seconds;
_global.elapsedTime;
seconds = seconds + 1;
if (seconds == 60)
{
minutes = minutes + 1;
seconds = 0;
}
if (minutes == 60)
{
hours = hours + 1;
minutes = 0;
}
tSeconds = seconds;
tMinutes = minutes;
tHours = hours;
if (Seconds < 10)
{
tSeconds = "0" + tSeconds;
}
if (Minutes < 10)
{
tMinutes = "0" + tMinutes;
}
if (minutes < 1)
{
tMinutes = "00";
}
if (hours < 10)
{
tHours = "0" + tHours;
}
if (hours < 1)
{
tHours = "00";
}
elapsedTime = tHours + ":" + tMinutes + ":" + tSeconds;
} // End of the function
//
// Function to test if the puzzle is solved.
// Returns :
// "true" or "false"
//
function isWin()
{
var win = 1;
for (i = 1; i <= 15; i++)
{
if (("Tile" + i) != solutionTileName[i])
{
win = 0;
} // end if
if (this["Tile" + i]._x != solutionTileX[i])
{
win = 0;
} // end if
if (this["Tile" + i]._y != solutionTileY[i])
{
win = 0;
} // end if
} // end of for
if (win == 1)
{
return(true);
}
else
{
return(false);
}
} // End of the function
//
// Entry point to movie clip Puzzle_mc
//
_global.solutionTileName = new Array;
_global.solutionTileX = new Array;
_global.solutionTileY = new Array;
_global.numMoves = 0;
_global.hours = 0;
_global.minutes = 0;
_global.seconds = 0;
this.elapsedTime = "00:00:00";
var intervalId;
initGame();
intervalId = setInterval(GetElapsedTime,1000);
stop ();
Layer 16 of "Puzzle"
//
// Action Function to handle the mouse click and move the tile to the appropriate position.
// Returns :
// nothing
//
onClipEvent (mouseDown)
{
//tileClicked = _root.Puzzle_mc.tileUnderMouse();
//emptySpace = _root.Puzzle_mc.findEmpty("tile" + tileClicked);
//_root.Puzzle_mc.moveTile("tile" + tileClicked, emptySpace);
tileClicked = _parent.tileUnderMouse();
emptySpace = _parent.findEmpty("tile" + tileClicked);
_parent.moveTile("tile" + tileClicked, emptySpace);
//if (this.isWin())
if (_parent.isWin())
{
trace(this + "TRUE");
}
else
{
Win_mc.Play(2);
//WinSymbol.gotoAndPlay("WinSymbolL");
//gotoAndPlay("WinSymbolL");
trace(this + "FALSE");
}
}