Hit Detection in array

Hi guys im making a snake game and have created the basics. IE i have a snake but instead of it eating food it grows via the use of a timer (so every so often it gets bigger) now im onto hit detection now the snake is in an array but i was just wondering how i would code it so that when the snakes head hits the body it traces a hit or does something? ive been looking for hours on google for help with no such luck. Any would be appreciated :slight_smile:

below is the code, it mainly happens in the move function but the snake is created through the use of sprites

package {
	
	import flash.display.Sprite;
	import flash.events.KeyboardEvent;
	import flash.events.TimerEvent;
	import flash.ui.Keyboard;
	import flash.utils.Timer;
	import flash.display.MovieClip;
	import flash.utils.getTimer;
	import flash.text.TextField;
	[SWF(width='430', height='430', frameRate='30')]
	public class Snake extends MovieClip{
		
		private const SPEED			:uint = 25;//lower = faster
		private const snakeAttach	:uint = 400;//lower = faster
		private const count:         uint = 10;
		private const DIM			:int = 50; //keep this number uneven to have the snake starting in the middle
		private const INITIAL_SIZE	:int = 3; //keep this lower then DIM/2
		
		private var stopped			:Boolean;
		private var left			:Boolean;
		private var right			:Boolean;
		private var up				:Boolean;
		private var down			:Boolean;
		private var size			:Number;
		private var food			:Sprite;
		private var tmr				:Timer;
		private var count1          :Timer;
		private var addSnake		:Timer;
		private var curI			:Number;
		private var curJ			:Number;
		private var snake			:Array;
		private var grid			:Array;
		private var sp               :Sprite;
		
		private var _start:uint;
		public var myTextBox:TextField = new TextField();
		
		
		public function Snake(){
			size = stage.stageWidth / DIM; //change grid size
			curI = curJ = Math.floor(DIM * 0.5); //change grid size

			initSnake();
			fillGrid();
			addTimer();
			addChild(myTextBox);
			
			count1 = new Timer(count);
			count1.addEventListener(TimerEvent.TIMER,stopWatch);
			count1.start();
			
			addSnake = new Timer(snakeAttach);
			addSnake.addEventListener(TimerEvent.TIMER,placeFood);
			addSnake.start();
			
			tmr = new Timer(SPEED);
			tmr.addEventListener(TimerEvent.TIMER,move);
			tmr.start();
			
			stage.addEventListener(KeyboardEvent.KEY_DOWN,changeDir);
		}
		
		private function stopWatch(event:TimerEvent):void{
			 
			myTextBox.text = (count1.currentCount / 100).toString();
			
		}
		public function addTimer():void{ //timer
		var myTextBox:TextField = new TextField();
			addChild(myTextBox);
		}
		private function fillGrid():void{  //grid
			
			grid = Make2DArray();
			
			for (var i:uint = 0; i < DIM; i++){
				for (var j:uint = 0; j < DIM; j++){
					var sp:Sprite = new Sprite();
					sp.graphics.beginFill(0xF0F0F0);
					sp.graphics.lineStyle(1,0xF5F5F5);
					sp.graphics.drawRect(0, 0, size  - 1, size - 1);
					sp.x = i * size;
					sp.y = j * size;
					addChild(sp);
					grid*[j] = sp;
				}
			}	
		}
		
		private function Make2DArray():Array{   //for the grid
			var a:Array = new Array(DIM);
			for(var i:uint = 0; i < a.length; i++){
			    a* = new Array(DIM);
			}	
			return a;
		}
		
		
			
	
		
		private function initSnake():void{ //initialises the snake
			var center:Number = Math.floor(DIM * 0.5) * size;
			
			snake = new Array(INITIAL_SIZE);
			
			for (var i:uint = 0; i < INITIAL_SIZE; i++){
				var sp:Sprite = makeItem();      //adds a body part of makeItem 
				sp.x = center;
				sp.y = center + i * size;
				addChild(sp); //adds to the stage
				snake* = sp;  //sets the index to one
			}
			
			snake.reverse();
		}
		
		private function makeItem(c:uint = 0):Sprite{  //graphics for item
			var s:Sprite = new Sprite(); 
			s.graphics.beginFill(c);
			s.graphics.lineStyle(2,0x333333);
			s.graphics.drawRect(0, 0, size, size);
			return s;
		}
		
		private function placeFood(event:TimerEvent):void{   
			var rndI:uint = Math.floor(Math.random() * DIM);  //sets a random integer based on the the floor
			var rndJ:uint = Math.floor(Math.random() * DIM);
			
			var rndX:Number = grid[rndI][rndJ].x; // sets a grid position for the food item to go
			var rndY:Number = grid[rndI][rndJ].y;
			
			if (food != null) removeChild(food);  //if there is food on the grid removes the food from the board 
			
			food = makeItem(Math.random() * 0xFFFFFF);// random color
			food.x = rndX;
			food.y = rndY;
			
			addChild(food); //adds the food to the board
			
			for (var i:uint = 0; i < snake.length; i++){
				if (rndY == snake*.y && rndX == snake*.x){ 
					
				}
			} 
		}
		
		private function move(e:TimerEvent):void{
			if (left){
				curI -= 1;
				
			}else if (right){
				curI += 1;
				
			}
			if (up){
				curJ -= 1;
				
			}else if (down){
				curJ += 1;
				
			}
			
			if (left || right || up || down){
				var s:Sprite = makeItem();
				
				if (curI > DIM - 1) curI = 0;
				if (curJ > DIM - 1) curJ = 0;
				
				if (curI < 0) curI = DIM - 1;
				if (curJ < 0) curJ = DIM - 1;
				
				s.x = grid[curI][curJ].x;
				s.y = grid[curI][curJ].y;
				
				addChild(s);
				snake.push(s);
				
				
				 if (Math.floor(s.x) == Math.floor(food.x) && Math.floor(s.y) == Math.floor(food.y) ){ 
				 } 
				 else if((tmr.currentCount % 3) > 0) { removeChild(snake[0]); snake.shift(); }
			}
			
		}
		
		private function changeDir(e:KeyboardEvent):void{
			if(e.keyCode == Keyboard.LEFT)	{if (!right){left = true;  up = false; down = false; right = false;}}
			if(e.keyCode == Keyboard.UP)	{if (!down)	{left = false; up = true;  down = false; right = false;}}
			if(e.keyCode == Keyboard.RIGHT)	{if (!left)	{left = false; up = false; down = false; right = true;}}
			if(e.keyCode == Keyboard.DOWN)	{if (!up)	{left = false; up = false; down = true;  right = false;}}
		}
	}
}