# Matching Neighbours

**URL:** <https://forum.kirupa.com/t/matching-neighbours/192352>\
**Category:** open source\
**Created:** [June 28, 2006, 1:04am UTC](https://forum.kirupa.com/t/matching-neighbours/192352 "2006-06-28T01:04:53Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![icio](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/icio/32/484_2.png) [@icio](https://forum.kirupa.com/u/icio)\
**Post date:** [June 28, 2006, 1:04am UTC](https://forum.kirupa.com/t/matching-neighbours/192352/1 "2006-06-28T01:04:53Z")

</div>

I was thinking about this whilst playing Zoo Keeper in the arcade. Here’s what I came up with:

(Mouse-over the tiles to see their matching neighbours)

```auto
Stage.scaleMode = "noScale";

var base:Array = [];
var selectors:Array = [];

var output:String = "<i>Click to regenerate</i>";

function buildBase() {
	for (y=0; y<15; y++) {
		base[y] = [];
		for (x=0; x<15; x++) {
			tile = _root.attachMovie("tile", "tile_"+x+"_"+y, _root.getNextHighestDepth());
	
			tile.x = x;
			tile.y = y;
			tile._x = x*tile._width;
			tile._y = y*tile._height;
			tile.gotoAndStop(Math.ceil(Math.random()*tile._totalframes));
			
			tile.onRollOut = function() {
				output = "<i>Click to regenerate</i>";
			}
			
			tile.onRollOver = function() {
				clearSelectors();
				testAdjacents(this);
			}
			
			base[y][x] = tile;
		}
	}
}

function clearBase() {
	for (y in base) for (x in base[y]) base[y][x].removeMovieClip();
}

function clearSelectors() {
	for(i in selectors) selectors*.removeMovieClip();
}

function testAdjacents(start:MovieClip) {
	
	var l:Number = start.x;
	var r:Number = start.x;
	while (base[start.y][l-1]._currentframe == start._currentframe) l--;
	while (base[start.y][r+1]._currentframe == start._currentframe) r++;
	
	var t:Number = start.y;
	var b:Number = start.y;
	while (base[t-1][start.x]._currentframe == start._currentframe) t--;
	while (base[b+1][start.x]._currentframe == start._currentframe) b++;
	
	// EyeCandy
	output = "<i>Click to regenerate</i>
Width: <b>"+Number(r-l+1)+"</b>	From: <b>"+Number(l+1)+"</b>
Height: <b>"+Number(b-t+1)+"</b>	From: <b>"+Number(t+1)+"</b>";
	for (x=l; x<=r; x++) selectors.push(_root.attachMovie("selector", "selector"+x+"_"+start.y, _root.getNextHighestDepth(), {_x:x*20,_y:start.y*20}));
	for (y=t; y<=b; y++) selectors.push(_root.attachMovie("selector", "selector"+start.x+"_"+y, _root.getNextHighestDepth(), {_x:start.x*20,_y:y*20}));
		 
}

_root.onMouseDown = function() {
	clearBase();
	clearSelectors();
	buildBase();
	
	output = "<i>Click to regenerate</i>";
}

buildBase();

```
