memoria e Frame Rate) ou qualquer coisa voce precise, um terminal e uma maneira confortavel de interagir com seu jogo com o maximo de controle.Utilizando o TerminalComponentO terminal foi implementado segundo o padrao de projeto Singleton,A primeira coisa a fazer e inicializar o componente: protected override void Initialize(){ConsoleComponent.InitializeConsole(this, 25);...} Agora basta, obter uma instancia e adicionar a lista de componentes : ConsoleComponent _terminal;...protected override void Initialize(){ConsoleComponent.InitializeConsole(this, 25);_terminal = ConsoleComponent.GetConsole()Components.Add(_terminal);...} Por padrao a tecla F2 e utilizada para exibir/ocultar o terminal. Caso seu jogo ja utilize esta tecla (pouco provavel :D), voce pode redefini-la atraves da propriedade ShowHideKey. Por exemplo, se quisermos utilizar a letra T bastaria o seguinte: protected override void Initialize(){ConsoleComponent.InitializeConsole(this, 25);_terminal = ConsoleComponent.GetConsole()Components.Add(_terminal);_terminal.ShowHideKey = Keys.T;...} Pronto! Nosso game ja tem um terminal! Mas pra que seja realmente util, devemos definir alguns comandos, pois sao eles os comandos a razao de ser do terminal.Adicionando comandos personalizadosVamos definir um comando chamado exit cuja funcao e finalizar o programa.A primeira coisa a fazer e criar um metodo que sera executado quando o comando for chamado. Este metodo deve obedecer a assinatura do TerminalCommandDelegate, ou seja, retornar void e receber um string[] como parametro. private void ExitCommand(string[] args){ Exit();} Simples assim. Falta agora definir um comando no terminal que execute este metodo. Definir um comando e simplesmente passar para o metodo AddCommand o nome, uma descricao e um TerminalCommandDelegate (Delegate responsavel pela execucao do comando).Para o nosso comando exit, ficaria assim: protected override void Initialize(){ConsoleComponent.InitializeConsole(this, 25);_terminal = ConsoleComponent.GetConsole()Components.Add(_terminal);_terminal.ShowHideKey = Keys.T;_terminal.AddCommand("exit", "Terminates the program", ExitCommand);...} Podemos definir tambem comandos mais complexos que recebam parametros, simplesmente verificando o array de strings passado para o metodo do comando.Neste array, o primeiro elemento indice zero e sempre o nome do comando e os demais elementos, sao os parametros passados para o comando.Comandos pre-definidosAlem dos comandos que voce definir para o terminal, existe sempre 2 comandos pre-definidos: Comando help [comando]: Exibe a descricao de um comando, ou se invocado sem parametros, exibe uma lista com todos os comandos definidos. Comando clear: Limpa o terminal removendo todas as linhas de texto. Chamar o comando help passando o nosso comando exit como parametro, receberiamos como resposta, a descricao que criamos para o comando. help exitCommand Description: Terminates the program> Consideracoes FinaisCabem aqui algumas consideracoes:1 - E conveniente impedir que o game processe input do teclado enquanto o terminal estiver ativo. Fazemos isso simplesmente impedindo que qualquer outro processamento aconteca enquanto o terminal estiver ativo protected override void Update(GameTime gameTime){ // Nao processa input se o terminal estiver ativo if (_terminal.State == TerminalState.Active) return;// processa inputHandleInput(gameTime);...} 2 O console deve sempre ser o ultimo componente a ser desenhado , por isso, se durante a execucao do jogo precisar adicionar um componente, adicione o componete com Insert() em alguma posicao que nao seja a ultima ouremova o terminal, adicione o componente e adicione o terminal novamente. //Remove o terminalComponents.Remove(ConsoleComponent.GetConsole());//Adiciona o novo componenteComponents.Add(outroComponente);//Adiciona novamente o terminalComponents.Add(ConsoleComponent.GetConsole()); 3 - Como o terminal e um Singleton podemos obter uma referencia em qualquer parte do programa e utiliza-lo como saida padrao de erros, mensagens e excecoes. #if