当前位置: 首页>>代码示例>>C#>>正文


C# IClient.OnGameLeft方法代码示例

本文整理汇总了C#中IClient.OnGameLeft方法的典型用法代码示例。如果您正苦于以下问题:C# IClient.OnGameLeft方法的具体用法?C# IClient.OnGameLeft怎么用?C# IClient.OnGameLeft使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在IClient的用法示例。


在下文中一共展示了IClient.OnGameLeft方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: Leave

        public bool Leave(IClient client)
        {
            if (client == null)
                throw new ArgumentNullException("client");

            if (client.Game != this)
            {
                Log.Default.WriteLine(LogLevels.Warning, "Cannot leave, {0} is not in game {1}", client.Name, Name);
                return false;
            }
            //
            bool removed = _clients.Remove(client);
            if (!removed)
                return false;

            // Clear vote kick target and timer
            if (_voteKickTarget == client)
            {
                _voteKickTarget = null;
                _voteKickTimer.Change(Timeout.Infinite, Timeout.Infinite);
            }

            // Save play state
            bool wasPlaying = client.State == ClientStates.Playing;

            // Change role, state and game
            client.Roles &= ~(ClientRoles.Player | ClientRoles.Spectator | ClientRoles.GameMaster); // remove Player+Spectator+GameMaster
            client.State = ClientStates.Connected;
            client.Game = null;
            client.LastVoteKickAnswer = null;

            // Search new game master
            bool gameMasterModified = false;
            IClient newMaster = Players.FirstOrDefault();
            if (newMaster != null && !newMaster.IsGameMaster)
            {
                gameMasterModified = true;
                newMaster.Roles |= ClientRoles.GameMaster;
            }

            // Inform client
            client.OnGameLeft(); // TODO: is this statement really usefull ???

            // Inform other clients in game
            foreach (IClient target in Clients.Where(c => c != client))
                target.OnClientGameLeft(client.Id);
            // Inform other clients about game master modification
            if (gameMasterModified)
            {
                foreach (IClient target in Clients.Where(c => c != client))
                    target.OnGameMasterModified(newMaster.Id);
                Log.Default.WriteLine(LogLevels.Info, "Game {0}: Game master modified: {1}", Name, newMaster.Id);
            }

            // If game was running and player was playing, check if only one player left
            if ((State == GameStates.GameStarted || State == GameStates.GamePaused) && wasPlaying)
            {
                int playingCount = Players.Count(p => p.State == ClientStates.Playing);
                if (playingCount == 0 || playingCount == 1)
                {
                    Log.Default.WriteLine(LogLevels.Info, "Game finished by forfeit no winner");
                    //
                    State = GameStates.GameFinished;
                    // Disable sudden death
                    _isSuddenDeathActive = false;
                    _suddenDeathTimer.Change(Timeout.Infinite, Timeout.Infinite);
                    //
                    GameStatistics statistics = PrepareGameStatistics();
                    // Send game finished (no winner)
                    foreach(IClient target in Clients.Where(c => c != client))
                        target.OnGameFinished(GameFinishedReasons.NotEnoughPlayers, statistics);
                    // Reset last player if any
                    if (playingCount == 1)
                    {
                        IClient last = Players.Single(p => p.State == ClientStates.Playing);
                        last.State = ClientStates.WaitInGame;
                    }
                    //
                    State = GameStates.WaitStartGame;
                }
            }

            Log.Default.WriteLine(LogLevels.Info, "Game {0}: client {1} left", Name, client.Name);
            return true;
        }
开发者ID:SinaC,项目名称:TetriNET2,代码行数:85,代码来源:Game.cs


注:本文中的IClient.OnGameLeft方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。