Having implemented the 15-game in Java, I thought I would attempt the same with Flash + AS3. And the same was done swiftly and I have presented the output and the code here. This is the same as the applet version, you will have to use your arrow keys to play.
The Layout grid file which I wrote
on my own to simulate an
exact Grid Layout similar to the one in Java.
USEFUL LINKS
1.www.tricksnew.blogspot.com
2.www.freeminiproject.blogspot.com
3.www.freeplacementpaper.blogspot.com
4.www.annaunivquestionbanks.blogspot.com
package{
//----
//IMPORT
//
import flash.display.*;
import flash.events.*;
import flash.text.*;
import flash.ui.Keyboard;
import flash.media.Sound;
import flash.system.System;
//Class creation
public class Main extends MovieClip {
private var SIZE:int;
private var panelSize:int = 400;
private var panelArray:Array = new Array(SIZE, SIZE);
private var parentStage:Stage;
private var baseClip:MovieClip;
private var music:Sound = new BubbleSound();
public function Main(stage, bClip, difficulty):void {
SIZE = difficulty;
parentStage = stage;
baseClip = bClip;
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressed);
layout_in_grid();
for(var i:int=0;i<SIZE*100;i++){//RANDOMIZE MOVES
handleKeyPress(Math.floor(Math.random()*4) + 37);
}
}
private function layout_in_grid():void{
addChild(getGamePanel(SIZE));
}
private function keyPressed(e:KeyboardEvent):void{
handleKeyPress(e.keyCode);
music.play();
if(areThingsInPlace()){
baseClip.gotoAndStop(3,"Scene 1");
stage.removeEventListener(KeyboardEvent.KEY_DOWN, keyPressed);
this.parent.removeChild(this);
var victory:Sound = new VictorySound();
victory.play();
return;
}
}
private function handleKeyPress(keyCode:int):void{
var emptyIndex:int = findEmptyIndex();
var x:int = emptyIndex/SIZE;
var y:int = emptyIndex%SIZE;
switch (keyCode) {
case Keyboard.LEFT://LEFT KEY
if(y==SIZE-1) return;
doSwap(x,y,x,y+1);
break;
case Keyboard.UP://UP KEY
if(x==SIZE-1) return;
doSwap(x,y,x+1,y);
break;
case Keyboard.RIGHT://RIGHT KEY
if(y==0) return;
doSwap(x,y,x,y-1);
break;
case Keyboard.DOWN://DOWN KEY
if(x==0) return;
doSwap(x,y,x-1,y);
break;
}
}
private function findEmptyIndex():int {
for(var i:int=0;i<SIZE;i++){
for (var j:int=0;j<SIZE;j++){
if(panelArray[i][j].num_txt.text == '0'){
return i*SIZE + j;
}
}
}
return 0;
}
private function doSwap(x:int, y:int, x1:int, y1:int):void{
var temp:int;
temp = panelArray[x][y].num_txt;
panelArray[x][y].num_txt.text = panelArray[x1][y1].num_txt.text;
panelArray[x1][y1].num_txt.text = temp;
if(panelArray[x][y].num_txt.text == '0'){
panelArray[x][y].alpha = 0;
panelArray[x1][y1].alpha = 1;
}else{
panelArray[x][y].alpha = 1;
panelArray[x1][y1].alpha = 0;
}
}
private function getGamePanel(difficulty:int):MovieClip {
var gridLayout:GridLayout = new GridLayout(SIZE, panelSize);
var componentsList:Array = getRandomizedList(difficulty);
var index:int = 0;
for(var i:int=0;i<difficulty;i++){
panelArray[i] = new Array(difficulty);
for(var j:int=0;j<difficulty;j++){
panelArray[i][j] = componentsList[index++];
gridLayout.add(panelArray[i][j]);
}
}
gridLayout.x = (parentStage.stageWidth / 2) - (gridLayout.width / 2);
gridLayout.y = (parentStage.stageHeight / 2) - (gridLayout.height / 2);
return gridLayout;
}
private function areThingsInPlace():Boolean{
for(var i:int=0;i<SIZE*SIZE-1;i++){
if(Number(panelArray[Math.floor(i/SIZE)][i%SIZE].num_txt.text) != (i+1)){
return false;
}
}
return true;
}
private function getRandomizedList(difficulty:int):Array {
var componentSet:Array = new Array(SIZE*SIZE);
for(var i:int=0;i<difficulty*difficulty-1;i++){
var square:SquareClip = new SquareClip();
square.num_txt.text = (i+1).toString(10);
componentSet[i] = square;
}
var emptyClip:SquareClip = new SquareClip();
emptyClip.num_txt.text = (0).toString(10);
componentSet[i] = emptyClip;
return componentSet;
}
}
}
on my own to simulate an
exact Grid Layout similar to the one in Java.
package{
//----
//IMPORT
//
import flash.display.*;
import flash.events.*;
import flash.text.*;
//Class creation
public class GridLayout extends MovieClip{
private var _size:int;
private var _size_of_grid:int;
private var _gap:int;
private var _itemCount:int;
private var _totalFilled:int;
public function GridLayout(size, size_of_grid):void {
_size = size;
_size_of_grid = size_of_grid;
_totalFilled = 0;
}
public function add(object):int{
if(_totalFilled == (_size*_size )){
trace("GRID IS FULL");
return 0;
}
object.x = ( (_totalFilled % _size) ) * (_size_of_grid/_size) ;
object.y = Math.floor(_totalFilled / _size) * (_size_of_grid/_size) ;
_totalFilled++;
addChild(object);
return 1;
}
}
}
USEFUL LINKS
1.www.tricksnew.blogspot.com
2.www.freeminiproject.blogspot.com
3.www.freeplacementpaper.blogspot.com
4.www.annaunivquestionbanks.blogspot.com
USEFUL LINKS
1.www.tricksnew.blogspot.com
2.www.freeminiproject.blogspot.com
3.www.freeplacementpaper.blogspot.com
4.www.annaunivquestionbanks.blogspot.com