Пример #1
0
        /// <summary>
        /// 当玩家退出游戏时,调用此方法
        /// </summary>
        /// <param name="player">退出游戏的玩家</param>
        public override void OnPlayerQuitted(GamePlayerBase player)
        {
            lock ( SyncRoot )
            {
                if (GameState == GameState.NotInitialized)
                {
                    throw new InvalidOperationException();
                }


                if (!PlayerCollection.Contains(player))   //如果不存在这个玩家,则忽略。
                {
                    return;
                }


                AnnounceSystemMessage("玩家 {0} 退出了游戏", player.PlayerName);
                PlayerCollection.Remove(player);

                lock ( SyncRoot )
                {
                    if (!Players.Any())                   //若已经没有玩家了,释放游戏资源
                    {
                        ReleaseGame();
                    }

                    if (GameState == GameState.Running)   //如果游戏正在进行,则强行终止游戏。
                    {
                        Abort();
                    }
                }
            }
        }