# Sliding tiles puzzle

**URL:** https://forum.kirupa.com/t/sliding-tiles-puzzle/139085
**Category:** Uncategorized
**Created:** [February 28, 2005, 11:11am UTC](https://forum.kirupa.com/t/sliding-tiles-puzzle/139085 "2005-02-28T11:11:44Z")
**Posts on this page:** 1
**Page:** 1

<div class="post-metadata">

### Author: ![vbrown](https://avatars.discourse-cdn.com/v4/letter/v/b9e5f3/32.png) [@vbrown](https://forum.kirupa.com/u/vbrown)
#### Post date: [February 28, 2005, 11:11am UTC](https://forum.kirupa.com/t/sliding-tiles-puzzle/139085/1 "2005-02-28T11:11:44Z")

</div>

I made a sliding tiles puzzle game (based on the example in Gary Rozenweig’s Actionscript for games book.  
It has 15 tiles (54 pixel squares) and works realy well. But I have been asked to make a simpler version with only 8 tiles and I am struggling to adapt the code. I can’t get the pieces in the right place and they don’t behave properly any more!  
I 'd be really grateful for any advice - I can only do simple AS so far, but am trying to get to grips with it. Many thanks for some help.

This is the code:  
function initGame () {  
// set the horizontal and vertical distance  
// between tiles  
tileDist = 54;

```
// set all tiles in exactly the correct spot
for (x=1;x&lt;=4;x++) {
	for (y=0;y&lt;=3;y++) {
		tile = x+y*4;
		_root["tile"+tile]._x = x*tileDist;
		_root["tile"+tile]._y = y*tileDist+tileDist;
	}
}

// make 100 random but valid moves
for(tilenum=0;tilenum&lt;100;tilenum++) {
	do {
		// pick a random tile
		tile = "tile"+(random(15)+1);
		// see whether there is an empty space near it
		emptySpace = findEmpty(tile);
	// keep looping until a tile is found that
	// has an empty space near it
	} while ( emptySpace == "none" );

	// move this tile to the empty space
	moveTile(tile,findEmpty(tile));			
}

```

}

// given a tile, see if the empty space is near it  
function findEmpty (tile) {  
// get location of tile  
tilex = \_root[tile].\_x;  
tiley = \_root[tile].\_y;

```
// see whether there is a tile to the left
if (tilex &gt; tileDist) {
	if (!tileThere(tilex-tileDist, tiley)) {
		return("left");
	}
}

// see whether there is a tile to the right
if (tilex &lt; tileDist*4) {
	if (!tileThere(tilex+tileDist, tiley)) {
		return("right");
	}
}

// see whether there is a tile above
if (tiley &gt; tileDist) {
	if (!tileThere(tilex, tiley-tileDist)) {
		return("above");
	}
}

// see whether there is a tile below
if (tiley &lt; tileDist*4) {
	if (!tileThere(tilex, tiley+tileDist)) {
		return("below");
	}
}

// tiles are in all directions
return("none");

```

}

// check to see whether there is a tile at a certain location  
function tileThere (thisx, thisy) {  
// loop through tiles  
for (i=1;i\<=15;i++) {  
// see if x matches  
if (\_root[“tile”+i].\_x == thisx) {  
// se if y matches  
if (\_root[“tile”+i].\_y == thisy) {  
return true;  
}  
}  
}

```
// no tile there
return false;

```

}

// move a tile in a certain direction  
function moveTile (tile, direction) {  
if (direction == “above”) {  
\_root[tile].\_y -= tileDist;  
} else if (direction == “below”) {  
\_root[tile].\_y += tileDist;  
} else if (direction == “left”) {  
\_root[tile].\_x -= tileDist;  
} else if (direction == “right”) {  
\_root[tile].\_x += tileDist;  
}  
}

// utility function to see on which tile the  
// player clicked  
function tileUnderMouse () {  
for (i=1; i\<=15; i++) {  
if (\_root[“Tile”+i].hitTest(\_xmouse, \_ymouse)) {  
return (i);  
}  
}  
}

initGame();  
stop();
