Пример #1
0
    // GAME-RELATED METHODS

    /// <summary>
    /// Creates a new instance of a game, sends it to all clients and start the game
    /// </summary>
    public void StartGame()
    {
      Accepting = false;
      SendToAll(Network.MakeServerMessage(MessageType.GameState, GameState.Starting));
      CurrentGameState = GameState.Starting;

      clientMessages = new Queue<string[]>();

      lock (ClientConnections)
      {

        Game = new WildmenGame();
        Game.IsServer = true;
        Game.MakeMap(MapWidth, MapHeight, ClientConnections.Count(), UnitCap);

        if (!Game.Map.Valid)
        {
          SendMessage("Unable to create map with given parameters.");
          SendToAll(Network.MakeServerMessage(MessageType.GameState, GameState.Lobby));
          CurrentGameState = GameState.Lobby;
          Accepting = true;
          return;
        }

        Game.Map.LoadContent();
        Game.SendData = SendToAll;
        Game.ReceiveData = GetClientMessage;

        for (int i = 0; i < ClientConnections.Count(); i++)
        {
          ClientConnection c = ClientConnections[i];
          c.IngamePlayerId = i;
          Player p = new Player(i, Game, c.Name);
          p.Initialize();
          Game.PlacePlayer(i, p);
        }

        string savegame = Game.SaveGame().TrimStart(':');

        for (int i = 0; i < ClientConnections.Count(); i++)
        {
          ClientConnection c = ClientConnections[i];
          Player p = Game.Players[i];

          c.StartSend(Network.MakeServerMessage(MessageType.GameTransfer, savegame));
          c.StartSend(Network.MakeServerMessage(MessageType.PlayerAssign, i));
        }

        SendToAll(Network.MakeServerMessage(MessageType.GameState, GameState.Started));
        CurrentGameState = GameState.Started;
      }
      SendMessage("Game started.");
    }