private void Initialize()
        {
            Canvas = new Sprite();

            //s.bitmapData.setPixel(1, 1, ColorGreen);
            Canvas.scaleX = DefaultZoom;
            Canvas.scaleY = DefaultZoom;

            Canvas.graphics.beginFill(ColorBlack);
            Canvas.graphics.drawRect(0, 0, RoomWidth, RoomHeight);


            Canvas.AttachTo(this);

            // add scull ani here
            // add status text here

            //var Status = new TextField { autoSize = TextFieldAutoSize.LEFT, textColor = 0xffffff }.AttachTo(this);

            Func <Point> GetRandomLocation =
                () => new Point
            {
                x = (RoomWidth - 1).Random(),
                y = (RoomHeight - 1).Random()
            };



            Func <Apple> CreateApple =
                () => new Apple
            {
                GetRandomLocation = GetRandomLocation,
                Wrapper           = Wrapper
            }.MoveToRandomLocation();


            AddApples = delegate
            {
                20.Times(() =>
                         CreateApple().AttachTo(Canvas).AddTo(Apples)
                         );
            };

            AddApples();

            Ego = new Worm
            {
                Wrapper  = Wrapper,
                Location = GetRandomLocation(),
                Canvas   = Canvas,
                Vector   = Worm.VectorRight
                           // Color = game_colors.worm.active
            }
            .AddTo(Worms)
            .Grow();
            //.GrowToVector()
            //.GrowToVector();



            #region keyboard

            MovementWASD = new KeyboardButtonGroup {
                Name = "WASD"
            };
            MovementArrows = new KeyboardButtonGroup {
                Name = "Arrows"
            };

            var GoLeft = new KeyboardButton(stage)
            {
                Groups = new[]
                {
                    MovementWASD[Keyboard.A],
                    MovementArrows[Keyboard.LEFT],
                },
                Up = () => { Ego.Vector = Worm.VectorLeft; },
            }.Up;

            var GoRight = new KeyboardButton(stage)
            {
                Groups = new[]
                {
                    MovementWASD[Keyboard.D],
                    MovementArrows[Keyboard.RIGHT],
                },
                Up = () => { Ego.Vector = Worm.VectorRight; },
            }.Up;

            var GoUp = new KeyboardButton(stage)
            {
                Groups = new[]
                {
                    MovementWASD[Keyboard.W],
                    MovementArrows[Keyboard.UP],
                },
                Up = () => { Ego.Vector = Worm.VectorUp; },
            }.Up;

            var GoDown = new KeyboardButton(stage)
            {
                Groups = new[]
                {
                    MovementWASD[Keyboard.S],
                    MovementArrows[Keyboard.DOWN],
                },
                Up = () => { Ego.Vector = Worm.VectorDown; },
            }.Up;

            #endregion

            Ego.VectorChanged +=
                delegate
            {
                Sounds.flag.ToSoundAsset().play();
            };
            //var info = new TextField
            //{
            //    textColor = 0xffffff,
            //    autoSize = TextFieldAutoSize.LEFT,
            //}.AttachTo(this);

            Action <MouseEvent> Go =

                e =>
            {
                #region Diaww
                var x = e.stageX;
                var y = e.stageY;


                var A = x > y;
                var B = x > (stage.height - y);

                var DiaClipLeft   = !A && !B;
                var DiaClipRight  = A && B;
                var DiaClipTop    = A && !B;
                var DiaClipBottom = !A && B;
                #endregion

                //info.text = new { e.stageX, stage.width, e.stageY }.ToString();

                if (DiaClipLeft)
                {
                    GoLeft();
                }
                else if (DiaClipRight)
                {
                    GoRight();
                }
                else if (DiaClipTop)
                {
                    GoUp();
                }
                else if (DiaClipBottom)
                {
                    GoDown();
                }
            };

            stage.click     += Go;
            stage.mouseMove +=
                e =>
            {
                if (e.buttonDown)
                {
                    Go(e);
                }
            };


            Sounds.reveal.ToSoundAsset().play();

            (1000 / 20).AtInterval(
                t =>
            {
                foreach (var p in Worms)
                {
                    var worm = p;

                    if (Apples.Count > 0)
                    {
                        if (worm.IsAlive)
                        {
                            //Status.text = "";


                            worm.GrowToVector();

                            if (worm.ThisNetworkInstanceCannotEat)
                            {
                                worm.Shrink();
                            }
                            else
                            {
                                // is there a worm smaller than us that we can eat?
                                if (worm.Parts.Count > 1)
                                {
                                    var OtherWorms = Worms.Where(k => k != worm).ToArray();



                                    //Status.appendText("others: " + OtherWorms.Length);

                                    var ToBeEaten = OtherWorms.FirstOrDefault(k => k.Parts.Any(i => i.Location.IsEqual(worm.NextLocation) || i.Location.IsEqual(worm.Location)));

                                    if (ToBeEaten != null)
                                    {
                                        if (ToBeEaten.IsAlive)
                                        {
                                            if (ToBeEaten.Parts.Count < worm.Parts.Count)
                                            {
                                                ToBeEaten.Color = 0x8f8f8f;

                                                worm.EatThisWormSoon(ToBeEaten);
                                            }
                                            else
                                            {
                                                //Status.appendText(" target not smaller");
                                            }
                                        }
                                        else
                                        {
                                            //Status.appendText(" target not alive");
                                        }
                                    }
                                    else
                                    {
                                        //Status.appendText(" noone in range");
                                    }
                                }

                                // did we find an apple?
                                var a = Apples.Where(i => i.Location.IsEqual(worm.Location)).ToArray();

                                if (a.Length > 0)
                                {
                                    foreach (var v in a)
                                    {
                                        v.Control.Orphanize();
                                        Apples.Remove(v);

                                        if (worm.HasEatenAnApple != null)
                                        {
                                            worm.HasEatenAnApple(v);
                                        }
                                    }

                                    Sounds.sound20.ToSoundAsset().play();
                                    // AddScore(1);
                                }
                                else
                                {
                                    worm.Shrink();
                                }
                            }
                        }
                    }
                }
            }
                );
        }
		private void Initialize()
		{
			Canvas = new Sprite();

			//s.bitmapData.setPixel(1, 1, ColorGreen);
			Canvas.scaleX = DefaultZoom;
			Canvas.scaleY = DefaultZoom;

			Canvas.graphics.beginFill(ColorBlack);
			Canvas.graphics.drawRect(0, 0, RoomWidth, RoomHeight);


			Canvas.AttachTo(this);

			// add scull ani here
			// add status text here

			//var Status = new TextField { autoSize = TextFieldAutoSize.LEFT, textColor = 0xffffff }.AttachTo(this);

			Func<Point> GetRandomLocation =
				() => new Point
				{
					x = (RoomWidth - 1).Random(),
					y = (RoomHeight - 1).Random()
				};



			Func<Apple> CreateApple =
				   () => new Apple
				   {
					   GetRandomLocation = GetRandomLocation,
					   Wrapper = Wrapper
				   }.MoveToRandomLocation();


			AddApples = delegate
			{
				20.Times(() =>
					CreateApple().AttachTo(Canvas).AddTo(Apples)
				);
			};

			AddApples();

			Ego = new Worm
			{
				Wrapper = Wrapper,
				Location = GetRandomLocation(),
				Canvas = Canvas,
				Vector = Worm.VectorRight
				// Color = game_colors.worm.active
			}
			.AddTo(Worms)
			 .Grow();
			//.GrowToVector()
			//.GrowToVector();



			#region keyboard

			MovementWASD = new KeyboardButtonGroup { Name = "WASD" };
			MovementArrows = new KeyboardButtonGroup { Name = "Arrows" };

			var GoLeft = new KeyboardButton(stage)
			{
				Groups = new[]
                {
                    MovementWASD[Keyboard.A],
                    MovementArrows[Keyboard.LEFT],
                },
				Up = () => { Ego.Vector = Worm.VectorLeft; },
			}.Up;

			var GoRight = new KeyboardButton(stage)
			{
				Groups = new[]
                {
                    MovementWASD[Keyboard.D],
                    MovementArrows[Keyboard.RIGHT],
                },
				Up = () => { Ego.Vector = Worm.VectorRight; },
			}.Up;

			var GoUp = new KeyboardButton(stage)
			{
				Groups = new[]
                {
                    MovementWASD[Keyboard.W],
                    MovementArrows[Keyboard.UP],
                },
				Up = () => { Ego.Vector = Worm.VectorUp; },
			}.Up;

			var GoDown = new KeyboardButton(stage)
			{
				Groups = new[]
                {
                    MovementWASD[Keyboard.S],
                    MovementArrows[Keyboard.DOWN],
                },
				Up = () => { Ego.Vector = Worm.VectorDown; },

			}.Up;

			#endregion

			Ego.VectorChanged +=
				delegate
				{
					Sounds.flag.ToSoundAsset().play();
				};
			//var info = new TextField
			//{
			//    textColor = 0xffffff,
			//    autoSize = TextFieldAutoSize.LEFT,
			//}.AttachTo(this);

			Action<MouseEvent> Go =

				e =>
				{
					#region Diaww
					var x = e.stageX;
					var y = e.stageY;


					var A = x > y;
					var B = x > (stage.height - y);

					var DiaClipLeft = !A && !B;
					var DiaClipRight = A && B;
					var DiaClipTop = A && !B;
					var DiaClipBottom = !A && B;
					#endregion

					//info.text = new { e.stageX, stage.width, e.stageY }.ToString();

					if (DiaClipLeft) GoLeft();
					else if (DiaClipRight) GoRight();
					else if (DiaClipTop) GoUp();
					else if (DiaClipBottom) GoDown();
				};

			stage.click += Go;
			stage.mouseMove +=
				e =>
				{
					if (e.buttonDown) Go(e);
				};


			Sounds.reveal.ToSoundAsset().play();

			(1000 / 20).AtInterval(
			   t =>
			   {
				   foreach (var p in Worms)
				   {
					   var worm = p;

					   if (Apples.Count > 0)
						   if (worm.IsAlive)
						   {

							   //Status.text = "";


							   worm.GrowToVector();

							   if (worm.ThisNetworkInstanceCannotEat)
							   {
								   worm.Shrink();
							   }
							   else
							   {
								   // is there a worm smaller than us that we can eat?
								   if (worm.Parts.Count > 1)
								   {
									   var OtherWorms = Worms.Where(k => k != worm).ToArray();



									   //Status.appendText("others: " + OtherWorms.Length);

									   var ToBeEaten = OtherWorms.FirstOrDefault(k => k.Parts.Any(i => i.Location.IsEqual(worm.NextLocation) || i.Location.IsEqual(worm.Location)));

									   if (ToBeEaten != null)
									   {


										   if (ToBeEaten.IsAlive)
										   {
											   if (ToBeEaten.Parts.Count < worm.Parts.Count)
											   {
												   ToBeEaten.Color = 0x8f8f8f;

												   worm.EatThisWormSoon(ToBeEaten);
											   }
											   else
											   {
												   //Status.appendText(" target not smaller");
											   }
										   }
										   else
										   {
											   //Status.appendText(" target not alive");
										   }


									   }
									   else
									   {
										   //Status.appendText(" noone in range");
									   }
								   }

								   // did we find an apple?
								   var a = Apples.Where(i => i.Location.IsEqual(worm.Location)).ToArray();

								   if (a.Length > 0)
								   {
									   foreach (var v in a)
									   {
										   v.Control.Orphanize();
										   Apples.Remove(v);

										   if (worm.HasEatenAnApple != null)
											   worm.HasEatenAnApple(v);
									   }

									   Sounds.sound20.ToSoundAsset().play();
									   // AddScore(1);
								   }
								   else
								   {
									   worm.Shrink();
								   }
							   }
						   }
				   }



			   }
			);
		}