public async void Play()
        {
            this.State = GameState.InProgress;
            this.Units = new List <Character>();
            bool notifiedEnding = false;

            while (this.State != GameState.Delete)
            {
                GameController.UpdateUnitsFor(this.Id, this.Units);
                List <Player> playerData = new List <Player>()
                {
                    this.Player1,
                    this.Player2
                };
                GameController.UpdatePlayersFor(this.Id, playerData);

                if (this.State == GameState.InProgress)
                {
                    this.Player1.GetMoney();
                    this.Player2.GetMoney();
                }

                for (var i = 0; i < this.Units.Count; i++)
                {
                    var unit = this.Units[i];
                    if (unit.Dead)
                    {
                        if (unit.Side == 1)
                        {
                            Player1.AddStats(unit);
                        }
                        else
                        {
                            Player2.AddStats(unit);
                        }
                        this.Units.Remove(unit);
                    }
                    if (unit.X < -100 || unit.X > 1600)
                    {
                        this.Units.Remove(unit);
                    }
                }
                for (var i = 0; i < this.Units.Count; i++)
                {
                    this.Units[i].Update();
                }
                if (this.Units.Count > 0)
                {
                    this.CheckForCollisions();
                }

                if (this.State >= GameState.Ended)
                {
                    if (!notifiedEnding)
                    {
                        if (this.Player1.Castle.Dead)
                        {
                            GameController.EndGame(this.Id, 2);
                        }
                        else
                        {
                            GameController.EndGame(this.Id, 1);
                        }

                        for (var i = 0; i < this.Units.Count; i++)
                        {
                            this.Units[i].Damage = 0;
                        }

                        notifiedEnding = true;
                    }
                }
                this.Shop.Refresh();
                this.Tick++;
                if (!this.Multiplayer)
                {
                    this.CheckComputerUnit();
                    this.CheckComputerIntervals();
                }
                await Task.Delay(100);
            }
        }